From c065531c87e7dc199c7fc4d35e4f6fbedf26167d Mon Sep 17 00:00:00 2001
From: 徐旺旺 <11530253@qq.com>
Date: 星期三, 19 五月 2021 15:40:37 +0800
Subject: [PATCH] 定位、弹窗信息、排口查询BUG修复

---
 src/components/helpers/LocateHelper.js |  141 ++++++++++++++++++++++++----------------------
 1 files changed, 73 insertions(+), 68 deletions(-)

diff --git a/src/components/helpers/LocateHelper.js b/src/components/helpers/LocateHelper.js
index 6354244..edfc65c 100644
--- a/src/components/helpers/LocateHelper.js
+++ b/src/components/helpers/LocateHelper.js
@@ -1,4 +1,4 @@
-import { pulseEffect, reversePolyLine } from '../../utils/utils'
+import { pulseEffect } from '../../utils/utils'
 import Popup from '@views/popup/Popup'
 import { LAYERPROPS, LAYERS } from '../../conf/Constants'
 
@@ -9,7 +9,7 @@
  */
 export const locate = function (feature, config, filter) {
   fitBounds(feature)
-  highlight(feature, config)
+  highlight(feature, config.icon)
   setTimeout(() => {
     const centerPoint = getCenterPoint(feature)
     const params = { LAYERS: config.layerGroup || config.typeName, QUERY_LAYERS: config.layerGroup || config.typeName }
@@ -35,58 +35,48 @@
  */
 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, 17)
+  } else {
+    window.map.fitBounds(window.L.geoJSON(feature).getBounds())
   }
 }
 
 export const highlight = function (feature, icon) {
-  if (Array.isArray(feature)) {
+  /* if (Array.isArray(feature)) {
     for (let i = 0; i < feature.length; i++) {
       highlight(feature[i], icon)
     }
-  } 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') {
+  } else { */
+  window.mapManager.clearHighlight()
+  const L = window.L
+  const type = feature.geometry.type
+  const highlightLayer = window.mapManager.hightlightLayer
+  if (type === 'Point') {
     // 鍙犲姞涓�涓ぇ灏哄鐨勫浘鏍�
-      let point = feature.geometry.coordinates
-      point = [point[1], point[0]]
+    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)
+    if (icon) {
+      L.marker(point, {
+        icon: L.icon({
+          iconUrl: '/assets/images/map/' + icon,
+          iconSize: [30, 30],
+          iconAnchor: [15, 15]
+        })
+      }).addTo(highlightLayer)
     }
+    pulseEffect(point)
+  } else {
+    L.geoJSON(feature, {
+      style: function () {
+        return {
+          color: 'red'
+        }
+      }
+    }).addTo(highlightLayer)
   }
 }
 
@@ -98,7 +88,6 @@
 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: {
@@ -115,32 +104,21 @@
 }
 
 export const getCenterPoint = function (feature) {
+  const L = window.L
   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
+  var coordinates = feature.geometry.coordinates
+
+  if (type === 'Point') {
+    return [coordinates[1], coordinates[0]]
+  } else {
+    const center = L.geoJSON(feature, {}).getBounds().getCenter()
+    return [center.lat, center.lng]
   }
-  if (point.length > 2) {
-    point.splice(2, 1)
-  }
-  return point.reverse()
 }
 
 const popupDatas = function (features) {
   const datas = []
+  console.log(features)
   if (features) {
     for (var i = 0; i < features.length; i++) {
       const feature = features[i]
@@ -153,22 +131,49 @@
       if (!propValues) {
         continue
       }
+      if (id.indexOf('pipesegment') >= 0) {
+        continue
+      }
       for (const k in properties) {
         if (propValues[k]) {
           contents[propValues[k]] = properties[k]
         }
       }
-      datas.push({
+      const data = {
         title: LAYERS[ids[0]],
         name: feature.id,
-        content: contents
-      })
+        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) {
   const layer = this.layers[layerId]
 

--
Gitblit v1.8.0