From 8dc33d1e8da59e87a2be6b921ac96600d7786685 Mon Sep 17 00:00:00 2001 From: chenyabin <Chenab123!> Date: 星期二, 18 五月 2021 15:43:16 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/develop' 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