共计 1312 个字符,预计需要花费 4 分钟才能阅读完成。
1、需要
判断以后坐标,在某个地理坐标区域里(多边形)。
2、思路
思路如下:
先判断 y 值是否在 yi 和 yi+ 1 之间
判断 A 值是否在 xi 和 xi+ 1 之间
判断 A 值大于还是小于 x 值,以此判断是右边交点,还是左边交点
右边交点 nl,左边交点 nr,如果满足 1 和 2,且 A 值小于 x 值,那么右边交点 nl+1,;如果满足 1 和 2,且 A 值大于 x 值,那么左边交点 nr+1
留神,如果焦点在多变形的拐点处,只算一次相交。
3、代码
function isIn(point, points){console.log('point',point);
console.log('points',points);
const {lng, lat} = point;
var iSum = 0,
iCount;
var dLon1, dLon2, dLat1, dLat2, dLon;
if (points.length < 3) return false;
iCount = points.length;
for (var i = 0; i < iCount; i++) {if (i == iCount - 1) {dLon1 = points[i].lng;
dLat1 = points[i].lat;
dLon2 = points[0].lng;
dLat2 = points[0].lat;
} else {dLon1 = points[i].lng;
dLat1 = points[i].lat;
dLon2 = points[i + 1].lng;
dLat2 = points[i + 1].lat;
}
// 以下语句判断 A 点是否在边的两端点的程度平行线之间,在则可能有交点,开始判断交点是否在左射线上
if (((lat >= dLat1) && (lat < dLat2)) || ((lat >= dLat2) && (lat < dLat1))) {if (Math.abs(dLat1 - dLat2) > 0) {console.log('=======================');
// 失去 A 点向左射线与边的交点的 x 坐标:dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - lat)) / (dLat1 - dLat2);
console.log(dLat1, dLon2, dLat2, dLon2, lat, lng, dLon)
if (dLon < lng)
iSum++;
}
}
}
if (iSum % 2 != 0)
return true;
return false;
}
let point={lng:116.31376519097222,lat:40.06724392361111}// 经度和纬度
let points=[{lng:116.311083,lat:40.0696},
{lng:116.31693,lat:40.06974},
{lng:116.316941,lat:40.065331},
{lng:116.310493,lat:40.065273},
{lng:116.311083,lat:40.0696},
];// 经度和纬度
console.log(isIn(point,points));
参考链接
1、坐标拾取网站
https://lbs.amap.com/tools/pi…
2、原理介绍
https://home.yangxl.cn:81/202…
正文完
发表至: javascript
2021-12-05