You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
4 years ago
|
const isPointInPolygon =(aLat, aLon, pointList)=> {
|
||
|
/*
|
||
|
:param aLon: double 经度
|
||
|
:param aLat: double 纬度
|
||
|
:param pointList: list [{latitude: 22.22, longitude: 113.113}...] 多边形点的顺序需根据顺时针或逆时针,不能乱
|
||
|
*/
|
||
|
var iSum = 0
|
||
|
var iCount = pointList.length
|
||
|
|
||
|
if(iCount < 3) {
|
||
|
return false
|
||
|
}
|
||
|
for(var i = 0; i < iCount;i++) {
|
||
|
var pLat1 = pointList[i][1]
|
||
|
var pLon1 = pointList[i][0]
|
||
|
if(i == iCount - 1) {
|
||
|
var pLat2 = pointList[0][1]
|
||
|
var pLon2 = pointList[0][0]
|
||
|
} else {
|
||
|
var pLat2 = pointList[i + 1][1]
|
||
|
var pLon2 = pointList[i + 1][0]
|
||
|
}
|
||
|
if (((aLat >= pLat1) && (aLat < pLat2)) || ((aLat>=pLat2) && (aLat < pLat1))) {
|
||
|
if (Math.abs(pLat1 - pLat2) > 0) {
|
||
|
var pLon = pLon1 - ((pLon1 - pLon2) * (pLat1 - aLat)) / (pLat1 - pLat2);
|
||
|
if(pLon < aLon) {
|
||
|
iSum += 1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(iSum % 2 != 0) {
|
||
|
return true
|
||
|
}else {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
module.exports = {
|
||
|
isPointInPolygon,
|
||
|
};
|