| | |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2023-03-31 10:52:25 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2023-05-08 18:21:01 |
| | | * @LastEditTime: 2023-08-15 09:30:00 |
| | | * @FilePath: \srs-police-affairs\src\utils\turfPolygon.js |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | * @Description: |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | */ |
| | | import * as turf from '@turf/turf' |
| | | import * as turf from "@turf/turf"; |
| | | |
| | | function getAllRegionCenter (data) { |
| | | let arr = [] |
| | | 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 |
| | | 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 = [] |
| | | 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 |
| | | 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 { |
| | | arr.push(arr[0]) |
| | | |
| | | return turf.centroid(turf.polygon([arr])).geometry.coordinates |
| | | 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 = '') => { |
| | | export const computerCapacity = (data, type = "", multiple = 4) => { |
| | | if (type != "") { |
| | | const center = getAllRegionCenter(data); |
| | | |
| | | if (type != '') { |
| | | |
| | | const center = getAllRegionCenter(data) |
| | | |
| | | 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 |
| | | ) |
| | | |
| | | } |
| | | if (type == "all") { |
| | | global.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 { |
| | | console.log(data, 564) |
| | | 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]]]) |
| | | |
| | | console.log([[scope[0], scope[1]], [scope[2], scope[1]], [scope[2], scope[3]], [scope[0], scope[3]]]) |
| | | |
| | | 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, 4) |
| | | |
| | | let boxPoint = [] |
| | | scaledPoly.geometry.coordinates[0].forEach(item => { |
| | | boxPoint.push(turf.point(item)) |
| | | }) |
| | | |
| | | const boxFeatures = turf.featureCollection(boxPoint) |
| | | |
| | | const boxScope = turf.envelope(boxFeatures).bbox |
| | | |
| | | global.viewer.flyToBounds(boxScope, |
| | | { heading: 0, pitch: -90, roll: 0 }, |
| | | (e) => { }, |
| | | 3 |
| | | ) |
| | | 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 = []; |
| | | data.forEach((item) => { |
| | | if (item.longitude && item.latitude) { |
| | | pointArr.push(turf.point([item.longitude, item.latitude])); |
| | | return; |
| | | } |
| | | |
| | | export const getMapBounds = (data, type = '') => { |
| | | let pointArr = [] |
| | | if (item.lng && item.lat) { |
| | | pointArr.push(turf.point([item.lng, item.lat])); |
| | | return; |
| | | } |
| | | }); |
| | | |
| | | data.forEach(item => { |
| | | pointArr.push(turf.point([item.x, item.y])) |
| | | return |
| | | }) |
| | | const features = turf.featureCollection(pointArr); |
| | | |
| | | const features = turf.featureCollection(pointArr) |
| | | |
| | | const scope = turf.envelope(features).bbox |
| | | const scope = turf.envelope(features).bbox; |
| | | |
| | | // const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]]) |
| | | |
| | | return scope |
| | | } |
| | | 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); |
| | | |
| | | export const getLineSpeed = (data) => { |
| | | var line = turf.lineString(data) |
| | | var length = turf.length(line, { units: 'miles' }) |
| | | let boxPoint = []; |
| | | scaledPoly.geometry.coordinates[0].forEach((item) => { |
| | | boxPoint.push(turf.point(item)); |
| | | }); |
| | | |
| | | return length * 1000 / 50 |
| | | } |
| | | const boxFeatures = turf.featureCollection(boxPoint); |
| | | |
| | | const boxScope = turf.envelope(boxFeatures).bbox; |
| | | |
| | | global.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; |
| | | }; |