1
guanqb
2024-01-20 f13afcb61276061871b30bce17a7877287df0b67
src/utils/turfPolygon.js
@@ -2,158 +2,165 @@
 * @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;
};