From 223558670632644a19aa4fb0238100708fca3ab7 Mon Sep 17 00:00:00 2001 From: 徐旺旺 <11530253@qq.com> Date: 星期四, 13 五月 2021 17:39:54 +0800 Subject: [PATCH] 定位 高亮 --- src/components/LayerController/service/LayerFactory.js | 66 +++++++++++++++++++++++++++++++- 1 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/components/LayerController/service/LayerFactory.js b/src/components/LayerController/service/LayerFactory.js index 7bba481..51fe254 100644 --- a/src/components/LayerController/service/LayerFactory.js +++ b/src/components/LayerController/service/LayerFactory.js @@ -2,6 +2,7 @@ import { clone } from '../../../utils/utils' import { logicMapper, SERVICE_TYPE } from '../../../conf/Constants' import WmsLayerService from './WmsLayerService' +import AnimalService from './AnimalService' /** * init 鍙垵濮嬪寲涓�娆� @@ -18,6 +19,8 @@ this.minZoomLayers = {} this.wmsLayers = [] this.clickSwitch = true // 鍥惧眰鐐瑰嚮寮圭獥寮�鍏� + this.animalService = new AnimalService({ L: this.L }) + this.hightlightLayer = options.L.featureGroup({}).addTo(window.map) } init (layerConfig) { @@ -175,11 +178,12 @@ * @param feature */ flyByFeature (feature, code) { + this.clearHighlight() const type = feature.geometry.type var point = [] switch (type) { case 'Point': - point = clone(feature.geometry.coordinates) + point = feature.geometry.coordinates break case 'MultiLineString': var coordinates = feature.geometry.coordinates @@ -196,14 +200,70 @@ if (point.length > 2) { point.splice(2, 1) } - window.map.setView(point.reverse(), 17) + this.highlight(feature) + window.map.setView(clone(point).reverse(), 17) code && this.openPopup(code, feature.id) + } + + clearHighlight () { + this.hightlightLayer.clearLayers() + } + + highlight (feature) { + const type = feature.geometry.type + if (type === 'MultiLineString') { + this.L.geoJSON(feature, { + style: function () { + return { + fillColor: 'red', + color: 'red' + } + } + }).addTo(this.hightlightLayer) + } else if (type === 'Point') { + let point = clone(feature.geometry.coordinates) + if (point.length > 2) { + point = [point[0], point[1]] + } + this.animalService.pulseEffect(point.reverse()) + /* var myIcon = this.L.divIcon({ className: 'my-div-icon' }) + this.L.marker(feature.geometry.coordinates.reverse(), { + icon: myIcon + }).addTo(this.hightlightLayer) */ + } else if (type === 'LineString') { + this.L.polyline(this.reversePolyLine(feature), { color: 'red' }).addTo(this.hightlightLayer) + } + } + + reverseMultiLine (feature) { + const coordinates = feature.geometry.coordinates + var latlng = [] + for (var j = 0; j < coordinates.length; j++) { + const coordinate = coordinates[j] + var xy = [] + for (var k = 0; k < coordinate.length; k++) { + const coor = coordinate[k] + xy.push(coor.reverse()) + } + latlng.push(xy) + } + return latlng + } + + reversePolyLine (feature) { + const coordinates = feature.geometry.coordinates + var latlng = [] + for (var j = 0; j < coordinates.length; j++) { + const coordinate = coordinates[j] + latlng.push(coordinate.reverse()) + } + return latlng } openPopup (layerId, id) { const layer = this.layers[layerId] - if (layer.eachLayer) { + if (layer) { layer.eachLayer(function (layer) { const layers = layer.getLayers() for (var i = 0; i < layers.length; i++) { -- Gitblit v1.8.0