From fde8e3bedaf5f883f38c3a0ec33d3c6a8748d1c9 Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期五, 21 六月 2024 18:02:44 +0800 Subject: [PATCH] wfs 范围查询 --- src/assets/js/map/mapView.js | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 160 insertions(+), 7 deletions(-) diff --git a/src/assets/js/map/mapView.js b/src/assets/js/map/mapView.js index a73a0d2..cb1b052 100644 --- a/src/assets/js/map/mapView.js +++ b/src/assets/js/map/mapView.js @@ -1,6 +1,12 @@ +import axios from "axios"; +import mapConfig from "./mapConfig"; import mapServer from "./mapServer"; +import modelLayer from "./modelLayer"; +import wfsConfig from "./wfsConfig"; +import mapInfo from "./mapInfo"; const mapViewer = { + configTooles: null, initMap() { window.earthCtrl = new SmartEarth.EarthCtrl("sdkContainer", { // 闅愯棌榛樿搴曞浘 @@ -14,18 +20,165 @@ Viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString("#A9A9A9"); //璁剧疆鍦扮悆棰滆壊 // 娓呯┖榛樿搴曞浘 Viewer.imageryLayers.removeAll(); - + mapServer.addServer({ sourceType: "arcgis", url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer" }); - - - // mapServer.addServer({ - // sourceType: "geoserver", - // url: "https://cim.smartearth.cn/geoserver/PolygonFeature/ows", - // layer: "PolygonFeature:GeoEntity" + // earthCtrl.factory.createTerrainLayer({ + // sourceType: "ctb", + // url: "https://tiles1.geovisearth.com/base/v1/terrain?token=486dac3bec56d7d7c2a581c150be2bd937462f1e8f3bc9c78b5658b396122405" // }); + + mapServer.addServer({ + sourceType: "tms", + url: "http://192.168.11.41:9001/gisserver/tmsserver/SubicBayArea" + }); + mapInfo.setEntityQueryInput(); + + const url = + "http://103.135.160.14:9038/gisserver/wfsserver/SubicBayAreaVector_wfs?version=1.1.0&request=GetFeature&format=json&typename=GeoEntity"; + const areaBox = + "120.28915940000012 14.809144082000034 120.28915940000012 14.837205054000039 120.31165600000003 14.837205054000039 120.31165600000003 14.809144082000034 120.28915940000012 14.809144082000034"; + + Cesium.GeoJsonDataSource.load(url, { + stroke: Cesium.Color.fromCssColorString("#FFF0F5"), //澶氳竟褰㈡垨绾跨殑棰滆壊 + fill: Cesium.Color.fromCssColorString("#FFF0F5"), //澶氳竟褰㈡垨绾跨殑棰滆壊 + strokeWidth: 1, //澶氳竟褰㈡垨绾� 瀹藉害 + clampToGround: true //澶氳竟褰㈡垨绾� 鍥哄畾鍦ㄥ湴闈笂true/false + }).then((dataSource) => { + const entities = dataSource.entities.values; + entities.map((item) => { + item.polygon.heightReference = + Cesium.HeightReference.RELATIVE_TO_GROUND; // 璐村湴 + item.polygon.height = 0; // 璺濆湴楂樺害0绫� + item.polygon.extrudedHeightReference = + Cesium.HeightReference.RELATIVE_TO_GROUND; //鎷変几 + item.polygon.extrudedHeight = item.properties["ELEVATION"]; // 鎷変几楂樺害 + + var polyPositions = item.polygon.hierarchy.getValue().positions; + var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //涓績鐐� + polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter); + item.position = polyCenter; + + item.label = { + //鏂囧瓧鏍囩 + text: "", + font: "500 20px Helvetica", // 15pt monospace + scale: 1, + style: Cesium.LabelStyle.FILL, + fillColor: Cesium.Color.WHITE, + + eyeOffset: new Cesium.Cartesian3( + 0.0, + item.polygon.extrudedHeight + 1, + -(item.polygon.extrudedHeight + 1) + ), + + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + showBackground: true, + distanceDisplayCondition: new Cesium.DistanceDisplayCondition(50.0, 500.0), + // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, + // disableDepthTestDistance: Number.POSITIVE_INFINITY, + backgroundColor: new Cesium.Color(26 / 255, 196 / 255, 228 / 255, 1.0) //鑳屾櫙椤旇壊 + }; + }); + Viewer.dataSources.add(dataSource); + this.setQueryProperty(dataSource, "鍐涗簨鐩爣"); + this.getQuery(url, areaBox, dataSource); + }); + }, + setQueryProperty(layer, property) { + const entity = layer.entities.values; + entity.filter((rs) => { + if (rs.properties["TargetType"]._value == property) { + rs.polygon.material = Cesium.Color.RED; + // 鏄剧ず鏂囧瓧鏍囩 + rs.label.text = rs.properties["TYPE"]; + } + }); + }, + getQuery(url, area, layer) { + axios + .get(url, { + params: { + version: "1.3.0", + request: "GetFeature", + typename: "GeoEntity", + propertyname: "*", + format: "json", + filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Intersects><ogc:PropertyName /><gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>${area}</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogc:Intersects></ogc:Filter>` + } + }) + .then((res) => { + const obj = res.data.features; + + // const dataSource = Viewer.dataSources._dataSources.filter((item) => { + // if (item.name == layer) { + // return item; + // } + // }); + const entity = layer.entities.values; + // const entity = dataSource[0].entities.values; + obj.filter((item) => { + entity.filter((rs) => { + if (item.id == rs.id) { + rs.polygon.material = Cesium.Color.CORNFLOWERBLUE; + } + }); + }); + }); + }, + getLayerModelCount(res) { + axios + .post( + res.url, + { + dbid: res.dbid, + geometry: res.geometry, + layerid: res.layerid, + returnCountOnly: res.containCount, + token: res.token + }, + { + headers: { + Authorization: res.token, + "Content-Type": res.contentType + } + } + ) + .then((response) => { + if (response.status === 200) { + this.getLayerModelList(res, response.data.data); + } else { + this.getLayerModelList(res, 200); + } + }); + }, + getLayerModelList(res, count) { + axios + .post( + res.url, + { + dbid: res.dbid, + geometry: res.geometry, + layerid: res.layerid, + containCount: res.containCount, + token: res.token, + count: count, + start: 1, + outfields: res.outfields + }, + { + headers: { + Authorization: res.token, + "Content-Type": res.contentType + } + } + ) + .then((response) => { + console.log("List", response); + }); } }; export default mapViewer; -- Gitblit v1.9.3