From 8e182aa12fcba7ed25c2d65a6f5e1ae0b2160ab1 Mon Sep 17 00:00:00 2001 From: 徐旺旺 <11530253@qq.com> Date: 星期四, 20 五月 2021 15:09:54 +0800 Subject: [PATCH] 装置区问题修复 --- src/components/helpers/LocateHelper.js | 215 ++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 168 insertions(+), 47 deletions(-) diff --git a/src/components/helpers/LocateHelper.js b/src/components/helpers/LocateHelper.js index 876e74e..9e346c1 100644 --- a/src/components/helpers/LocateHelper.js +++ b/src/components/helpers/LocateHelper.js @@ -1,5 +1,43 @@ -import { pulseEffect, reversePolyLine } from '../../utils/utils' +import { pulseEffect } from '../../utils/utils' +import Popup from '@views/popup/Popup' +import { LAYERPROPS, LAYERS } from '../../conf/Constants' +/** + * 鏁村悎瀹氫綅銆侀珮浜�佸脊绐� + * @param feature geojson + * @param config 鍥惧眰鐨刢onfig + */ +export const locate = function (feature, config, filter) { + fitBounds(feature) + highlight(feature, config.icon) + const centerPoint = getCenterPoint(feature) + const params = { LAYERS: config.layerGroup || config.typeName, QUERY_LAYERS: config.layerGroup || config.typeName } + const filters = [] + if (config.filter) { + filters[filters.length] = config.filter + } + if (filter) { + filters[filters.length] = filter + } + if (filters.length > 0) { + params.CQL_FILTER = filters.join(' AND ') + } + console.log(centerPoint) + loadPointWfs(centerPoint, params) +} + +/** + * 鍔犺浇鐐硅寖鍥寸殑wfs鏁版嵁骞跺脊绐� + * @param latlng 鐐圭殑缁忕含搴﹀潗鏍� + * @param params + */ +export const loadPointWfs = function (latlng, params) { + setTimeout(() => { + window.mapManager.loadWfsDatas(latlng, params).then((res) => { + openPropsPopup(latlng, res.features) + }) + }, 1000) +} /** * 鏍规嵁浼犵殑 feature瀵硅薄瀹氫綅锛� * @param code @@ -7,72 +45,155 @@ */ export const fitBounds = function (feature) { const type = feature.geometry.type - switch (type) { - case 'Point': - var point = feature.geometry.coordinates - point = [point[1], point[0]] - window.map.setView(point, 17) - break - case 'MultiLineString': - window.map.fitBounds(window.L.geoJSON(feature).getBounds()) - break - case 'LineString': - window.map.fitBounds(window.L.polyline(reversePolyLine(feature)).getBounds()) - break + if (type === 'Point') { + var point = feature.geometry.coordinates + point = [point[1], point[0]] + window.map.setView(point, 19) + } else { + window.map.fitBounds(window.L.geoJSON(feature).getBounds()) } } -export const highlight = function (feature, config) { +export const highlight = function (feature, icon) { + /* if (Array.isArray(feature)) { + for (let i = 0; i < feature.length; i++) { + highlight(feature[i], icon) + } + } else { */ + window.mapManager.clearHighlight() const L = window.L const type = feature.geometry.type const highlightLayer = window.mapManager.hightlightLayer - if (type === 'MultiLineString') { + if (type === 'Point') { + // 鍙犲姞涓�涓ぇ灏哄鐨勫浘鏍� + let point = feature.geometry.coordinates + point = [point[1], point[0]] + pointZoom(point, icon) + pulseEffect(point) + } else { L.geoJSON(feature, { style: function () { return { - fillColor: 'red', color: 'red' } } }).addTo(highlightLayer) - } else if (type === 'Point') { - // 鍙犲姞涓�涓ぇ灏哄鐨勫浘鏍� - let point = feature.geometry.coordinates - point = [point[1], point[0]] - - if (config) { - L.marker(point, { - icon: L.icon({ - iconUrl: '/assets/images/map/' + config.icon, - iconSize: [30, 30], - iconAnchor: [15, 15] - }) - }).addTo(highlightLayer) - } - pulseEffect(point) - } else if (type === 'LineString') { - L.polyline(reversePolyLine(feature), { color: 'red' }).addTo(highlightLayer) } } -export const openPopup = function (layerId, id) { - const layer = this.layers[layerId] +/** + * 楂樹寒鐐逛綅鍥炬爣 + * @param latlng 缁忕含搴� + * @param icon 鍥炬爣 + */ +export const pointZoom = function (latlng, icon) { + const L = window.L + const highlightLayer = window.mapManager.hightlightLayer + if (icon) { + L.marker(latlng, { + icon: L.icon({ + iconUrl: '/assets/images/map/' + icon, + iconSize: [30, 30], + iconAnchor: [15, 15] + }) + }).addTo(highlightLayer) + } +} - if (layer) { - layer.eachLayer(function (layer) { - const layers = layer.getLayers() - for (var i = 0; i < layers.length; i++) { - const lay = layers[i] - const feature = lay.feature - lay.closePopup() - if (feature.id === id) { - lay.openPopup() - break +/** + * 寮瑰嚭灞炴�у垪琛ㄥ睍绀虹獥鍙� + * @param xy 寮瑰嚭绐楀彛璺熼殢瑕佺礌鐨勭粡绾害 + * @param layer 鏌ヨ鎸囧畾鐨勫浘灞傘�備笉鎸囧畾鏃讹紝榛樿涓哄嬀閫夌殑鍥惧眰 + */ +export const openPropsPopup = function (xy, features) { + const lt = window.map.latLngToContainerPoint(xy) + const datas = popupDatas(features) + if (datas.length > 0) { + window.$layer.open({ + content: { + comp: Popup, // 缁勪欢 + data: { // 浼犻�掔殑鍙傛暟 + datas: datas } - } + }, + title: '', // 鏍囬 + left: lt.x, + top: lt.y }) } - return null +} + +export const getCenterPoint = function (feature) { + const L = window.L + const type = feature.geometry.type + var coordinates = feature.geometry.coordinates + + if (type === 'Point') { + return [coordinates[1], coordinates[0]] + } else { + return L.geoJSON(feature, {}).getBounds().getSouthWest() + // return [center.lat, center.lng] + + // return turf.centerOfMass(L.geoJSON(feature, {}).toGeoJSON()) + } +} + +const popupDatas = function (features) { + const datas = [] + console.log(features) + if (features) { + for (var i = 0; i < features.length; i++) { + const feature = features[i] + const id = feature.id + const properties = feature.properties + const ids = id.split('.') + + const propValues = LAYERPROPS[ids[0]] + const contents = {} + if (!propValues) { + continue + } + if (id.indexOf('pipesegment') >= 0) { + continue + } + for (const k in properties) { + if (propValues[k]) { + contents[propValues[k]] = properties[k] + } + } + const data = { + title: LAYERS[ids[0]], + name: feature.id, + content: contents, + feature: feature + } + if (id.indexOf('pipeline') >= 0) { + data.tableList = listPipeSection(features, properties.subchacode || properties.pipecode) + } + datas.push(data) + console.log(properties) + } + } + return datas +} + +// 绠$嚎淇℃伅缁戝畾鎵�灞炵娈� +export const listPipeSection = function (features, code) { + const list = [] + if (features) { + for (var i = 0; i < features.length; i++) { + const feature = features[i] + const id = feature.id + if (id.indexOf('pipesegment') < 0) { + continue + } + const properties = feature.properties + if (properties.pipecode === code) { + list[list.length] = properties + } + } + } + return list } export const getLayer = function (layerId, id) { -- Gitblit v1.8.0