前言

工作中有个需求需要判断一个点(位置:经纬度)是否在一个多边形的区域范围内,故此记录下方法,用途范围不局限于百度地图
关联词汇:百度地图、高德地图、腾讯地图

解决方案

/*
* 判断一个位置是否在多边形区域范围内
* @method isInsidePolygon
* @param { Object } point 需要判断的目标位置  {lng:116, lat:39}
* @param { Array } polygonPath 多边形范围的数组  [{lng:116, lat:39}, {lng:116, lat:39}, {lng:116, lat:39}]
*/
isInsidePolygon(point, polygonPath) {
      const pts = polygonPath
      const N = pts.length
      const x = point.lng
      const y = point.lat
      let inside = false
      for (let i = 0, j = N - 1; i < N; j = i++) {
        const xi = pts[i].lng
        const yi = pts[i].lat
        const xj = pts[j].lng
        const yj = pts[j].lat
        const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)
        if (intersect) inside = !inside
      }
      return inside
    },