一些地图方法

判断地图上多边形是否合法(是否相交)

// 使用 npm install  @turf/turf
import { lineString } from '@turf/helpers';
import { Position, center, lineIntersect, points } from '@turf/turf';
// 定义一个函数,用于检查多边形边是否存在相交
/**
 * 按需导入
 * @param arr 输入数据,可以变化

    [
        {
            "lat": 24.33214802715963,
            "lng": 104.37011718750001
        },
        {
            "lat": 25.0506576460492,
            "lng": 84.55078125
        },
        {
            "lat": 30.75452246878451,
            "lng": 104.41406250000001
        },
        {
            "lat": 22.477558727469177,
            "lng": 96.02050781250001
        }
    ]

 * @returns 返回是否相交,相交为是true
 */
const isPolygonEdgesIntersecting: (arr: any[]) => boolean = (arr) => {
  // 首先检查输入数据是否符合要求
  if (!Array.isArray(arr) || arr.length === 0 || arr.length < 4) {
    return false;
  }

  // 将所有点连接起来形成一条折线
  const points = arr.map(({ lng, lat }: { lng: number, lat: number }) => [lng, lat]);
  // 检查相邻线段之间是否相交
  for (let i = 0; i <= points.length - 3; i++) {
    const line1 = [points[i], points[i + 1]];
    const turf1 = lineString(line1)
    for (let j = i + 2; j <= points.length - 1; j++) {
      if ((j == points.length - 1) && (i == 0)) {
        continue
      }
      const line2 = (j == points.length - 1) ?
        [points[j], points[0]]
        : [points[j], points[j + 1]];
      const turf2 = lineString(line2)
      if (lineIntersect(turf1, turf2).features.length > 0) {
        return true;
      }
    }
  }
  return false;
}


你可能感兴趣的:(typescript)