7

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

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

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

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

有什么解决方法吗?

编辑 1:根据@Spacedman 的要求,文件格式为 KML

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

4

3 回答 3

7

您是否尝试在您最喜欢的搜索引擎中搜索“多边形中的 php 点”?热门歌曲:

http://assemblysys.com/php-point-in-polygon-algorithm/

它使用扫描线算法,并且有一些示例。您需要做的就是将多边形文件读入正确的格式(您忽略了说明您拥有什么格式)并调用该函数。

于 2013-07-21T07:43:42.613 回答
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 是对的,则该点在外面,甚至在里面

结帐多边形埃里克海恩斯。我从他那里得到了这个想法。

这个想法是你必须从你的点创建一条射线,并检查这条射线和多边形向量之间有多少交叉点

该算法只是一点代数,您可以在任何书籍中查看。

于 2014-01-09T21:49:59.103 回答
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

于 2013-07-21T06:20:32.737 回答