2013-07-21 47 views
6

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

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

我在寻找Google Maps API for PHP,但看起来它根本不存在。我找到了this one,但它与Google没有关系,也专注于前端。

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

有没有解决方法?

编辑1:作为@Spacedman要求,文件格式是一种KML

澄清1:我预计,谷歌提供这样的工具(因为它与JS存在);解析文件以通过算法检查是一种可能性,我将不得不检查它是否正常工作。

回答

6

你尝试寻找你喜欢的搜索引擎 “在多边形的PHP点”?最高命中:

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

它采用了扫描线算法,并有一些例子。你所要做的就是将你的多边形文件读成正确的格式(你忽略了说明你有什么格式)并调用函数。

+1

我接受了这个答案,因为最终它是一个解决方案,但不是我期望的解决方案,因为我认为Google可以提供一个简单的工具(函数,类)来解析文件。最后,我的解决方案花了一段时间;如你所说,解析文件并使用多边形算法中的点。 – Absulit

+0

这只有在页面完全加载到浏览器中时才适用,对吗?你无法自动找出使用cron作业的要点吗? –

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++; 
        } 

如果I确认为配对点外,即使里面

结帐Polygons Eric Haines。我从他那里得到了这个想法。

的想法是,你已经从你的观点创建一个雷,并检查该射线之间有多少交点和多边形向量

的算法只是有点代数,您可以在任何一本书检查。

相关问题