【发布时间】:2012-05-22 00:14:03
【问题描述】:
不幸的是,数学从来都不是我的强项,我正在努力寻找最佳方法/公式来执行以下操作(然后我需要将其转换为 PHP 代码):
1)。从单个大区域开始(例如覆盖整个欧洲)
2)。将该区域分解为一系列较小的块(即,将其变成各种网格)
3)。每个网格块的宽度应大致对应于 75 公里的距离(考虑到地球的曲率)。
4)。计算每个网格块的中心纬度/经度点
5)。对于每个网格块的中心点,针对单独的纬度/经度点数据库(代表兴趣点)运行搜索,以找到每个网格块最多 5 个最近的兴趣点。最远的兴趣点距离网格块中心不得超过 150 公里。
完成上述所有操作后,我应该得到一个网格块数据库及其对应的 5 个最近的兴趣点。
我希望然后我应该能够获取任何随机的经纬度点并计算(使用有效的数学公式)它属于哪个预先计算的网格块,从而能够立即返回 5 个最近的兴趣点无需进行任何昂贵的计算。
[注意:为清楚起见根据下面高性能标记的有用回复进行了编辑]
【问题讨论】:
-
我认为你想根据球坐标(两个角度的范围)定义你的正方形,这样它们的大小都差不多,并找到一种在球坐标和纬度和经度之间转换的方法。谷歌应该能够告诉你如何做到这一点,它可以很容易地判断哪个点在哪个正方形等中并测量距离等。
-
感谢海伦。我将首先探索高性能标记的想法,因为它似乎在我的能力范围内更多(“球坐标”的维基百科条目让我感到困惑......)
标签: php math latitude-longitude batch-processing geo