From 28de79b44655118b1deffb5c9a8b06ec2904905b Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期四, 13 六月 2024 17:38:24 +0800 Subject: [PATCH] 功能添加 --- src/assets/js/map/layerManage.js | 632 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 344 insertions(+), 288 deletions(-) diff --git a/src/assets/js/map/layerManage.js b/src/assets/js/map/layerManage.js index e95b220..844c8d7 100644 --- a/src/assets/js/map/layerManage.js +++ b/src/assets/js/map/layerManage.js @@ -1,288 +1,344 @@ -const layerManage = { - layerManage: [], - setAddLayer(res) { - switch (res.sourceType) { - // arcgis 褰卞儚鍥� - case "arcgis": - this.addArcGisLayer(res); - break; - //楂樺痉鍦板浘 - case "gdmap": - this.addGaoLayer(res); - break; - //鐭㈤噺鍥� - case "SimpleGraphic": - this.addSimpleGraphicLayer(res); - break; - // 娴佸厜绾� - case "FlowField": - this.addFlowFieldLayer(res); - break; - // gltf妯″瀷 - case "gltf": - this.addGltfLayer(res); - break; - //澶╁湴鍥� - case "tdmap": - this.addTdMapLayer(res); - break; - // 鑵捐鍦板浘 - case "txmap": - this.addTxMapLayer(res); - break; - } - }, - addSimpleGraphicLayer(res) { - switch (res.style.type) { - case "label": - this.addLabelSimpleGraphic(res); - break; - case "billboard": - this.addBillboardSimpleGraphic(res); - break; - case "polyline": - this.addPolylineSimpleGraphic(res); - break; - } - }, - setRemoveLayer(res) { - for (var i = 0; i < this.layerManage.length; i++) { - var obj = this.layerManage[i]; - if (obj.id === res.id) { - switch (obj.type) { - case "label": - case "billboard": - case "polyline": - case "txmap": - case "tdmap": - case "arcgis": - case "gdmap": - obj.layer.removeFromMap(); - break; - case "FlowField": - obj.layer.deleteObject(); - break; - case "gltf": - earthCtrl.factory.removeModel(obj.layer); - break; - } - this.layerManage.splice(i, 1); - i--; - } - } - }, - addTdMapLayer(res) { - var layer = earthCtrl.factory.createImageryLayer({ - sourceType: "mapworld", - url: res.urls, - layers: "tdtBasicLayer", - style: "default", - format: "image/jpeg", - maximumLevel: res.maximumLevel, - layer: "", - tileMatrixSetID: "", - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "tdmap", - }); - }, - addTxMapLayer(res) { - var layer = earthCtrl.factory.createImageryLayer({ - sourceType: "qqmap", - url: "https://p2.map.gtimg.com/sateTiles/{z}/{sx}/{sy}/{x}_{reverseY}.jpg?version=229", - customTags: { - sx: function (imageryProvider, x, y, level) { - return x >> 4; - }, - sy: function (imageryProvider, x, y, level) { - return ((1 << level) - y) >> 4; - }, - }, - tilingScheme: earthCtrl.core.getOffsetTilingScheme(), // 鍋忕Щ绾犳 - }); - - this.layerManage.push({ - id: res.id, - layer: layer, - type: "txmap", - }); - }, - addGltfLayer(res) { - var layer = earthCtrl.factory.createModel({ - name: res.name, - url: res.urls, - lon: res.lon, - lat: res.lat, - alt: res.height, - heading: res.heading, - scale: res.scale, - minimumPixelSize: 100, - id: { - name: "gltf", - }, - }); - - this.layerManage.push({ - id: res.id, - layer: layer, - type: "gltf", - }); - }, - addPolylineSimpleGraphic(res) { - var style = res.style; - var std = []; - for (var i in style.positions) { - var position = this.getCartographic(style.positions[i]); - std.push(position.lon, position.lat, position.alt); - } - const positions = SmartEarth.Cesium.Cartesian3.fromDegreesArrayHeights(std); - - const layer = earthCtrl.factory.createPolyline({ - name: style.name, - lineColor: new SmartEarth.Cesium.PolylineGlowMaterialProperty({ - //鎶樼嚎鍙戝厜鏉愯川 - color: SmartEarth.Cesium.Color.fromCssColorString(style.color), //棰滆壊 - }), - lineWidth: style.width, - isDepthTest: false, - clampToGround: false, - positions: positions, - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "polyline", - }); - }, - - addArcGisLayer(res) { - var layer = earthCtrl.factory.createImageryLayer({ - sourceType: "arcgis", - url: res.urls, - enablePickFeatures: false, - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "arcgis", - }); - }, - addFlowFieldLayer(res) { - var style = res.style; - var std = []; - for (var i in res.positions) { - var position = this.getCartographic(res.positions[i]); - std.push([position.lon, position.lat]); - } - var obj = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - geometry: { - type: "LineString", - coordinates: std, - }, - properties: { - osm_id: "66023824", - code: 5115, - fclass: "tertiary", - name: "", - ref: "", - oneway: "B", - maxspeed: 0, - layer: 0, - bridge: "F", - tunnel: "F", - }, - }, - ], - }; - - let layer = earthCtrl.factory.createPathLayer({ - url: obj, - color: "#0033FF", //绾跨殑棰滆壊 - width: style.width, //绾跨殑瀹藉害 - pointColor: "#FFFFFF", //绉诲姩鐐圭殑棰滆壊 - speed: 0.5, - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "FlowField", - }); - }, - - addGaoLayer(res) { - var layer = earthCtrl.factory.createImageryLayer({ - sourceType: "gdmap", - url: res.urls, - minimumLevel: 3, - maximumLevel: 18, - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "gdmap", - }); - }, - - addBillboardSimpleGraphic(res) { - var style = res.style; - var position = this.getCartographic(style.position); - const layer = earthCtrl.factory.createBillboard({ - name: "billboard", - id: style.id, - image: style.image, - width: style.width, - height: style.height, - lon: position.lon, - lat: position.lat, - alt: position.alt, - scale: style.scale, - distanceDisplayCondition: style.distanceDisplayCondition, - }); - this.layerManage.push({ - id: res.id, - layer: layer, - type: "billboard", - }); - }, - getCartographic(res) { - var cartographic = Cesium.Cartographic.fromCartesian(res); - return { - lon: Cesium.Math.toDegrees(cartographic.longitude), - lat: Cesium.Math.toDegrees(cartographic.latitude), - alt: cartographic.height, - }; - }, - addLabelSimpleGraphic(res) { - var style = res.style; - var position = this.getCartographic(style.position); - var layer = earthCtrl.factory.createLabel({ - name: style.name, - id: style.id, - text: style.text, - font: style.font, - outlineWidth: 2, - fillColor: Cesium.Color.fromCssColorString(style.fillColor), - lon: position.lon, - lat: position.lat, - alt: position.alt, - showBackground: true, - backgroundColor: Cesium.Color.fromCssColorString(style.backgroundColor), - scale: style.scale, - distanceDisplayCondition: style.distanceDisplayCondition, - clampToGround: true, - }); - - this.layerManage.push({ - id: res.id, - layer: layer, - type: "label", - }); - }, -}; -export default layerManage; +const layerManage = { + layerManage: [], + setAddLayer(res) { + switch (res.sourceType) { + // arcgis 褰卞儚鍥� + case "arcgis": + this.addArcGisLayer(res); + break; + //楂樺痉鍦板浘 + case "gdmap": + this.addGaoLayer(res); + break; + //鐭㈤噺鍥� + case "SimpleGraphic": + this.addSimpleGraphicLayer(res); + break; + // 娴佸厜绾� + case "FlowField": + this.addFlowFieldLayer(res); + break; + // gltf妯″瀷 + case "gltf": + this.addGltfLayer(res); + break; + // gltf妯″瀷 + case "3DTiles": + this.add3DTilesLayer(res); + break; + //澶╁湴鍥� + case "tdmap": + this.addTdMapLayer(res); + break; + // 鑵捐鍦板浘 + case "txmap": + this.addTxMapLayer(res); + break; + // 鑵捐鍦板浘 + case "WMS": + this.addWMSLayer(res); + break; + // 鑵捐鍦板浘 + case "TMS": + this.addTMSLayer(res); + break; + } + }, + addSimpleGraphicLayer(res) { + switch (res.style.type) { + case "label": + this.addLabelSimpleGraphic(res); + break; + case "billboard": + this.addBillboardSimpleGraphic(res); + break; + case "polyline": + this.addPolylineSimpleGraphic(res); + break; + } + }, + setRemoveLayer(res) { + for (var i = 0; i < this.layerManage.length; i++) { + var obj = this.layerManage[i]; + if (obj.id === res.id) { + switch (obj.type) { + case "WMS": + case "TMS": + case "label": + case "billboard": + case "polyline": + case "txmap": + case "tdmap": + case "arcgis": + case "gdmap": + obj.layer.removeFromMap(); + break; + case "FlowField": + obj.layer.deleteObject(); + break; + case "gltf": + earthCtrl.factory.removeModel(obj.layer); + break; + case "3DTiles": + obj.layer.deleteObject(); + break; + } + this.layerManage.splice(i, 1); + i--; + } + } + }, + addTMSLayer(res) { + const layer = earthCtrl.factory.createImageryLayer({ + sourceType: "tms", + url: res.url + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "TMS" + }); + }, + addWMSLayer(res) { + const layer = earthCtrl.factory.createImageryLayer({ + sourceType: "wms", + url: res.url, + layers: "", + parameters: { + format: "image/png", + srs: "EPSG:4326", + version: 1.3 + } + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "WMS" + }); + }, + addTdMapLayer(res) { + var layer = earthCtrl.factory.createImageryLayer({ + sourceType: "mapworld", + url: res.urls, + layers: "tdtBasicLayer", + style: "default", + format: "image/jpeg", + maximumLevel: res.maximumLevel, + layer: "", + tileMatrixSetID: "" + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "tdmap" + }); + }, + addTxMapLayer(res) { + var layer = earthCtrl.factory.createImageryLayer({ + sourceType: "qqmap", + url: "https://p2.map.gtimg.com/sateTiles/{z}/{sx}/{sy}/{x}_{reverseY}.jpg?version=229", + customTags: { + sx: function (imageryProvider, x, y, level) { + return x >> 4; + }, + sy: function (imageryProvider, x, y, level) { + return ((1 << level) - y) >> 4; + } + }, + tilingScheme: earthCtrl.core.getOffsetTilingScheme() // 鍋忕Щ绾犳 + }); + + this.layerManage.push({ + id: res.id, + layer: layer, + type: "txmap" + }); + }, + add3DTilesLayer(res) { + const layer = earthCtrl.factory.create3DTilesets({ + url: res.url + }); + earthCtrl.camera.flyToObj(layer); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "3DTiles" + }); + }, + addGltfLayer(res) { + var layer = earthCtrl.factory.createModel({ + name: res.name, + url: res.urls, + lon: res.lon, + lat: res.lat, + alt: res.height, + heading: res.heading, + scale: res.scale, + minimumPixelSize: 100, + id: { + name: "gltf" + } + }); + + this.layerManage.push({ + id: res.id, + layer: layer, + type: "gltf" + }); + }, + addPolylineSimpleGraphic(res) { + var style = res.style; + var std = []; + for (var i in style.positions) { + var position = this.getCartographic(style.positions[i]); + std.push(position.lon, position.lat, position.alt); + } + const positions = SmartEarth.Cesium.Cartesian3.fromDegreesArrayHeights(std); + + const layer = earthCtrl.factory.createPolyline({ + name: style.name, + lineColor: new SmartEarth.Cesium.PolylineGlowMaterialProperty({ + //鎶樼嚎鍙戝厜鏉愯川 + color: SmartEarth.Cesium.Color.fromCssColorString(style.color) //棰滆壊 + }), + lineWidth: style.width, + isDepthTest: false, + clampToGround: false, + positions: positions + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "polyline" + }); + }, + + addArcGisLayer(res) { + var layer = earthCtrl.factory.createImageryLayer({ + sourceType: "arcgis", + url: res.urls, + enablePickFeatures: false + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "arcgis" + }); + }, + addFlowFieldLayer(res) { + var style = res.style; + var std = []; + for (var i in res.positions) { + var position = this.getCartographic(res.positions[i]); + std.push([position.lon, position.lat]); + } + var obj = { + type: "FeatureCollection", + features: [ + { + type: "Feature", + geometry: { + type: "LineString", + coordinates: std + }, + properties: { + osm_id: "66023824", + code: 5115, + fclass: "tertiary", + name: "", + ref: "", + oneway: "B", + maxspeed: 0, + layer: 0, + bridge: "F", + tunnel: "F" + } + } + ] + }; + + let layer = earthCtrl.factory.createPathLayer({ + url: obj, + color: "#0033FF", //绾跨殑棰滆壊 + width: style.width, //绾跨殑瀹藉害 + pointColor: "#FFFFFF", //绉诲姩鐐圭殑棰滆壊 + speed: 0.5 + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "FlowField" + }); + }, + + addGaoLayer(res) { + var layer = earthCtrl.factory.createImageryLayer({ + sourceType: "gdmap", + url: res.urls, + minimumLevel: 3, + maximumLevel: 18 + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "gdmap" + }); + }, + + addBillboardSimpleGraphic(res) { + var style = res.style; + var position = this.getCartographic(style.position); + const layer = earthCtrl.factory.createBillboard({ + name: "billboard", + id: style.id, + image: style.image, + width: style.width, + height: style.height, + lon: position.lon, + lat: position.lat, + alt: position.alt, + scale: style.scale, + distanceDisplayCondition: style.distanceDisplayCondition + }); + this.layerManage.push({ + id: res.id, + layer: layer, + type: "billboard" + }); + }, + getCartographic(res) { + var cartographic = Cesium.Cartographic.fromCartesian(res); + return { + lon: Cesium.Math.toDegrees(cartographic.longitude), + lat: Cesium.Math.toDegrees(cartographic.latitude), + alt: cartographic.height + }; + }, + addLabelSimpleGraphic(res) { + var style = res.style; + var position = this.getCartographic(style.position); + var layer = earthCtrl.factory.createLabel({ + name: style.name, + id: style.id, + text: style.text, + font: style.font, + outlineWidth: 2, + fillColor: Cesium.Color.fromCssColorString(style.fillColor), + lon: position.lon, + lat: position.lat, + alt: position.alt, + showBackground: true, + backgroundColor: Cesium.Color.fromCssColorString(style.backgroundColor), + scale: style.scale, + distanceDisplayCondition: style.distanceDisplayCondition, + clampToGround: true + }); + + this.layerManage.push({ + id: res.id, + layer: layer, + type: "label" + }); + } +}; +export default layerManage; -- Gitblit v1.9.3