/* * @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 }