From da89682920810d20d825294ee3669e6be9a8f477 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 18 Apr 2023 20:13:21 +0800
Subject: [PATCH] 电子沙盘数据地图定位

---
 src/utils/turfPolygon.js |   96 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 77 insertions(+), 19 deletions(-)

diff --git a/src/utils/turfPolygon.js b/src/utils/turfPolygon.js
index 504f83f..1ccc6ee 100644
--- a/src/utils/turfPolygon.js
+++ b/src/utils/turfPolygon.js
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-31 10:52:25
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-04-04 15:55:33
+ * @LastEditTime: 2023-04-18 20:13:04
  * @FilePath: \srs-police-affairs\src\utils\turfPolygon.js
  * @Description: 
  * 
@@ -10,31 +10,91 @@
  */
 import * as turf from '@turf/turf'
 
-export const computerCapacity = (data, type) => {
-    if (type == 'region') {
-        console.log('computerCapacity', data)
-        const pointArr = data.reduce((pre, cur) => {
-            cur.position && JSON.parse(cur.position).coordinates[0][0].forEach(item => {
-                console.log(item, 959)
-                item[0] && item[1] && pre.push(turf.point(item))
-            })
+function getAllRegionCenter (data) {
+    let arr = []
 
-            return pre
-        }, [])
+    data.forEach(item => {
+        if (item.position && item.position.length > 0) {
+            arr.push(getRegionCenter(item.position))
+        }
+    })
+
+    arr.push(arr[0])
+
+    if (arr.length == 1) {
+        return arr[0]
+    } else if (arr.length == 2) {
+
+        return turf.centroid(turf.midpoint(turf.point(arr[0]), turf.point(arr[1]))).geometry.coordinates
+    } else {
+        arr.push(arr[0])
+
+        return turf.centroid(turf.polygon([arr])).geometry.coordinates
+    }
+}
+
+function getRegionCenter (params) {
+    let arr = []
+
+    params.forEach(areaArray => {
+        JSON.parse(areaArray).coordinates.forEach(item => {
+            arr.push(turf.centroid(turf.polygon([item[0]])).geometry.coordinates)
+        })
+    })
+
+    if (arr.length == 1) {
+        return arr[0]
+    } else if (arr.length == 2) {
+
+        return turf.centroid(turf.midpoint(turf.point(arr[0]), turf.point(arr[1]))).geometry.coordinates
+    } else {
+        arr.push(arr[0])
+
+        return turf.centroid(turf.polygon([arr])).geometry.coordinates
+    }
+}
 
 
-        const features = turf.featureCollection(pointArr)
 
-        const scope = turf.envelope(features).bbox
+export const computerCapacity = (data, type = '') => {
 
-        const poly = turf.polygon([[[scope[0], scope[1]], [scope[0], scope[3]], [scope[2], scope[1]], [scope[2], scope[3]]]])
+    if (type != '') {
 
-        const scaledPoly = turf.transformScale(poly, 3)
+        const center = getAllRegionCenter(data)
 
-        console.log(scope, scaledPoly, 5555)
+        if (type == 'all') {
+
+            global.viewer.flyToPosition(
+                new global.DC.Position(
+                    Number(center[0] + 0.03),
+                    Number(center[1] - 0.30),
+                    Number(36000),
+                    Number(-3),
+                    Number(-45),
+                    Number(0)
+                ),
+                function () { },
+                3
+            )
+
+        } else {
+
+            global.viewer.flyToPosition(
+                new global.DC.Position(
+                    Number(center[0] + 0.0046),
+                    Number(center[1] - 0.04),
+                    Number(4000),
+                    Number(-3),
+                    Number(-45),
+                    Number(0)
+                ),
+                function () { },
+                3
+            )
+
+        }
     } else {
         let pointArr = []
-        console.log('data', data)
         data.forEach(item => {
             if (item.longitude && item.latitude) {
                 pointArr.push(turf.point([item.longitude, item.latitude]))
@@ -50,8 +110,6 @@
         const features = turf.featureCollection(pointArr)
 
         const scope = turf.envelope(features).bbox
-
-        console.log(scope, 5555)
 
         // const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]])
 

--
Gitblit v1.9.3