检查Google地图点是否在PHP多边形内

7
我一直在寻找一种方法来检查一个点是否属于一个多边形;这个多边形是从文件中加载的。
所有与此问题相关的答案都是用JavaScript解决的,但我需要在服务器端完成这个任务;因为结果不需要向用户展示为web客户端,它需要被存储并稍后用作选择该区域(多边形)内使用该系统的用户组的参数。
我寻找了一个Google Maps API for PHP,但看起来根本不存在。我找到了这个,但它与Google无关,也侧重于前端。
我还寻找了一个REST API;将内容加载到我的php并解析它将相对容易,但看起来Google把所有的精力都放在JS API上。
有没有什么变通的办法呢? 编辑1:正如@Spacedman所请求的那样,文件格式是KML 澄清1:我希望Google提供一个工具来解决这个问题(就像JS一样);通过算法解析文件进行检查是一种可能性,我将不得不检查它是否正常工作。
3个回答

8

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

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

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


1
我接受了这个答案,因为它最终是一个解决方案,但不是我期望的那种,因为我认为Google可以提供一个简单的工具(函数、类)来解析文件。最终我的解决方案花了一些时间;就像你说的,解析文件并使用点在多边形算法。 - Absulit
这只适用于页面完全在浏览器中加载的情况,对吗?你不能使用cron job自动计算出这些点数,对吗? - Coded Container

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。我从他那里得到了这个想法。
这个想法是你必须从你的点创建一个光线,并检查这条光线与多边形向量之间有多少个交点。
该算法只是一些代数,你可以在任何书中查看。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接