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 += '
' + ' ' + '' if (cfg.height) { inHtml += '' } 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 + '
' + ' ' + ' ' if (cfg.height) { inHtml += ' ' } inHtml += '
经度:
纬度:
高程:
' } } $('#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) }, }