From 49003d0eeae335ba72a89e9c1156237cdd02ebd8 Mon Sep 17 00:00:00 2001
From: 陈泽平 <chenzeping>
Date: 星期二, 18 五月 2021 15:42:44 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop
---
src/components/helpers/LocateHelper.js | 131 ++++++++++++++++++++++++++++++++-----------
1 files changed, 98 insertions(+), 33 deletions(-)
diff --git a/src/components/helpers/LocateHelper.js b/src/components/helpers/LocateHelper.js
index 4160b89..6354244 100644
--- a/src/components/helpers/LocateHelper.js
+++ b/src/components/helpers/LocateHelper.js
@@ -1,6 +1,33 @@
import { pulseEffect, reversePolyLine } 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)
+ setTimeout(() => {
+ 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 ')
+ }
+ window.mapManager.loadWfsDatas(centerPoint, params).then((res) => {
+ openPropsPopup(centerPoint, res.features)
+ })
+ }, 1000)
+}
/**
* 鏍规嵁浼犵殑 feature瀵硅薄瀹氫綅锛�
* @param code
@@ -23,45 +50,55 @@
}
}
-export const highlight = function (feature, config) {
- const L = window.L
- const type = feature.geometry.type
- window.mapManager.clearHighlight()
- const highlightLayer = window.mapManager.hightlightLayer
- if (type === 'MultiLineString') {
- 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)
+export const highlight = function (feature, icon) {
+ if (Array.isArray(feature)) {
+ for (let i = 0; i < feature.length; i++) {
+ highlight(feature[i], icon)
}
- pulseEffect(point)
- const features = window.mapManager.loadWfsDatas(point)
- openPopup(point, features)
- } else if (type === 'LineString') {
- L.polyline(reversePolyLine(feature), { color: 'red' }).addTo(highlightLayer)
+ } else {
+ const L = window.L
+ const type = feature.geometry.type
+ window.mapManager.clearHighlight()
+ const highlightLayer = window.mapManager.hightlightLayer
+ if (type === 'MultiLineString') {
+ 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 (icon) {
+ L.marker(point, {
+ icon: L.icon({
+ iconUrl: '/assets/images/map/' + 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 (xy, features) {
+/**
+ * 寮瑰嚭灞炴�у垪琛ㄥ睍绀虹獥鍙�
+ * @param xy 寮瑰嚭绐楀彛璺熼殢瑕佺礌鐨勭粡绾害
+ * @param layer 鏌ヨ鎸囧畾鐨勫浘灞傘�備笉鎸囧畾鏃讹紝榛樿涓哄嬀閫夌殑鍥惧眰
+ */
+export const openPropsPopup = function (xy, features) {
const lt = window.map.latLngToContainerPoint(xy)
const datas = popupDatas(features)
+ console.log(datas)
if (datas.length > 0) {
window.$layer.open({
content: {
@@ -77,6 +114,31 @@
}
}
+export const getCenterPoint = function (feature) {
+ const type = feature.geometry.type
+ var point = []
+ switch (type) {
+ case 'Point':
+ point = feature.geometry.coordinates
+ break
+ case 'MultiLineString':
+ var coordinates = feature.geometry.coordinates
+ var coordinate = coordinates[parseInt(coordinates.length / 2)][0]
+ if (coordinate.length > 2) {
+ point = [coordinate[0], coordinate[1]]
+ }
+ break
+ case 'LineString':
+ var lineString = feature.geometry.coordinates
+ point = lineString[parseInt(lineString.length / 2)][0]
+ break
+ }
+ if (point.length > 2) {
+ point.splice(2, 1)
+ }
+ return point.reverse()
+}
+
const popupDatas = function (features) {
const datas = []
if (features) {
@@ -88,6 +150,9 @@
const propValues = LAYERPROPS[ids[0]]
const contents = {}
+ if (!propValues) {
+ continue
+ }
for (const k in properties) {
if (propValues[k]) {
contents[propValues[k]] = properties[k]
--
Gitblit v1.8.0