我一直在寻找一种方法来检查一个点是否是多边形的一部分;此多边形从文件加载。
所有与此问题相关的答案都是用javascript解决的,但我要求在服务器端执行此操作;这是因为结果不需要作为web客户端显示给用户,它需要存储,然后用作参数来选择该区域内的一组用户(使用系统)(多边形)。
我查找了适用于PHP的Google Maps API,但它看起来根本不存在。我找到了this one,但它与Google无关,也专注于前端。
我还寻找了一个REST API;将内容加载到我的php并解析它会相对容易,但看起来谷歌把所有的努力放在JS API上。
有没有解决方法呢?
编辑1 :正如@Spacedman所要求的那样,文件格式为KML
澄清1 :我希望Google为此提供一个工具(因为它存在于JS中);解析文件以通过算法进行检查是一种可能性,我必须检查它是否正常工作。
答案 0 :(得分:7)
您是否尝试在自己喜欢的搜索引擎中搜索“php point in polygon”?热门点击:
http://assemblysys.com/php-point-in-polygon-algorithm/
它使用扫描线算法,并有一些例子。您需要做的就是将您的多边形文件读成正确的格式(您忽略了说明您的格式)并调用该函数。
答案 1 :(得分:1)
您可以尝试这样的事情(在php中应该类似):
int iCheck=0;
for (i = 0, v = HowManyVecotrsHasThePolygon - 1; i < HowManyVecotrsHasThePolygon; v = i++)
{
if (((vectorPointLatitud[i] > ptoLatitud) != (vectorPointLatitud[v] > ptoLatitud)) && (ptoLongitud < (vectorPointLongitud[v] - vectorPointLongitud[i]) * (ptoLatitud - vectorPointLatitud[i]) / (vectorPointLatitud[v] - vectorPointLatitud[i]) + vectorPointLongitud[i]))
iCheck++;
}
如果iCheck成对,则该点在外面,即使在
之内结帐Polygons Eric Haines。我从他那里得到了这个想法。
你的想法是你要从你的角度创建一个射线,并检查这条射线与多边形矢量之间的交叉点数
算法只是一些代数,你可以在任何一本书中查看。
答案 2 :(得分:0)
您可以使用PHP V8 PECL扩展在PHP中执行javascript。或者,您可以使用shell命令调用node.js脚本(基本上会执行相同的操作)。