let thisWidget
//当前页面业务
function initWidgetView(_thisWidget) {
thisWidget = _thisWidget
//清除所有标号
$('#btnDelete').click(function () {
thisWidget.deleteEntity()
})
$('#btnCenter').click(function (e) {
thisWidget.centerCurrentEntity()
})
$('#btn_plot_savefile').click(function () {
let data = thisWidget.getGeoJson()
haoutil.file.downloadFile('标绘item.json', JSON.stringify(data))
})
plotEdit.initEvent()
thisWidget.startEditing()
}
//属性编辑相关
var plotEdit = {
hasEditSylte: true,
initEvent: function () {
let that = this
if (!this.hasEditSylte) {
$('#attr_style_view').hide()
}
//改变高度 - 高程全部设置为
$('#plot_latlngs_allheight').bind('input propertychange', function () {
$('#plot_latlngs_addheight').val('')
let thisval = Number($(this).val()) //高度(米)
if (isNaN(thisval)) {
thisval = 1
}
let latlngs = []
$('.plot_latlngs').each(function () {
if ($(this).attr('data-type') == 'height') {
$(this).val(thisval)
latlngs.push(thisval)
} else {
latlngs.push(Number($(this).val())) //经纬度值
}
})
thisWidget.updateGeo2map(latlngs, true)
})
//改变高度 - 在地表高程偏移
$('#plot_latlngs_addheight').bind('input propertychange', function () {
$('#plot_latlngs_allheight').val('')
let thisval = Number($(this).val()) //高度(米)
if (isNaN(thisval)) {
thisval = 1
}
let latlngs = []
$('.plot_latlngs').each(function () {
if ($(this).attr('data-type') == 'height') {
let oldval = Number($(this).attr('oldvalue'))
$(this).val(oldval + thisval)
latlngs.push(oldval + thisval)
} else {
latlngs.push(Number($(this).val())) //经纬度值
}
})
thisWidget.updateGeo2map(latlngs, true)
})
},
_last_attr: null,
//选中标号,激活属性面板
startEditing: function (attr, latlngs) {
if (!thisWidget.attrConfig) {
return
}
if (attr && attr.attr) {
attr = {
...attr,
...attr.attr,
}
}
this._last_attr = attr
let config = thisWidget.attrConfig[attr.edittype || attr.type] || {}
config.style = config.style || {}
if (latlngs) {
this.updateLatlngsHtml(latlngs, config.points)
}
let arrFun = []
let parname, inHtml
//==============style==================
if (this.hasEditSylte) {
parname = 'plot_attr_style_'
inHtml = '
| 类型: | ' + (attr.name || config.name) + ' |
'
for (let idx = 0; idx < config.style.length; idx++) {
let edit = config.style[idx]
if (edit.type == 'hidden') {
continue
}
let attrName = edit.name
let attrVal = attr.style[attrName] || edit.defval
//贴地对象
if (attr.style['clampToGround']) {
if (
attrName == 'fill' || //不能取消填充。
attrName == 'height' || //没有高度
attrName == 'distanceDisplayCondition' ||
attrName == 'distanceDisplayCondition_far' ||
attrName == 'distanceDisplayCondition_near' ||
attrName == 'outline' ||
attrName == 'outlineWidth' ||
attrName == 'outlineColor' ||
attrName == 'outlineOpacity' ||
attrName == 'hasShadows' ||
attrName == 'diffHeight'
) {
continue
}
}
//三维立体对象
if (attr.style['diffHeight'] > 0) {
if (attrName == 'clampToGround' || attrName == 'outlineWidth') {
continue
}
}
let input = this.getAttrInput(parname, attrName, attrVal, edit)
if (input.fun) {
arrFun.push({ parname: parname, name: attrName, value: attrVal, edit: edit, fun: input.fun })
}
inHtml += ' | ' + edit.label + ' | ' + input.html + ' |
'
}
$('#talbe_style').html(inHtml)
//注记属性
if (attr.style.label) {
let configLbl = thisWidget.attrConfig['label'] || {}
let defStyleLbl = thisWidget.getDefStyle('label') //赋值默认样式
parname = 'plot_attr_stylelabel_'
inHtml = ''
for (let idx = 0; idx < configLbl.style.length; idx++) {
let edit = configLbl.style[idx]
if (edit.type == 'hidden') {
continue
}
let attrName = edit.name
let attrVal = attr.style.label[attrName] || defStyleLbl[attrName]
let input = this.getAttrInput(parname, attrName, attrVal, edit)
if (input.fun) {
arrFun.push({ parname: parname, name: attrName, value: attrVal, edit: edit, fun: input.fun })
}
inHtml += ' | ' + edit.label + ' | ' + input.html + ' |
'
}
$('#talbe_stylelabel').html(inHtml)
$('#attr_stylelabel_view').show()
} else {
$('#attr_stylelabel_view').hide()
}
}
//==============attr==================
parname = 'plot_attr_attr_'
inHtml = ''
attr.attr = attr.attr || {}
let attrcfg = thisWidget.getAttrList()
for (let idx = 0; idx < attrcfg.length; idx++) {
let edit = attrcfg[idx]
if (edit.type == 'hidden') {
continue
}
let attrName = edit.name
let attrVal = attr.attr[attrName] || edit.defval || ''
let input = this.getAttrInput(parname, attrName, attrVal, edit)
if (input.fun) {
arrFun.push({ parname: parname, name: attrName, value: attrVal, edit: edit, fun: input.fun })
}
inHtml += ' | ' + edit.label + ' | ' + input.html + ' |
'
}
$('#talbe_attr').html(inHtml)
//执行各方法
for (let idx = 0; idx < arrFun.length; idx++) {
let item = arrFun[idx]
item.fun(item.parname, item.name, item.value, item.edit)
}
window.tab2attr() //切换面板
},
lastCfg: null,
updateLatlngsHtml: function (latlngs, cfg) {
cfg = cfg || this.lastCfg || {}
this.lastCfg = cfg
$('#plot_latlngs_addheight').val('')
$('#plot_latlngs_allheight').val('')
$('#view_updateheight').hide()
if (!cfg.hasOwnProperty('height')) {
cfg.height = true
}
//显示坐标信息
let inHtml = ''
if (!latlngs || latlngs.length == 0) {
//
} else if (latlngs.length == 1) {
let latlng = latlngs[0]
let jd = latlng[0]
let wd = latlng[1]
let height = latlng.length == 3 ? latlng[2] : 0
inHtml +=
' '
} else {
if (cfg.height) {
$('#view_updateheight').show()
}
let delhtml = ''
if (latlngs.length > thisWidget.getMinPointNum()) {
delhtml = ''
}
for (let idx = 0; idx < latlngs.length; idx++) {
let latlng = latlngs[idx]
let jd = latlng[0]
let wd = latlng[1]
let height = latlng.length == 3 ? latlng[2] : 0
let addthml = ''
if (latlngs.length < thisWidget.getMaxPointNum()) {
addthml = ' '
}
//
inHtml +=
'-第' +
(idx + 1) +
'点 ' +
addthml +
delhtml +
'
'
}
}
$('#view_latlngs').html(inHtml)
$('#view_latlngs .open').click(window.changeOpenShowHide)
let that = this
$('#view_latlngs .latlng-del').click(function () {
$(this).parent().parent().remove()
let latlngs = []
let withHeight = false
$('.plot_latlngs').each(function () {
latlngs.push(Number($(this).val()))
if ($(this).attr('data-type') === 'height') {
withHeight = true
}
})
thisWidget.updateGeo2map(latlngs, withHeight)
//重新修改界面
let arr = []
if (withHeight) {
for (let i = 0; i < latlngs.length; i += 3) {
arr.push([latlngs[i], latlngs[i + 1], latlngs[i + 2]])
}
} else {
for (let i = 0; i < latlngs.length; i += 2) {
arr.push([latlngs[i], latlngs[i + 1]])
}
}
that.updateLatlngsHtml(arr)
})
$('#view_latlngs .latlng-install').click(function () {
let idx = Number($(this).attr('data-index'))
let latlngs = []
let withHeight = false
$('.plot_latlngs').each(function () {
latlngs.push(Number($(this).val()))
if ($(this).attr('data-type') === 'height') {
withHeight = true
}
})
//重新修改界面
let arr = []
if (withHeight) {
for (let i = 0; i < latlngs.length; i += 3) {
arr.push([latlngs[i], latlngs[i + 1], latlngs[i + 2]])
}
} else {
for (let i = 0; i < latlngs.length; i += 2) {
arr.push([latlngs[i], latlngs[i + 1]])
}
}
let pt1 = arr[idx]
let pt2 = idx == arr.length - 1 ? arr[0] : arr[idx + 1]
let jd = Number(((pt1[0] + pt2[0]) / 2).toFixed(6))
let wd = Number(((pt1[1] + pt2[1]) / 2).toFixed(6))
if (withHeight) {
let gd = Number(((pt1[2] + pt2[2]) / 2).toFixed(1))
arr.splice(idx + 1, 0, [jd, wd, gd])
latlngs.splice((idx + 1) * 3, 0, jd, wd, gd)
} else {
arr.splice(idx + 1, 0, [jd, wd])
latlngs.splice((idx + 1) * 3, 0, jd, wd)
}
that.updateLatlngsHtml(arr)
thisWidget.updateGeo2map(latlngs, withHeight)
})
$('.plot_latlngs').bind('input propertychange', function () {
let latlngs = []
let withHeight = false
$('.plot_latlngs').each(function () {
latlngs.push(Number($(this).val()))
if ($(this).attr('data-type') === 'height') {
withHeight = true
}
})
thisWidget.updateGeo2map(latlngs, withHeight)
})
},
// //单击地图空白,释放属性面板
// stopEditing: function () {
// $("#talbe_style").html('');
// $("#talbe_attr").html('');
// this._last_attr = null;
// },
//获取各属性的编辑html和change方法
getAttrInput: function (parname, attrName, attrVal, edit) {
if (attrVal == null || attrVal == undefined) {
attrVal = ''
}
let that = this
let inHtml = ''
let fun = null
switch (edit.type) {
default:
case 'label':
inHtml = attrVal
break
case 'text':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).on('input propertychange', function (e) {
let attrVal = $(this).val()
that.updateAttr(parname, attrName, attrVal)
})
}
break
case 'textarea':
attrVal = attrVal.replace(new RegExp('
', 'gm'), '\n')
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).on('input propertychange', function (e) {
let attrVal = $(this).val()
if (attrVal.length == 0) {
attrVal = '文字'
}
attrVal = attrVal.replace(/\n/g, '
')
that.updateAttr(parname, attrName, attrVal)
})
}
break
case 'number':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).on('input propertychange', function (e) {
let attrVal = Number($(this).val())
that.updateAttr(parname, attrName, attrVal)
})
}
break
case 'combobox':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).select() //绑定样式
$('#' + parname + attrName).change(function () {
let attrVal = $(this).attr('data-value')
that.updateAttr(parname, attrName, attrVal)
for (let jj = 0; jj < edit.data.length; jj++) {
let temp = edit.data[jj]
if (temp.impact == null) {
continue
}
that.changeViewByAttr(parname, temp.impact, temp.value === attrVal)
}
})
for (let jj = 0; jj < edit.data.length; jj++) {
let temp = edit.data[jj]
if (temp.impact == null) {
continue
}
that.changeViewByAttr(parname, temp.impact, temp.value === attrVal)
}
}
break
case 'radio':
{
let _name_key = parname + attrName
inHtml =
'
'
fun = function (parname, attrName, attrVal, edit) {
$('input:radio[name="' + parname + attrName + '"]').change(function () {
let attrVal = $(this).val() == '1'
that.updateAttr(parname, attrName, attrVal)
that.changeViewByAttr(parname, edit.impact, attrVal)
})
that.changeViewByAttr(parname, edit.impact, attrVal)
}
}
break
case 'color':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).minicolors({
position: 'bottom right',
control: 'saturation',
change: function (hex, opacity) {
that.updateAttr(parname, attrName, hex)
},
})
}
break
case 'slider':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
let _width = $('.mp_tab_card').width() * 0.7 - 30
$('#' + parname + attrName).progress(_width) //绑定样式
$('#' + parname + attrName).change(function () {
let attrVal = Number($(this).val()) / 100
that.updateAttr(parname, attrName, attrVal)
})
}
break
case 'window':
inHtml = ''
fun = function (parname, attrName, attrVal, edit) {
$('#' + parname + attrName).on('click', function (e) {
thisWidget.showEditAttrWindow({
data: that._last_attr,
parname: parname,
attrName: attrName,
attrVal: attrVal,
})
})
$('#' + parname + attrName).on('input propertychange', function (e) {
let attrVal = $(this).val()
that.updateAttr(parname, attrName, attrVal)
})
}
break
}
return { html: inHtml, fun: fun }
},
//联动属性控制
changeViewByAttr: function (parname, arrimpact, show) {
if (arrimpact && arrimpact.length > 0) {
for (let jj = 0; jj < arrimpact.length; jj++) {
let attrName = arrimpact[jj]
if (show) {
$('#' + parname + 'tr_' + attrName).show()
} else {
$('#' + parname + 'tr_' + attrName).hide()
}
}
}
},
//属性面板值修改后触发此方法
updateAttr: function (parname, attrName, attrVal) {
switch (parname) {
default:
break
case 'plot_attr_style_':
this._last_attr.style[attrName] = attrVal
break
case 'plot_attr_stylelabel_':
this._last_attr.style.label = this._last_attr.style.label || {}
this._last_attr.style.label[attrName] = attrVal
break
case 'plot_attr_attr_':
this._last_attr.attr[attrName] = attrVal
//this.startEditing(this._last_attr);
break
}
thisWidget.updateAttr2map(this._last_attr)
},
}