检查纬度和经度是否在区域内的公式,免使用Google Maps API
我有一个示例地图,链接在这里:这个。
我制作了一个边界多边形的形状。
-6.875165174925262, 107.56293296813965
-6.882663904407988, 107.66730308532715
-6.980818117491586, 107.67210960388184
-6.97093546084682, 107.54508018493652
我想知道如何检查给定的坐标(纬度和经度)-6.935884,107.611592
是否在这个边界多边形内?
我需要在没有Google地图API的情况下进行这个检查,因为我的程序需要离线运行,并且检查的频率比Google API的免费服务允许的要高。
有没有什么几何公式可以用来实现这个?如果可以的话,最好用PHP或Python来做。
3 个回答
0
你可以试试这个PHP库(https://github.com/xopbatgh/sb-polygon-pointer),它可能适合你的需求。
你只需要做以下几步:
输入你多边形的坐标
询问这个库某个经纬度的点是否在这个多边形内
$polygonBox = [
[55.761515, 37.600375],
[55.759428, 37.651156],
[55.737112, 37.649566],
[55.737649, 37.597301],
];
$sbPolygonEngine = new sbPolygonEngine($polygonBox);
$isCrosses = $sbPolygonEngine->isCrossesWith(55.746768, 37.625605);
// $isCrosses is boolean
1
我不是一个专门做JavaScript的人,但这看起来像是学校学的平面几何。假设你有一个多边形,它的角落是:
A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4)
如果你想检查一个点E(X,Y)是否在这个多边形的区域内,可以这样做:
先构建每条边AB、BC、CD、DA的方程,像这样
y - y1 = m(x - x1)
,其中m=(x1-x2)/(y1 - y2)
,这里的A(x1, y1)和B(x2, y2)是这条边的两个端点。然后检查点E(X, Y)是否在对应的直线的一侧,方法如下:
if (Y > m(X - x1) + y1) { // resides on the upper area } else (Y < m(X - x1) + y1) { // resides on the below area } else { // resides right on the line }
4
最后我找到了答案……
检测点是否在多边形内
这个函数对我帮助很大……而且效果很好……其他一些函数有时候会错误地判断一个点是在多边形内还是外面。