/*
|
* @Author: shuishen 1109946754@qq.com
|
* @Date: 2023-03-31 10:52:25
|
* @LastEditors: shuishen 1109946754@qq.com
|
* @LastEditTime: 2024-11-09 15:26:11
|
* @FilePath: \bigScreen\src\utils\turfPolygon.js
|
* @Description:
|
*
|
* Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
|
*/
|
import * as turf from "@turf/turf"
|
|
function getAllRegionCenter (data) {
|
let arr = []
|
|
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) => {
|
let data = JSON.parse(areaArray)
|
if (data.type == "Polygon") {
|
data.coordinates.forEach((item) => {
|
arr.push(turf.centroid(turf.polygon([item])).geometry.coordinates)
|
})
|
} else {
|
data.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
|
}
|
}
|
|
export const getCurRegionCenter = (params) => {
|
let arr = []
|
|
params.forEach((areaArray) => {
|
let data = JSON.parse(areaArray)
|
if (data.type == "Polygon") {
|
data.coordinates.forEach((item) => {
|
arr.push(turf.centroid(turf.polygon([item])).geometry.coordinates)
|
})
|
} else {
|
data.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
|
}
|
}
|
|
export const computerCapacity = (data, type = "", multiple = 4) => {
|
if (type != "") {
|
const center = getAllRegionCenter(data)
|
|
if (type == "all") {
|
window.$viewer.flyToPosition(
|
new global.DC.Position(
|
Number(center[0] + 0.03),
|
Number(center[1] - 0.3),
|
Number(36000),
|
Number(-3),
|
Number(-45),
|
Number(0)
|
),
|
function () { },
|
3
|
)
|
} else {
|
window.$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 = []
|
data.forEach((item) => {
|
if (item.longitude && item.latitude) {
|
pointArr.push(turf.point([item.longitude, item.latitude]))
|
return
|
}
|
|
if (item.lng && item.lat) {
|
pointArr.push(turf.point([item.lng, item.lat]))
|
return
|
}
|
})
|
|
const features = turf.featureCollection(pointArr)
|
|
const scope = turf.envelope(features).bbox
|
|
// const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]])
|
|
var poly = turf.polygon([
|
[
|
[scope[0], scope[1]],
|
[scope[2], scope[1]],
|
[scope[2], scope[3]],
|
[scope[0], scope[3]],
|
[scope[0], scope[1]],
|
],
|
])
|
var scaledPoly = turf.transformScale(poly, multiple)
|
|
let boxPoint = []
|
scaledPoly.geometry.coordinates[0].forEach((item) => {
|
boxPoint.push(turf.point(item))
|
})
|
|
const boxFeatures = turf.featureCollection(boxPoint)
|
|
const boxScope = turf.envelope(boxFeatures).bbox
|
|
window.$viewer.flyToBounds(
|
boxScope,
|
{ heading: 0, pitch: -90, roll: 0 },
|
(e) => { },
|
3
|
)
|
}
|
}
|
|
export const getMapBounds = (data, type = "") => {
|
let pointArr = []
|
|
data.forEach((item) => {
|
pointArr.push(turf.point([item.x, item.y]))
|
return
|
})
|
|
const features = turf.featureCollection(pointArr)
|
|
const scope = turf.envelope(features).bbox
|
|
// const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]])
|
|
return scope
|
}
|
|
export const getLineSpeed = (data, multiple) => {
|
var line = turf.lineString(data)
|
var length = turf.length(line, { units: "miles" })
|
|
return (length * 1000) / multiple
|
}
|