// import { Feature } from "ol"; // import VectorLayer from "ol/layer/Vector"; // import VectorSource from "ol/source/Vector"; // import { Style, Icon, Fill, Stroke, Text, Circle as CircleStyle } from "ol/style"; // import { Point, LineString } from "ol/geom"; // import Overlay from 'ol/Overlay.js'; // import { unByKey } from "ol/Observable.js"; //移除事件 import Vue from 'vue'; import axios from "axios"; import _GLOBAL from '@/assets/GLOBAL2'; import poiLayer from '@/components/poplayer/main'; import store from "@/utils/store2"; import { Message } from 'element-ui'; let tdglLine, qiyexinxi, qysl, ydbm, ydlx, cyfx, crzt, ydmj, crnx, crnf, rjl, jzxg, jzmd; let objdata; var clickEvent; window.tdglLine = tdglLine let PoiLayerConstructor = Vue.extend(poiLayer); /**核心区 */ export function loadHXQ() { let urls = window.gisBaseUrl + "/gisserver/wmsserver/YZ_BJ60"; window.HXQ = sgworld.Creator.createImageryProvider('hxqgisserver', "wms", { url: urls, layers: '', parameters: { format: "image/png", transparent: true, } }, "0", undefined, true, function () { Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.52556, 39.71046, 34189.97), orientation: {//设置相机的Heading,Pitch,Roll,参照上图 heading: Cesium.Math.toRadians(360.0), pitch: Cesium.Math.toRadians(-90.0), roll: 0.0 }, duration: 3 }); }); } /**经开区 */ export function loadJKQ() { let urls = window.gisBaseUrl + "/gisserver/wmsserver/YZ_BJ"; window.JKQ = sgworld.Creator.createImageryProvider('jkqgisserver', "wms", { url: urls, layers: '', parameters: { format: "image/png", transparent: true, } }, "0", undefined, true, function () { Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.52902, 39.67853, 59383.65), orientation: {//设置相机的Heading,Pitch,Roll,参照上图 heading: Cesium.Math.toRadians(360.0), pitch: Cesium.Math.toRadians(-90.0), roll: 0.0 }, duration: 3 }); }); } /**乡镇 */ export function loadXZ() { let urls = window.gisBaseUrl + "/gisserver/wmsserver/xiangzhen"; window.XZ = sgworld.Creator.createImageryProvider('xzgisserver', "wms", { url: urls, layers: '', parameters: { format: "image/png", transparent: true, } }, "0", undefined, true, function () { Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.55718, 39.65440, 53149.25), orientation: {//设置相机的Heading,Pitch,Roll,参照上图 heading: Cesium.Math.toRadians(360.0), pitch: Cesium.Math.toRadians(-90.0), roll: 0.0 }, duration: 3 }); }); } /**窨井 */ export function loadManhole() { window.clusterLayer && window.clusterLayer.clear(); axios .get(window.gisBaseUrl + '/gisserver/wfsserver/yinjing?version=1.3.0&request=GetFeature&format=json&typename=yz井数据') .then(res => { // let manholeList = JSON.parse(res.data); store.setLayerPanelShow(false); res.data.features.forEach((item, index) => { window.clusterLayer.add( new SmartEarth.Degrees(item.geometry.coordinates[0], item.geometry.coordinates[1], 15), { name: `YINJ-${item.properties.ID}-${item.properties['井名称']}-${item.properties['井深']}-${item.properties['井类型']}-${item.properties['井编号']}-${item.properties['位置']}-${item.properties['标段备注']}-${item.properties['行政区编码']}-${item.geometry.coordinates[0]}-${item.geometry.coordinates[1]}`, image: SmartEarthRootUrl + 'Workers/image/mark.png', scale: 0.5 } ) }); Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.54555, 39.74727, 20565.49), orientation: {//设置相机的Heading,Pitch,Roll,参照上图 heading: Cesium.Math.toRadians(360.0), pitch: Cesium.Math.toRadians(-90.0), roll: 0.0 }, duration: 3 }); }) // let url = window.gisBaseUrl + '/gisserver/wfsserver/yinjing'; // let sgwfs = new SmartEarth.WFSTool(Viewer); // sgwfs.CreateWfs('point', { // urls: url, // layer: 'yz井数据', // text: '[井名称]', // image: SmartEarthRootUrl + 'Workers/image/mark.png', // //offsetX: 20, // offsetY: -40, // color: '#de3', // disableDepthTestDistance: Infinity // }) } /**企业 */ export function loadEnterprise() { new Cesium.GeoJsonDataSource.load( window.gisBaseUrl + '/gisserver/wfsserver/qiyelianqiye?version=1.3.0&request=GetFeature&format=json&typename=企业链企业' ) // axios.get(window.gisBaseUrl + '/gisserver/wfsserver/qiyelianqiye?version=1.3.0&request=GetFeature&format=json&typename=企业链企业') .then(dataSource => { console.log(dataSource); store.qiyeJsonInfo = dataSource }) .catch((err) => { console.log(err); }); } // export function loadEnterprise() { // window.clusterLayer && window.clusterLayer.clear(); // axios // .get(window.gisBaseUrl + '/gisserver/wfsserver/qiyelianqiye?version=1.3.0&request=GetFeature&format=json&typename=企业链企业') // .then(res => { // // let manholeList = JSON.parse(res.data); // store.setLayerPanelShow(false); // res.data.features.forEach((item, index) => { // window.clusterLayer.add( // new SmartEarth.Degrees(item.geometry.coordinates[0], item.geometry.coordinates[1], 15), // { // name: `QY&${item.properties.ID}&${item.properties['QYMC']}&${item.properties['DZ']}&${item.properties['BZDZ']}&${item.properties['XYDM']}&${item.geometry.coordinates[0]}&${item.geometry.coordinates[1]}`, // image: SmartEarthRootUrl + 'Workers/image/mark.png', // scale: 0.5 // } // ) // }); // Viewer.camera.flyTo({ // destination: Cesium.Cartesian3.fromDegrees(116.54555, 39.74727, 20565.49), // orientation: {//设置相机的Heading,Pitch,Roll,参照上图 // heading: Cesium.Math.toRadians(360.0), // pitch: Cesium.Math.toRadians(-90.0), // roll: 0.0 // }, // duration: 3 // }); // }) // // let url = window.gisBaseUrl + '/gisserver/wfsserver/yinjing'; // // let sgwfs = new SmartEarth.WFSTool(Viewer); // // sgwfs.CreateWfs('point', { // // urls: url, // // layer: 'yz井数据', // // text: '[井名称]', // // image: SmartEarthRootUrl + 'Workers/image/mark.png', // // //offsetX: 20, // // offsetY: -40, // // color: '#de3', // // disableDepthTestDistance: Infinity // // }) // } /**摄像头 */ export function loadCamera() { window.clusterLayer && window.clusterLayer.clear(); axios .get(window.gisBaseUrl + '/gisserver/wfsserver/YZ_SPJK_NEW_wfs?version=1.3.0&request=GetFeature&format=json&typename=摄像头0423') .then(res => { store.setLayerPanelShow(false); res.data.features.forEach((item, index) => { window.clusterLayer.add( new SmartEarth.Degrees(item.geometry.coordinates[0], item.geometry.coordinates[1], 15), { name: `SPJK-${item.properties['IP地址']}-${item.properties['JK内码']}-${item.properties['JK区域']}-${item.properties['JK名称']}-${item.properties['JK类型']}-${item.properties['JK编号']}`, image: SmartEarthRootUrl + 'Workers/image/mark1.png', scale: 1 } ) }); Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.51463, 39.73972, 19586.80), orientation: {//设置相机的Heading,Pitch,Roll,参照上图 heading: Cesium.Math.toRadians(360.0), pitch: Cesium.Math.toRadians(-90.0), roll: 0.0 }, duration: 3 }); }) // let url = window.gisBaseUrl + '/gisserver/wfsserver/YZ_SPJK_NEW_wfs'; // let sgwfs2 = new SmartEarth.WFSTool(Viewer); // sgwfs2.CreateWfs('point', { // urls: url, // layer: '摄像头0423', // text: '[JK名称]', // image: SmartEarthRootUrl + 'Workers/image/mark.png', // //offsetX: 20, // offsetY: -40, // color: '#de3', // disableDepthTestDistance: Infinity // }) } /**清除矢量地图 */ export function clearMap() { window.HXQ && window.HXQ.deleteObject(); window.JKQ && window.JKQ.deleteObject(); window.XZ && window.XZ.deleteObject(); } // 左击事件 window.divPoint3 = null; window.instance = null; window.pickFeature = null; window.imgUrl = null; window.scale = null; window.clickPOI = null function read(wkt) { var regExes = { typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/, spaces: /\s+/, parenComma: /\)\s*,\s*\(/, doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here trimParens: /^\s*\(?(.*?)\)?\s*$/, }; /** * Object with properties corresponding to the geometry types. Property values * are functions that do the actual parsing. * @private */ var parse$1 = { /** * Return point geometry given a point WKT fragment. * * @param {String} str A WKT fragment representing the point. * @return {Point} A point geometry. * @private */ point: function point(str) { if (str === undefined) { return []; } var coords = str.trim().split(regExes.spaces); return [Number.parseFloat(coords[0]), Number.parseFloat(coords[1])]; }, /** * Return a multipoint geometry given a multipoint WKT fragment. * * @param {String} str A WKT fragment representing the multipoint. * @return {Point} A multipoint feature. * @private */ multipoint: function multipoint(str) { var this$1 = this; if (str === undefined) { return []; } var point; var points = str.trim().split(","); var components = []; for (var i = 0, len = points.length; i < len; ++i) { point = points[i].replace(regExes.trimParens, "$1"); components.push(parse$1.point(point)); } return components; }, /** * Return a linestring geometry given a linestring WKT fragment. * * @param {String} str A WKT fragment representing the linestring. * @return {LineString} A linestring geometry. * @private */ linestring: function linestring(str) { if (str === undefined) { return []; } var points = str.trim().split(","); var components = []; var coords; for (var i = 0, len = points.length; i < len; ++i) { coords = points[i].trim().split(regExes.spaces); components.push([ Number.parseFloat(coords[0]), Number.parseFloat(coords[1]), ]); } return components; }, /** * Return a linearring geometry given a linearring WKT fragment. * * @param {String} str A WKT fragment representing the linearring. * @return {LinearRing} A linearring geometry. * @private */ linearring: function linearring(str) { if (str === undefined) { return []; } var points = str.trim().split(","); var components = []; var coords; for (var i = 0, len = points.length; i < len; ++i) { coords = points[i].trim().split(regExes.spaces); components.push([ Number.parseFloat(coords[0]), Number.parseFloat(coords[1]), ]); } return components; }, /** * Return a multilinestring geometry given a multilinestring WKT fragment. * * @param {String} str A WKT fragment representing the multilinestring. * @return {MultiLineString} A multilinestring geometry. * @private */ multilinestring: function multilinestring(str) { var this$1 = this; if (str === undefined) { return []; } var line; var lines = str.trim().split(regExes.parenComma); var components = []; for (var i = 0, len = lines.length; i < len; ++i) { line = lines[i].replace(regExes.trimParens, "$1"); components.push(parse$1.linestring(line)); } return components; }, /** * Return a polygon geometry given a polygon WKT fragment. * * @param {String} str A WKT fragment representing the polygon. * @return {Polygon} A polygon geometry. * @private */ polygon: function polygon(str) { var this$1 = this; if (str === undefined) { return []; } var ring, linestring, linearring; var rings = str.trim().split(regExes.parenComma); var shell; var holes = []; //for (var i = 0, len = rings.length; i < len; ++i) { ring = rings[0].replace(regExes.trimParens, "$1"); linestring = ring; //} return linestring; }, /** * Return a multipolygon geometry given a multipolygon WKT fragment. * * @param {String} str A WKT fragment representing the multipolygon. * @return {MultiPolygon} A multipolygon geometry. * @private */ multipolygon: function multipolygon(str) { var this$1 = this; if (str === undefined) { return []; } var polygon; var polygons = str.trim().split(regExes.doubleParenComma); var components = []; for (var i = 0, len = polygons.length; i < len; ++i) { polygon = polygons[i].replace(regExes.trimParens, "$1"); components.push(parse$1.polygon(polygon)); } return components; }, }; var geometry, type, str; wkt = wkt.replace(/[\n\r]/g, " "); var matches = regExes.typeStr.exec(wkt); if (wkt.search("EMPTY") !== -1) { matches = regExes.emptyTypeStr.exec(wkt); matches[2] = undefined; } if (matches) { type = matches[1].toLowerCase(); str = matches[2]; if (parse$1[type]) { geometry = parse$1[type].apply(this, [str]); } } if (geometry === undefined) { throw new Error("Could not parse WKT " + wkt); } return geometry; } export function leftClick() { try { // 点击事件 let handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); // let nPickFeature; // 鼠标点击事件 handler.setInputAction(event => { window.clickPOI = sgworld.Navigate.getMouseDegrees(event); // console.log(window.clickPOI); if (window.clickPOI) { // 隐藏底部图层面版 store.setLayerPanelShow(false); // 隐藏右上角菜单面板 store.setMenuListShow(false); // 隐藏底部漫游面板 store.setRoamPanelShow(false); } // 土地管理 if (store.tdglInfo.flag) { axios .get( // "http://10.10.4.115:8022/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" + window.gisBaseUrl + "yzxncsApi/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" + window.clickPOI.lon + "&lat=" + window.clickPOI.lat + "&geom=true&requesttype=json" ).then(response => { let center = { lon: 0, lat: 0 }; let polygon = read(response.data.geometry); if (polygon.length > 0) { var geometry = []; let points = polygon[0].split(","); for (let i = 0; i < points.length; i++) { let point = points[i].replace(/^\s+|\s+$/g, "").split(" "); center.lon += parseFloat(point[0]) / points.length; center.lat += parseFloat(point[1]) / points.length; geometry.push({ x: parseFloat(point[0]), y: parseFloat(point[1]), z: 0, }); } if (window.tdglLine) { sgworld.Creator.DeleteObject(window.tdglLine); window.tdglLine = null; } window.tdglLine = sgworld.Creator.createPolyline( geometry, "#ff0000", 1, 0, "线" ); if (center.lon != 0 && center.lat != 0) { Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees( center.lon, center.lat, 1000 ), duration: 1.0, }); } } if (center.lon != 0 && center.lat != 0) { axios .get( // "http://10.10.4.115:8022//poisearch/guihuacon/getInfo?ydbm=" + window.gisBaseUrl + "yzxncsApi/poisearch/guihuacon/getInfo?ydbm=" + response.data.NO ) .then( info => { let data = info.data.data; if (data.yongdishuju === null) { objdata = { POITYPE: "NOTDGL", zwxx: "暂无信息", lon: window.clickPOI.lon, lat: window.clickPOI.lat, } } else { qiyexinxi = info.data.data.qiyexinxi; qysl = data.qiyexinxi.length; if (qysl > 0) { ydbm = data.qiyexinxi[0]["地块编号"]; } else { ydbm = data.churangxinxi["ydbh"]; } try { ydlx = data.yongdishuju["ydlxmc"]; } catch (e) { } try { cyfx = data.yongdishuju["cyfx"]; } catch (e) { } try { // this.crzt = response.data["ZT"]; switch (response.data["ZT"]) { case 3: crzt = "已出让"; break; case 4: crzt = "未出让"; break; } } catch (e) { } try { ydmj = parseFloat( "" + data.yongdishuju["ydmj"] ).toFixed(0); } catch (e) { } try { crnx = data.churangxinxi["crnx"]; } catch (e) { } try { crnf = data.churangxinxi["crnf"]; } catch (e) { } try { rjl = data.yongdishuju["rjl"]; } catch (e) { } try { jzxg = data.yongdishuju["jzxg"]; } catch (e) { } try { jzmd = data.yongdishuju["jzmd"]; } catch (e) { } objdata = { POITYPE: "TDGL", ydbm, ydlx, cyfx, crzt, ydmj, ydbm, crnx, crnf, rjl, jzxg, jzmd, lon: window.clickPOI.lon, lat: window.clickPOI.lat, } } store.setTdglShow(false); store.setTdlgInfo({}); store.setTdglShow(true); store.setTdlgInfo(objdata); // divPoint3 && divPoint3.deleteObject(); // store.setPoplayerShowAction(false); // store.setPoplayerListAction({}); // store.setPoplayerShowAction(true); // store.setPoplayerListAction(objdata); // if (window.instance) { // window.instance.$destroy(); // } // window.instance = new PoiLayerConstructor({ // data: { // list: objdata // } // }); // window.instance.$mount(); // divPoint3 = window.sgworld.Creator.createDivPoint('', { // lon: objdata.lon, // lat: objdata.lat, // height: 5 // }, { // type: "custom", // offset: ["c", 20], // description: window.instance.$el, // near: 0, // far: 100000 // }); } ); } }) } let nPickFeature = sgworld.Viewer.scene.pick(event.position); // console.log(nPickFeature); // if (nPickFeature == undefined) { // window.flyPoint && Viewer.entities.remove(window.flyPoint); // window.flyPoint = undefined; // } // console.log(event.position);//屏幕位置 if (!nPickFeature || !nPickFeature.id) { return } else if (nPickFeature.primitive instanceof Cesium.Billboard) { let cartographic = window.Viewer.scene.globe.ellipsoid.cartesianToCartographic( nPickFeature.primitive.position ); let lon = Cesium.Math.toDegrees(cartographic.longitude); let lat = Cesium.Math.toDegrees(cartographic.latitude); let p = sgworld.Navigate.getDegrees(); let flyHeight if (p.height > 2000) { flyHeight = p.height / 1.8 } else if (p.height > 500) { flyHeight = 500 } else { flyHeight = p.height } // console.log(p); Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees( window.clickPOI.lon, window.clickPOI.lat, flyHeight ), duration: 1.0, }); if (nPickFeature.id.length > 0) { return; } // 重置图标 if (window.pickFeature && window.pickFeature.primitive) { window.pickFeature.primitive.image = imgUrl; window.pickFeature.primitive.scale = scale; window.pickFeature = null; } // 备份拾取的对象 window.pickFeature = nPickFeature; imgUrl = nPickFeature.primitive.image; scale = nPickFeature.primitive.scale; nPickFeature.primitive.scale = 1; nPickFeature.primitive.image = window.SmartEarthRootUrl + "Workers/image/point.png"; //点击弹框(部件、企业、监控) if (nPickFeature.id.tag || nPickFeature.id.show) { let properties = nPickFeature.id.properties; let propertyNames = nPickFeature.id.properties.propertyNames; if (propertyNames.indexOf("监控名") !== -1) { // objdata = { // POITYPE: "SPJK", // name: properties["JK名称"]._value, // type: properties["JK类型"]._value, // function: properties["功能"]._value, // area: properties["所在区"]._value, // number: properties["JK编号"]._value, // code: properties["JK内码"]._value, // lon: lon, // lat: lat, // } Message({ message: '连接状态查询中', type: 'info', offset: 60, center: true, duration: 1000, }); layerOpen(properties["JK名称"]._value, { width: "100%", height: "40%", // offset: [offsetTop + "px", "380px"], url: "../../static/video/video.html?code=" + properties["JK内码"]._value, fn: { success: (layero, index) => { SmartEarthPopupData.layerContainer = layero; }, end: () => { }, cancel: () => { // 重置图标 if (window.pickFeature && window.pickFeature.primitive) { window.pickFeature.primitive.image = imgUrl; window.pickFeature.primitive.scale = scale; window.pickFeature = null; } sgworld.drawObj && sgworld.drawObj.end && sgworld.drawObj.end("cancel"); }, }, }); return } else if (propertyNames.indexOf("部件名称") !== -1) { objdata = { // 点位类型(中英文配置表poiKeys.js) POITYPE: "CSBJ", // 展示字段 name: properties["部件名称"]._value, address: properties["安装地址"]._value, code: properties["部件编码"]._value, type: properties["部件类型"]._value, // 弹框经纬度 lon: lon, lat: lat, } } else if (propertyNames.indexOf("井编号") !== -1) { objdata = { POITYPE: "YINJ", name: properties["井名称"]._value, depth: properties["井深"]._value, type: properties["井类型"]._value, location: properties["位置"]._value, code: properties["井编号"]._value, lon: lon, lat: lat, } } else if (propertyNames.indexOf("QYMC") !== -1) { objdata = { POITYPE: "QY", QYMC: properties["QYMC"]._value, XYDM: properties["XYDM"]._value, BZDZ: properties["BZDZ"]._value, DZ: properties["DZ"]._value, lon: lon, lat: lat, } } else if (propertyNames.includes("id")) { objdata = { POITYPE: "POINT", name: properties["_name"]._value, address: properties["_address"]._value, lat: properties["_lat"]._value, lon: properties["_lng"]._value, } } divPoint3 && divPoint3.deleteObject(); store.setPoplayerShowAction(false); store.setPoplayerListAction({}); store.setPoplayerShowAction(true); // let arr = nPickFeature.id.name.split('&'); // console.log(arr); // let objdata = { // POITYPE: "QY", // QYMC: arr[2], // DZ: arr[3], // BZDZ: arr[4], // XYDM: arr[5], // lon: arr[6], // lat: arr[7], // } store.setPoplayerListAction(objdata); if (window.instance) { window.instance.$destroy(); } window.instance = new PoiLayerConstructor({ data: { list: objdata } }); window.instance.$mount(); divPoint3 = window.sgworld.Creator.createDivPoint('', { lon: objdata.lon, lat: objdata.lat, height: 5 }, { type: "custom", offset: ["c", 20], description: window.instance.$el, near: 0, far: 100000 }); return; } // } // if (nPickFeature.id && nPickFeature.id.name.indexOf('YINJ') != -1) { // divPoint3 && divPoint3.deleteObject(); // store.setPoplayerShowAction(false); // store.setPoplayerListAction({}); // store.setPoplayerShowAction(true); // let arr = nPickFeature.id.name.split('-'); // let objdata = { // POITYPE: "YINJ", // name: arr[2], // depth: arr[3], // type: arr[4], // code: arr[5], // location: arr[6], // text: arr[7], // areaCode: arr[8], // lon: arr[9], // lat: arr[10] // } // store.setPoplayerListAction(objdata); // if (window.instance) { // window.instance.$destroy(); // } // window.instance = new PoiLayerConstructor({ // data: { // list: objdata // } // }); // window.instance.$mount(); // divPoint3 = window.sgworld.Creator.createDivPoint('', { // lon: objdata.lon, // lat: objdata.lat, // height: 5 // }, { // type: "custom", // offset: ["c", 20], // description: window.instance.$el, // near: 0, // far: 100000 // }); // return; // } // else if (nPickFeature.id && nPickFeature.id.name.indexOf('QY') != -1) { // divPoint3 && divPoint3.deleteObject(); // store.setPoplayerShowAction(false); // store.setPoplayerListAction({}); // store.setPoplayerShowAction(true); // let arr = nPickFeature.id.name.split('&'); // // console.log(arr); // let objdata = { // POITYPE: "QY", // QYMC: arr[2], // DZ: arr[3], // BZDZ: arr[4], // XYDM: arr[5], // lon: arr[6], // lat: arr[7], // } // store.setPoplayerListAction(objdata); // if (window.instance) { // window.instance.$destroy(); // } // window.instance = new PoiLayerConstructor({ // data: { // list: objdata // } // }); // window.instance.$mount(); // divPoint3 = window.sgworld.Creator.createDivPoint('', { // lon: objdata.lon, // lat: objdata.lat, // height: 5 // }, { // type: "custom", // offset: ["c", 20], // description: window.instance.$el, // near: 0, // far: 100000 // }); // return; // } else { // return; } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } catch (e) { } } //加载三维图层 export function loadLayer(treeNode) { console.log('loadLayer', treeNode); let layer; switch (treeNode.sourceType) { case "tms": layer = sgworld.Creator.createImageryProvider( treeNode.name, "tms", { id: treeNode.id, url: treeNode.urls, fileExtension: treeNode.img || "png", enablePickFeatures: false, alpha: treeNode.alpha, }, "0", undefined, true, "" ); return layer; break; case "local-map": // 添加本地地图 if (treeNode.tms) { layer = sgworld.Creator.createImageryProvider( treeNode.name, "tms", { id: treeNode.id, url: treeNode.urls, fileExtension: treeNode.img || "png", enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, minificationFilter: Cesium.TextureMinificationFilter.NEAREST_MIPMAP_LINEAR, magnificationFilter: Cesium.TextureMinificationFilter.NEAREST_MIPMAP_LINEAR, tilingScheme: treeNode.tileType === "Geo" ? new Cesium.GeographicTilingScheme() : new Cesium.WebMercatorTilingScheme(), alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); } else { layer = sgworld.Creator.createUrlTemplateImageryProvider( treeNode.name, { id: treeNode.id, url: `${treeNode.urls}/${treeNode.tile || "{z}/{x}/{y}"}.${treeNode.img || "png" }`, enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, tilingScheme: treeNode.tileType === "Geo" ? new Cesium.GeographicTilingScheme() : new Cesium.WebMercatorTilingScheme(), alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); } break; case "kml": // 添加kml数据 layer = sgworld.Creator.addKmlLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, }, true ); break; case "google": // 添加谷歌地图 layer = sgworld.Creator.createUrlTemplateImageryProvider( treeNode.name, { id: treeNode.id, url: treeNode.urls, enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "arcgis": // arcgis地图 layer = sgworld.Creator.createArcGisImageryLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, enablePickFeatures: false, level: treeNode.Level, usePreCachedTilesIfAvailable: treeNode.GCJ02 ? false : true, // 是否使用服务的内置的切片方案,偏移纠正需要使用如下自定义的方案 tilingScheme: treeNode.GCJ02 ? sgworld.Core.getOffsetTilingScheme() : undefined, // 偏移纠正 minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); return layer; break; case "mapbox": // mapbox地图 layer = sgworld.Creator.createImageryProvider( treeNode.name, "MapBox", { id: treeNode.id, name: treeNode.name, level: treeNode.Level, enablePickFeatures: false, mapId: treeNode.mapId, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, accessToken: treeNode.token || "pk.eyJ1IjoibWFyc2dpcyIsImEiOiJja2Fod2xlanIwNjJzMnhvMXBkMnNqcjVpIn0.WnxikCaN2KV_zn9tLZO77A", }, "0", treeNode.zIndex, true, "" ); break; case "tdmap": // 天地图 layer = sgworld.Creator.createWebMapTileServerImageLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: 18, style: treeNode.style, layer: treeNode.layer, format: treeNode.format, enablePickFeatures: false, tileMatrixSetID: "tiff", show: true, subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); return layer; break; case "yzsate": layer = sgworld.Creator.createWebMapTileServerImageLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, layer: treeNode.layer, enablePickFeatures: false, show: true, tileMatrixSetID: treeNode.ttileMatrixSetId ? treeNode.ttileMatrixSetId : "Sate_2019", tilingScheme: new Cesium.WebMercatorTilingScheme({ rectangleSouthwestInMeters: new Cesium.Cartesian2(0, -229396.5), rectangleNortheastInMeters: new Cesium.Cartesian2( 917580, 688193.5 ), //rectangleSouthwestInMeters:new Cesium.Cartesian2(0,0) , // rectangleNortheastInMeters:new Cesium.Cartesian2(20037508.3427892, 20037508.3427892), numberOfLevelZeroTilesX: 4, numberOfLevelZeroTilesY: 4, projection: new Cesium.GeographicProjection(), }), }, pID, undefined, treeNode.checked, "" ); treeNode.id = layer.treeobj.id; break; case "yzmap": layer = sgworld.Creator.createWebMapTileServerImageLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, layer: treeNode.layer, enablePickFeatures: false, show: true, }, pID, undefined, treeNode.checked, "" ); treeNode.id = layer.treeobj.id; break; case "yztile": layer = new YZWMS(treeNode); sgworld._Viewer.imageryLayers.addImageryProvider(layer); break; case "tdt_label": // 天地图三维注记 layer = sgworld.Creator.GeoWTFS({ token: treeNode.token || "c53eb074c3fcba5ac86103d4d711bbe8", url: treeNode.urls, subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"], }); break; case "txmap": // 腾讯地图 layer = sgworld.Creator.createUrlTemplateImageryProvider( treeNode.name, { id: treeNode.id, url: treeNode.urls, level: treeNode.Level, enablePickFeatures: false, minimumLevel: treeNode.minimumLevel, maximumLevel: 18, alpha: treeNode.alpha, tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正 customTags: { sx: (_imageryProvider, x) => { return x >> 4; }, sy: (_imageryProvider, _x, y, level) => { return ((1 << level) - y) >> 4; }, }, }, "0", treeNode.zIndex, true, "" ); return layer; break; case "gdmap": // 高德地图 layer = sgworld.Creator.createUrlTemplateImageryProvider( treeNode.name, { id: treeNode.id, url: treeNode.urls, enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: 18, tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正 alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); return layer; break; case "bdmap": // 百度地图 layer = sgworld.Creator.createImageryProvider( treeNode.name, "BaiduMap", { id: treeNode.id, level: treeNode.Level, enablePickFeatures: false, style: treeNode.style, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "cesiumblack": // cesiumIon黑夜地图 layer = sgworld.Creator.createImageryProvider( treeNode.name, "cesiumBlack", { id: treeNode.id, url: treeNode.urls, flipXY: true, enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "osm": // osm地图 layer = sgworld.Creator.createImageryProvider( treeNode.name, "OpenStreetMap", { id: treeNode.id, url: treeNode.urls, enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "wmts": // wmts影像 layer = sgworld.Creator.createWebMapTileServerImageLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, level: treeNode.Level, style: treeNode.style, layer: treeNode.layer, enablePickFeatures: false, format: treeNode.format, tileMatrixSetID: treeNode.srs, tilingScheme: treeNode.tileType === "Geo" ? new Cesium.GeographicTilingScheme() : new Cesium.WebMercatorTilingScheme(), show: true, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); return layer; break; case "gis_wmts": // gisserver wmst影像 layer = sgworld.Creator.createUrlTemplateImageryProvider( treeNode.name, { id: treeNode.id, url: Cesium.buildModuleUrl( treeNode.urls + "/{z}/{x}/{reverseY}.png" ), enablePickFeatures: false, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "wmts_zj": // 行列号差两倍的wmts var geotil = new Cesium.GeographicTilingScheme({ rectangle: Cesium.Rectangle.MAX_VALUE, }); if (treeNode.addLevel && treeNode.addLevel === 2) { geotil.positionToTileXY = function (position, level, result) { level > 0 && level++; var rectangle = this._rectangle; if (!Cesium.Rectangle.contains(rectangle, position)) { // outside the bounds of the tiling scheme return undefined; } var xTiles = this.getNumberOfXTilesAtLevel(level); var yTiles = this.getNumberOfYTilesAtLevel(level); var xTileWidth = rectangle.width / xTiles; var yTileHeight = rectangle.height / yTiles; var longitude = position.longitude; if (rectangle.east < rectangle.west) { longitude += Cesium.Math.TWO_PI; } var xTileCoordinate = ((longitude - rectangle.west) / xTileWidth) | 0; if (xTileCoordinate >= xTiles) { xTileCoordinate = xTiles - 1; } var yTileCoordinate = ((rectangle.north - position.latitude) / yTileHeight) | 0; if (yTileCoordinate >= yTiles) { yTileCoordinate = yTiles - 1; } if (!Cesium.defined(result)) { return new Cesium.Cartesian2(xTileCoordinate, yTileCoordinate); } result.x = xTileCoordinate; result.y = yTileCoordinate; return result; }; geotil.tileXYToRectangle = function (x, y, level, result) { level > 0 && level++; var rectangle = this._rectangle; var xTiles = this.getNumberOfXTilesAtLevel(level); var yTiles = this.getNumberOfYTilesAtLevel(level); var xTileWidth = rectangle.width / xTiles; var west = x * xTileWidth + rectangle.west; var east = (x + 1) * xTileWidth + rectangle.west; var yTileHeight = rectangle.height / yTiles; var north = rectangle.north - y * yTileHeight; var south = rectangle.north - (y + 1) * yTileHeight; if (!Cesium.defined(result)) { result = new Cesium.Rectangle(west, south, east, north); } result.west = west; result.south = south; result.east = east; result.north = north; return result; }; } layer = sgworld.Creator.createWebMapTileServerImageLayer( treeNode.name, { id: treeNode.id, url: treeNode.urls, layer: treeNode.layer, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, style: "default", tileMatrixSetID: "esritilematirx", format: "image/png", tilingScheme: geotil, addLevel: treeNode.addLevel || 1, //层级加一 enablePickFeatures: false, show: true, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); break; case "wms": case "wmsc": // wms数据 var parameters = { service: "WMS", format: "image/png", transparent: true, }; if (treeNode.removeNullValue) { if (treeNode.nullvalue) { treeNode.nullvalue = treeNode.nullvalue.replace("rgb(", ""); treeNode.nullvalue = treeNode.nullvalue.replace(")", ""); } parameters.nullvalue = sgworld.Core.defaultValue( treeNode.nullvalue, "0,0,0" ); parameters.nulltolerance = sgworld.Core.defaultValue( treeNode.nulltolerance, 0 ); } treeNode.token && (treeNode.urls += "?token=" + treeNode.token); if (treeNode.sourceType === "wmsc") { layer = sgworld.Creator.createCacheImageryProvider( treeNode.name, { id: treeNode.id, url: treeNode.urls || "", layers: treeNode.layer || "", level: treeNode.Level, enablePickFeatures: false, cacheUrl: treeNode.cacheUrl || treeNode.urls, fileExtension: treeNode.fileExtension, cacheMaxLevel: treeNode.cacheMaxLevel || 16, alpha: treeNode.alpha, }, "0", treeNode.zIndex, treeNode.checked, "" ); } else { layer = sgworld.Creator.createImageryProvider( treeNode.name, "wms", { id: treeNode.id, url: treeNode.urls, layers: treeNode.layer || "", level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, enablePickFeatures: false, parameters: parameters, alpha: treeNode.alpha, }, "0", treeNode.zIndex, true, "" ); } break; case "wmse": layer = sgworld.Creator.createImageryProvider( treeNode.name, "wms", { id: treeNode.id, url: treeNode.urls, level: treeNode.Level, minimumLevel: treeNode.minimumLevel, maximumLevel: treeNode.maximumLevel, enablePickFeatures: false, layers: treeNode.layer || "", alpha: treeNode.alpha, parameters: { format: "image/png", transparent: true, }, }, "0", undefined, true, "" ); break; case "wfs": // wfs数据 layer = sgwfs.CreateWfs(treeNode.class, treeNode); break; case "geojson": if (treeNode.class === "point") { treeNode.disableDepthTestDistance === "Infinity" && (treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY); de = { id: treeNode.id, fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), color: sgworld.Core.defaultValue(treeNode.imageColor, undefined), outlineColor: sgworld.Core.defaultValue( treeNode.outlineColor, "#ffffff" ), backgroundColor: sgworld.Core.defaultValue( treeNode.backgroundColor, "#ffffff" ), heightReference: sgworld.Core.defaultValue( treeNode.heightReference, 0 ), pointHeight: sgworld.Core.defaultValue( treeNode.pointHeight, undefined ), near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, 99999999999), bold: treeNode.bold, italic: treeNode.italic, showBackground: treeNode.showBackground, outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 1), text: treeNode.text, image: treeNode.image, font_size: treeNode.size, font_family: sgworld.Core.defaultValue( treeNode.font_family, "微软雅黑" ), disableDepthTestDistance: sgworld.Core.defaultValue( treeNode.disableDepthTestDistance, undefined ), labelData: treeNode.labelData, imageData: treeNode.imageData, }; if ( treeNode.text && treeNode.image && !treeNode.labelData && !treeNode.imageData ) { de.labelData = { horizontalOrigin: Cesium.HorizontalOrigin.LEFT, pixelOffset: new Cesium.Cartesian2(20, 0), }; de.imageData = { horizontalOrigin: Cesium.HorizontalOrigin.CENTER, pixelOffset: new Cesium.Cartesian2(0, 0), }; } layer = sgworld.Creator.createLabelPointGeoJsonFeatureLayer( treeNode.name, treeNode.urls, de, "0", treeNode.checked ); } else if (treeNode.class === "polyline") { de = { id: treeNode.id, layertype: "polylinelayer", material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), outlineColor: sgworld.Core.defaultValue( treeNode.outlineColor, "#ffffff" ), outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0), height: sgworld.Core.defaultValue(treeNode.height, undefined), width: sgworld.Core.defaultValue(treeNode.width, 2), clampToGround: sgworld.Core.defaultValue( treeNode.clampToGround, true ), classificationType: treeNode.classificationType, dash: sgworld.Core.defaultValue(treeNode.dash, false), dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20), gapColor: sgworld.Core.defaultValue( treeNode.gapColor, "rgba(0,0,0,0)" ), near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, Infinity), }; layer = sgworld.Creator.createPolylineGeoJsonFeatureLayer( treeNode.name, treeNode.urls, de, "0", treeNode.checked ); } else if (treeNode.class === "polylineVolume") { de = { id: treeNode.id, material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"), slttype: "0", number: "4", exradius: "1", inradius: "1", orth_width: "2", orth_height: "2", radius: sgworld.Core.defaultValue(treeNode.radius, 5), cornerType: "0", heightReference: "0", height: sgworld.Core.defaultValue(treeNode.lineHeight, 0), near: "0", far: "99999999999", radiusScale: treeNode.radiusScale, connect: true, }; layer = sgworld.Creator.createpolylineVolumeGeojsonPrimitiveLayer( treeNode.name, treeNode.urls, de, "0", true, function (data) { if (treeNode.flow) { let lines = data.entities.values; lines.forEach((line) => { line.polylineVolume.material = sgworld.Core.getTrailLinkMaterial( sgworld.Core.defaultValue(treeNode.color, "#ff0000"), "../static/images/smoke.png", 9000 ); }); } } ); } else if (treeNode.class === "model") { de = { id: treeNode.id, collect: 0, uri: sgworld.Core.defaultValue(treeNode.model, ""), file: "", color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), scale: sgworld.Core.defaultValue(treeNode.scale, 1), heightReference: 0, height: sgworld.Core.defaultValue(treeNode.height, 0), near: "0", far: "99999999999", }; layer = sgworld.Creator.createModelPointGeoJsonFeatureLayer( treeNode.name, treeNode.urls, de, "0", true ); } else if (treeNode.class === "polygon") { treeNode.disableDepthTestDistance === "Infinity" && (treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY); de = { id: treeNode.id, material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"), height: sgworld.Core.defaultValue(treeNode.height, 0), outlineColor: sgworld.Core.defaultValue( treeNode.outlineColor, "#ff0000" ), extrudedHeight: sgworld.Core.defaultValue( treeNode.extrudedHeight, 0 ), outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0), outline: sgworld.Core.defaultValue(treeNode.outline, true), clampToGround: sgworld.Core.defaultValue( treeNode.clampToGround, treeNode.extrudedHeight === undefined && treeNode.height === undefined ), classificationType: treeNode.classificationType, near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, Infinity), text: treeNode.text, font: sgworld.Core.defaultValue(treeNode.font, "微软雅黑"), labelNear: treeNode.labelNear, labelFar: treeNode.labelFar, fontSize: sgworld.Core.defaultValue(treeNode.size, "18px"), italic: treeNode.italic, bold: treeNode.bold, pixelOffset: new Cesium.Cartesian2( sgworld.Core.defaultValue(treeNode.offsetX, 0), sgworld.Core.defaultValue(treeNode.offsetY, 0) ), labelOutlineWidth: 2, disableDepthTestDistance: treeNode.disableDepthTestDistance, water: treeNode.water, }; layer = sgworld.Creator.createPolygonGeoJsonFeatureLayer( treeNode.name, treeNode.urls, de, "0", treeNode.checked ); } break; case "pathLayer": layer = sgworld.Creator.createPathLayer({ id: treeNode.id, url: treeNode.url, color: treeNode.color || "#0033FF", //线的颜色 width: treeNode.width || 4.0, //线的宽度 pointColor: treeNode.pointColor || "#FFFFFF", //移动点的颜色 speed: treeNode.speed || 5, far: treeNode.far || 5000, }); break; case "vector": { let urls = { url: treeNode.urls, layer: treeNode.layer, srs: treeNode.srs, }; if ( treeNode.class === "point" || treeNode.class === "label" || treeNode.class === "image" ) { treeNode.disableDepthTestDistance === "Infinity" && (treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY); if (treeNode.style) { // de = getVectorStyleFromSG(treeNode, treeNode.style); } else { de = { id: treeNode.id, level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10), level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22), fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), color: sgworld.Core.defaultValue( treeNode.imageColor, undefined ), outlineColor: sgworld.Core.defaultValue( treeNode.outlineColor, "#ffffff" ), backgroundColor: sgworld.Core.defaultValue( treeNode.backgroundColor, "#ffffff" ), heightReference: sgworld.Core.defaultValue( treeNode.heightReference, 0 ), pointHeight: sgworld.Core.defaultValue( treeNode.pointHeight, undefined ), near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, 99999999999), bold: treeNode.bold, italic: treeNode.italic, showBackground: treeNode.showBackground, outlineWidth: sgworld.Core.defaultValue( treeNode.outlineWidth, 1 ), text: treeNode.text, image: treeNode.image, font_size: treeNode.size, font_family: sgworld.Core.defaultValue( treeNode.font_family, "微软雅黑" ), disableDepthTestDistance: sgworld.Core.defaultValue( treeNode.disableDepthTestDistance, undefined ), labelData: treeNode.labelData, imageData: treeNode.imageData, }; } if ( treeNode.text && treeNode.image && !treeNode.labelData && !treeNode.imageData ) { de.labelData = { horizontalOrigin: Cesium.HorizontalOrigin.LEFT, pixelOffset: new Cesium.Cartesian2(20, 0), }; de.imageData = { horizontalOrigin: Cesium.HorizontalOrigin.CENTER, pixelOffset: new Cesium.Cartesian2(0, 0), }; } urls.upperLevelLimit = de.level_max; urls.lowerLevelLimit = de.level_min; layer = sgworld.Creator.createLabelImageGeoJsonFeatureLayerProvider( treeNode.name, urls, de, "0", treeNode.checked, function () { } ); } else if (treeNode.class === "polylineVolume") { de = { id: treeNode.id, level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10), level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22), material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"), slttype: "0", number: "4", exradius: "1", inradius: "1", orth_width: "2", orth_height: "2", radius: sgworld.Core.defaultValue(treeNode.radius, 0.5), cornerType: "0", heightReference: "0", height: sgworld.Core.defaultValue(treeNode.height, 0), near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, 99999999999), radiusScale: treeNode.radiusScale, }; urls.upperLevelLimit = de.level_max; urls.lowerLevelLimit = de.level_min; layer = sgworld.Creator.createVolumeGeoJsonFeatureLayerProvider( treeNode.name, urls, de, "0", treeNode.checked, function () { } ); } else if (treeNode.class === "polyline") { de = { id: treeNode.id, layertype: "polylinelayer", level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10), level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22), material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), outlineColor: sgworld.Core.defaultValue( treeNode.outlineColor, "#ffffff" ), outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0), height: sgworld.Core.defaultValue(treeNode.height, undefined), width: sgworld.Core.defaultValue(treeNode.width, 2), clampToGround: sgworld.Core.defaultValue( treeNode.clampToGround, true ), classificationType: treeNode.classificationType, dash: sgworld.Core.defaultValue(treeNode.dash, false), dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20), gapColor: sgworld.Core.defaultValue( treeNode.gapColor, "rgba(0,0,0,0)" ), near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, Infinity), }; urls.upperLevelLimit = de.level_max; urls.lowerLevelLimit = de.level_min; layer = sgworld.Creator.createPrimitivePolylineVectorGeoJsonFeatureLayerProvider( treeNode.name, urls, de, "0", treeNode.checked, function () { } ); } else if (treeNode.class === "polygon") { de = { id: treeNode.id, layertype: "polygonlayer", level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10), level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22), material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"), heightReference: "1", height: sgworld.Core.defaultValue(treeNode.height, 0), extrudedHeight: sgworld.Core.defaultValue( treeNode.extrudedHeight, 0 ), extrudedHeightReference: "1", clampToGround: sgworld.Core.defaultValue( treeNode.clampToGround, false ), classificationType: treeNode.classificationType, near: sgworld.Core.defaultValue(treeNode.near, 0), far: sgworld.Core.defaultValue(treeNode.far, Infinity), }; urls.upperLevelLimit = de.level_max; urls.lowerLevelLimit = de.level_min; layer = sgworld.Creator.createGeoJsonFeatureLayerProviderOptimization( treeNode.name, urls, de, "0", treeNode.checked, function () { } ); } else if (treeNode.class === "model") { de = { id: treeNode.id, level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10), level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22), collect: 0, uri: sgworld.Core.defaultValue(treeNode.model, ""), file: "", color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"), scale: sgworld.Core.defaultValue(treeNode.scale, 1), heightReference: 0, height: sgworld.Core.defaultValue(treeNode.height, 0), near: "0", far: "99999999999", }; //模型点 urls.upperLevelLimit = de.level_max; urls.lowerLevelLimit = de.level_min; layer = sgworld.Creator.createModelGeoJsonFeatureLayerProvider( treeNode.name, urls, de, "0", treeNode.checked, function () { } ); } layer && (treeNode.id = layer.treeobj.id); break; } case "terrain": layer = sgworld.Creator.createTerrain( treeNode.name, { id: treeNode.id, requestVertexNormals: true, url: treeNode.urls, }, "0", true, "" ); break; case "sgsterrain": layer = sgworld.Creator.sfsterrainprovider( treeNode.name, { id: treeNode.id, layerName: treeNode.layer, requestVertexNormals: true, url: treeNode.urls || "", token: treeNode.token, cacheUrl: treeNode.cacheUrl, cacheLevel: treeNode.cacheLevel, }, "0", true, "" ); break; case "sgsterrain7.1": layer = sgworld.Creator.sfsterrainprovider71( treeNode.name, { id: treeNode.id, layerName: treeNode.layer, requestVertexNormals: true, url: treeNode.urls, token: treeNode.token, cacheUrl: treeNode.cacheUrl, cacheLevel: treeNode.cacheLevel, }, "0", true, "" ); break; case "arcgisterrain": layer = sgworld.Creator.createArcGISTerrain( treeNode.name, { id: treeNode.id, requestVertexNormals: true, url: treeNode.urls, }, "0", true, "" ); break; case "CesiumGlobeTerrain": layer = sgworld.Creator.createCesiumTerrain( treeNode.name, { id: treeNode.id, requestVertexNormals: true, }, "0", true, "" ); break; case "b3dm": layer = sgworld.Creator.create3DTilesets( treeNode.name, treeNode.urls, { id: treeNode.id, Level: treeNode.Level, maximumScreenSpaceError: treeNode.maximumScreenSpaceError && parseInt(treeNode.maximumScreenSpaceError), maximumMemoryUsage: treeNode.maximumMemoryUsage && parseInt(treeNode.maximumMemoryUsage), geometricError: treeNode.geometricError && parseInt(treeNode.geometricError), }, { groundCenter: treeNode.Center, groundheight: treeNode.modelHeight, heading: treeNode.heading, pitch: treeNode.pitch, roll: treeNode.roll, effects: treeNode.effects || false, effectsMaxHeight: treeNode.effectsMaxHeight || 150, colors: treeNode.alpha ? "rgba(255,255,255," + treeNode.alpha + ")" : treeNode.color || undefined, }, "0", true ); return layer; break; case "s3m": layer = sgworld.Creator.createS3MLayer( treeNode.urls, sgworld._Viewer.scene, function () { } ); break; case "gltf": var position = [treeNode.lon, treeNode.lat, treeNode.height]; layer = sgworld.Creator.createModel( position, treeNode.urls, { id: treeNode.id, scale: treeNode.scale || 1, heading: treeNode.heading, pitch: treeNode.pitch, roll: treeNode.roll, }, "0", treeNode.name, "" ); break; case "SimpleGraphic": treeNode.type = treeNode.class; layer = sgworld.Creator.SimpleGraphic.addFeature(treeNode); break; case "videoPolygon": layer = sgworld.Creator.addVideoPolygon(treeNode.positions, { url: treeNode.url, angle: treeNode.angle, }); break; case "MilitaryPlotting": if (!treeNode.feature.id) { treeNode.feature.id = treeNode.id; } if (!treeNode.feature.name) { treeNode.feature.name = treeNode.name; } layer = sgworld.Creator.MilitaryPlotting.addFeature(treeNode.feature); break; case "ParticleEffect": layer = sgworld.Analysis.createParticleEffect( treeNode.name, treeNode.position, { translation: Cesium.Cartesian3.fromElements(0, 0, 0), //平移 } ); layer.name = treeNode.name; break; case "FlowField": layer = sgworld.Creator.createTrailLine( treeNode.positions, treeNode.style ); layer.boundingSphere = Cesium.BoundingSphere.fromPoints( treeNode.positions ); break; case "MobileWall": layer = sgworld.Creator.createTrailLineWall( treeNode.LineInterpolation.positions, treeNode.style ); layer.boundingSphere = Cesium.BoundingSphere.fromPoints( treeNode.LineInterpolation.positions ); break; case "link": layer = sgworld.Creator.createLinkPro( sgworld.Core.toDegrees(treeNode.posisitons[0]), sgworld.Core.toDegrees(treeNode.posisitons[1]), { clampToGround: true, } ); break; case "DiffusionSource": layer = sgworld.Analysis.createMultiCircleScan( treeNode.position, treeNode.maxRadius, treeNode.maxRadius.color, 3000, true ); break; case "RiskDiffusion": case "CircularDiffusion": layer = sgworld.Analysis.createCircleScan( treeNode.position, treeNode.maxRadius, treeNode.color, 3000, true ); break; case "FanDiffusion": layer = sgworld.Analysis.createSectorScan( treeNode.position, treeNode.distance, "#ff0000", 60, treeNode.angle, true, 4000, true ); break; case "RadarMask": layer = sgworld.Creator.createRectangularSensor( treeNode.position, treeNode.cylinder ); break; case "DynamicSatellite": let dtwxzsData = sgworld.Creator.createConeRadar(treeNode.position, { color: "#7b9ef7", radius: 200000, }); let weixin = sgworld.Creator.createModel( treeNode.position, window.SmartEarthRootUrl + "Workers/Model/weixin.gltf", { scale: 15 }, "0", "卫星" ); layer = { dtwxzsData, weixin }; layer.sourceType = "DynamicSatellite"; break; case "excavate": var position = [treeNode.lon, treeNode.lat, treeNode.height]; layer = sgworld.Creator.createModel( position, treeNode.urls, { id: treeNode.id, scale: treeNode.scale || 1, }, pID, treeNode.name, "" ); treeNode.id = layer.treeobj.id; break; } return layer } export function clearLayerByTypeId(type) { if (_GLOBAL.layers[type]) { _GLOBAL.layers[type].forEach(item => { item && item.deleteObject() }); _GLOBAL.layers[type] = []; } } export function clearLayerByTypeIdArr(arr) { if (arr.length) { arr.forEach(item => { clearLayerByTypeId(item); }) } } //openlayer 创建点位 export function createPointMarker(position, obj) { let startFeature = new ol.Feature({ geometry: new ol.geom.Point(position), }); startFeature.setProperties({ desc: obj, }); let MarkerLayer = new ol.layer.Vector({ id: 'LocationPoint', name: '标记点', source: new ol.source.Vector({ features: [startFeature], }), style: new ol.style.Style({ image: new ol.style.Icon({ src: require('@/assets/img/collection/scdw.png'), anchorOrigin: "top-left", anchorXUnits: "fraction", anchorYUnits: "fraction", offsetOrigin: "bottom-right", scale: 0.6, opacity: 1, }) }), zIndex: 1099, }) return MarkerLayer; } //openlayer 地图点击事件 export function setClick(state) { console.log('setClick'); let ponitPanel = document.getElementById('ponitPanel'); let overlay = new ol.Overlay({ element: ponitPanel, autoPan: { animation: { duration: 250, }, }, }); window.map.addOverlay(overlay); function handleClick(e) { console.log(e.coordinate); // 土地管理 if (store.tdglInfo.flag) { axios .get( // "http://10.10.4.115:8022/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" + window.gisBaseUrl + "yzxncsApi/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" + e.coordinate[0] + "&lat=" + e.coordinate[1] + "&geom=true&requesttype=json" ).then(response => { let center = { lon: 0, lat: 0 }; if (window.tdglLine) { window.map.removeLayer(window.tdglLine); window.tdglLine = null; } var format = new ol.format.WKT(); // 创建一个 WKT 解析器 var feature = format.readFeature(response.data.geometry); // 解析 WKT 并生成要素对象 // 创建一个要素图层 window.tdglLine = new ol.layer.Vector({ source: new ol.source.Vector({ features: [feature] // 将要素对象加入到图层源中 }) }); window.map.addLayer(window.tdglLine) axios .get( // "http://10.10.4.115:8022//poisearch/guihuacon/getInfo?ydbm=" + window.gisBaseUrl + "yzxncsApi/poisearch/guihuacon/getInfo?ydbm=" + response.data.NO ) .then( info => { let data = info.data.data; if (data.yongdishuju === null) { objdata = { POITYPE: "NOTDGL", zwxx: "暂无信息", lon: window.clickPOI.lon, lat: window.clickPOI.lat, } } else { qiyexinxi = info.data.data.qiyexinxi; qysl = data.qiyexinxi.length; if (qysl > 0) { ydbm = data.qiyexinxi[0]["地块编号"]; } else { ydbm = data.churangxinxi["ydbh"]; } try { ydlx = data.yongdishuju["ydlxmc"]; } catch (e) { } try { cyfx = data.yongdishuju["cyfx"]; } catch (e) { } try { // this.crzt = response.data["ZT"]; switch (response.data["ZT"]) { case 3: crzt = "已出让"; break; case 4: crzt = "未出让"; break; } } catch (e) { } try { ydmj = parseFloat( "" + data.yongdishuju["ydmj"] ).toFixed(0); } catch (e) { } try { crnx = data.churangxinxi["crnx"]; } catch (e) { } try { crnf = data.churangxinxi["crnf"]; } catch (e) { } try { rjl = data.yongdishuju["rjl"]; } catch (e) { } try { jzxg = data.yongdishuju["jzxg"]; } catch (e) { } try { jzmd = data.yongdishuju["jzmd"]; } catch (e) { } objdata = { POITYPE: "TDGL", ydbm, ydlx, cyfx, crzt, ydmj, ydbm, crnx, crnf, rjl, jzxg, jzmd, lon:e.coordinate[0], lat: e.coordinate[1], } } store.setTdglShow(false); store.setTdlgInfo({}); store.setTdglShow(true); store.setTdlgInfo(objdata); } ); }) return; } window.map.forEachFeatureAtPixel(e.pixel, function (feature) { if (feature && feature.values_.desc) { ponitPanel.style.display = 'block' let obj = feature.values_.desc objdata = { POITYPE: "POINT", name: obj.name, address: obj.address, lon: obj.lng, lat: obj.lat } overlay.setPosition(e.coordinate); store.setPoplayerShowAction(true); store.setPoplayerListAction(objdata); // if (window.instance) { // window.instance.$destroy(); // } // window.instance = new PoiLayerConstructor({ // data: { // list: objdata // } // }); // window.instance.$mount(); } }); } if (state) { clickEvent = window.map.on('click', handleClick); } else { ol.Observable.unByKey(clickEvent) clickEvent = null } } export function flyToPoint(posisitons) { window.map.getView().animate({ center: posisitons, zoom: 15, duration: 1500 }) }