webgis判断一个点是否在一个区域或者多个区域内

发布于 2024-01-16  183 次阅读


let disableArr2 = [
    [
        [
            22.707472472403808,
            113.63200378837065
        ],
        [
            22.693536477810635,
            113.71467590332031
        ],
        [
            22.641960980882153,
            113.67745972936974
        ],
        [
            22.653747749201052,
            113.60151672153735
        ],
        [
            22.686504573778752,
            113.53051756974311
        ]
    ],
    [
        [
            22.969773432534776,
            113.37615966796875
        ],
        [
            22.879970973215126,
            113.36242675781251
        ],
        [
            22.955864273707803,
            113.54507446289062
        ],
        [
            23.02615408624625,
            113.53958129882814
        ]
    ],
    [
        [
            22.72172372713302,
            113.20861816406251
        ],
        [
            22.64823470853169,
            113.20999145507814
        ],
        [
            22.63556020814839,
            113.32397460937501
        ],
        [
            22.749588557614043,
            113.30749511718751
        ],
        [
            22.836945920943855,
            113.25256347656251
        ]
    ],
    null,
    [
        [
            22.266222283797777,
            113.35144042968751
        ],
        [
            22.3424548401465,
            113.84033203125001
        ],
        [
            22.469416459383854,
            113.54095458984376
        ],
        [
            22.510019650257966,
            113.99963378906251
        ]
    ]
];

判断一个点是否在一个区域或者多个区域内l

const IsInBannedArea = (lat: any, lng: any) => {
  for (let k = 0; k < disableArr2.length; k++) {
    if (
      disableArr2[k] == null ||
      disableArr2[k].length == 0 ||
      disableArr2[k].length == 1 ||
      disableArr2[k].length == 2
    ) {
      continue;
    }

    let x = lat,
      y = lng;
    let inside = false;
    for (
      let i = 0, j = disableArr2[k].length - 1;
      i < disableArr2[k].length;
      j = i++
    ) {
      let xi = disableArr2[k][i][0],
        yi = disableArr2[k][i][1];
      let xj = disableArr2[k][j][0],
        yj = disableArr2[k][j][1];
      let intersect =
        yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;
      if (intersect) inside = !inside;
    }

    if (inside) {
      return inside;
    }
  }

  return false;
};

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。