检查Google Map Point是否是PHP中的多边形

时间:2013-07-21 06:01:39

标签: php api google-maps map polygon

我一直在寻找一种方法来检查一个点是否是多边形的一部分;此多边形从文件加载。

所有与此问题相关的答案都是用javascript解决的,但我要求在服务器端执行此操作;这是因为结果不需要作为web客户端显示给用户,它需要存储,然后用作参数来选择该区域内的一组用户(使用系统)(多边形)。

我查找了适用于PHP的Google Maps API,但它看起来根本不存在。我找到了this one,但它与Google无关,也专注于前端。

我还寻找了一个REST API;将内容加载到我的php并解析它会相对容易,但看起来谷歌把所有的努力放在JS API上。

有没有解决方法呢?

编辑1 :正如@Spacedman所要求的那样,文件格式为KML

澄清1 :我希望Google为此提供一个工具(因为它存在于JS中);解析文件以通过算法进行检查是一种可能性,我必须检查它是否正常工作。

3 个答案:

答案 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脚本(基本上会执行相同的操作)。

http://php.net/manual/en/book.v8js.php

http://php.net/manual/en/function.shell-exec.php