前言
工作中有个需求需要判断一个点(位置:经纬度)是否在一个多边形的区域范围内,故此记录下方法,用途范围不局限于百度地图
关联词汇:百度地图、高德地图、腾讯地图
解决方案
/*
* 判断一个位置是否在多边形区域范围内
* @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
},