脚本宝典收集整理的这篇文章主要介绍了使geoJSONLayer能够加载两种数据类型的geojson数据,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
问题描述
在使用geoJSONLayer加载geojson数据时,官方文档只支持单一类型的geojson数据加载,当一个geojson数据中出现两种类型的数据时可以尝试一下方法进行解决
本场景为:点击图层获取geojson,通过geoJSONLayer加载底图上,然后在通过popup显示当前点击位置的数据,点击位置的要素要高亮
_this.loadGeojson('clickQueryGeojsonPolyline', res.data.json_url)
for (const item of features) { const {type} = item.geometry if (type === 'Point') { hasPoint = true await _this.loadGeojson('clickQueryGeojsonPoint', res.data.json_url, 'point') break } }
const layerPolyline = _this.map.findLayerById('clickQueryGeojsonPolyline') const layerPoint = _this.map.findLayerById('clickQueryGeojsonPoint') let geojsonFeaturesPoint = {} const geojsonFeaturesPolyline = await layerPolyline.queryFeatures() /** * 三种情况 * 如果图层不存在,直接把geojsonFeaturesPoint的features赋空 * 如果图层存在并且是当前加载 则查所有的点要素 * 如果图层存在但是上一次加载的结果,则删除图层并把geojsonFeaturesPoint的features赋空 */ if (layerPoint) { if (!hasPoint) { _this.map.remove(layerPoint) geojsonFeaturesPoint.features = [] } else { geojsonFeaturesPoint = await layerPoint.queryFeatures() } } else { geojsonFeaturesPoint.features = [] }
const geojsonFeatures = [...geojsonFeaturesPoint.features, ...geojsonFeaturesPolyline.features]
_this.view.popup.open({
location: event.mapPoint,
features: geojsonFeatures
})
完整代码
const res = await clickQuery(event.mapPoint.x, event.mapPoint.y) let features = res.data.features let hasPoint = false if (features.length === 0) { _this.delLayer(['clickQueryGeojsonPolyline', 'clickQueryGeojsonPoint']) _this.view.popup.close() return } await _this.loadGeojson('clickQueryGeojsonPolyline', res.data.json_url) for (const item of features) { const {type} = item.geometry if (type === 'Point') { hasPoint = true await _this.loadGeojson('clickQueryGeojsonPoint', res.data.json_url, 'point') break } } const layerPolyline = _this.map.findLayerById('clickQueryGeojsonPolyline') const layerPoint = _this.map.findLayerById('clickQueryGeojsonPoint') let geojsonFeaturesPoint = {} const geojsonFeaturesPolyline = await layerPolyline.queryFeatures() /** * 三种情况 * 如果图层不存在,直接把geojsonFeaturesPoint的features赋空 * 如果图层存在并且是当前加载 则查所有的点要素 * 如果图层存在但是上一次加载的结果,则删除图层并把geojsonFeaturesPoint的features赋空 */ if (layerPoint) { if (!hasPoint) { _this.map.remove(layerPoint) geojsonFeaturesPoint.features = [] } else { geojsonFeaturesPoint = await layerPoint.queryFeatures() } } else { geojsonFeaturesPoint.features = [] } const geojsonFeatures = [...geojsonFeaturesPoint.features, ...geojsonFeaturesPolyline.features] _this.view.popup.open({ location: event.mapPoint, features: geojsonFeatures }) /** * 删除图层 * @params layerIdArr 要删除的图层id */ delLayer(layerIdArr) { for(const item of layerIdArr) { const layer = this.map.findLayerById(item) if(layer) { this.map.remove(layer) } } }, /** * 加载geojson数据 * @param layerID{String} 图层自定义的id.方便查找图层 * @param geometryType{String} geojson类型 * @param url{String} geojson的接口 * @param customRenderer{object} 样式 */ async loadGeojson(layerID, url, geometryType = 'polyline', customRenderer = '') { // 弹窗模板 const popupTemplate = { title: clickQueryPopupTemplate.title[geometryType], content: clickQueryPopupTemplate.content[geometryType], } let geojsonLayer = this.map.findLayerById(layerID) await this.delLayer([layerID]) geojsonLayer = new GeoJSONLayer({ url: `http://xxx.xxxx.xxx/search_pipeline_info.json`, copyright: 'RHgis', id: layerID, renderer: customRenderer || clickQueryPopupTemplate.renderer[geometryType], popupTemplate, geometryType }) this.map.add(geojsonLayer) },
以上是脚本宝典为你收集整理的使geoJSONLayer能够加载两种数据类型的geojson数据全部内容,希望文章能够帮你解决使geoJSONLayer能够加载两种数据类型的geojson数据所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。