地理邻近搜索

时间:2009-03-09 12:27:47

标签: php mysql google-maps

应用程序中有要求规定将所有与特定国家/地区和/或城市绑定的对象都发现到谷歌地图中。

我们有使用谷歌地图api预先教育相应纬度和经度的对象并存储在数据库中。有时这些对象提供具有特定服务范围/半径的服务,在这些服务范围内可以提供服务。

例如现在情况就像我想找出所有的物体 例如,它居住在阿姆斯特丹。

应用程序应找出所有对象 阿姆斯特丹,也是不完全位于阿姆斯特丹的物品 但附近,服务范围可达阿姆斯特丹。

所以我知道阿姆斯特丹的纬度,经度值 谷歌地图,也有具有相应的lat,lng值和的对象 存储在数据库中的服务范围/半径。我怎么能让它成为可能?

4 个答案:

答案 0 :(得分:2)

您可能应该将国家/城市表示为数据库中的多边形,然后使用OpenGIS样式的多边形交叉函数进行交叉。

,MySQL 正确实现多边形交集(仅MBR - 最小边界矩形)。所以这种方法虽然在理论上是正确的,但对于MySQL来说根本不适用。你可能想考虑搬到Postgres。

你可以做的是使用你的数据库的MBR交集功能,并用你自己的代码进行补充,这些代码执行多边形/点交叉(你可以找到执行此操作的库)。

答案 1 :(得分:1)

您可能想看看MySQL的spatial extensions

您需要使用Contains功能。但是,正如保罗在评论中所说,区域应该表示为多边形。如果不是,那么我相信你最好的办法是创建一个以你已经拥有的点为中心的多边形。

答案 2 :(得分:1)

确定从我的理解你基本上是在尝试计算2个纬度/长点之间的距离。我首先要打折那些在你外面(比方说)10英里的地方。因此,从您的中心点开始,您将需要获得10英里,东,西,南和北的坐标。为此,您需要使用Great-circle distance公式。

从那时起,如果您希望进一步打破这些数据,那么您就拥有数据,然后您需要按距离中心点的距离对点进行排序。为此,您需要使用Haversine formula

我可以看到你有一个PHP标签,但我在SQL(主要)和C#中都包含了一些公式和例子。

Haversine Formula in C# and in SQL

Determine the distance between ZIP codes using C#

Great Circle SQL

Great Circle 2

答案 3 :(得分:1)

如果您想留下与外部服务接近的机制,您还可以查看LocalSolr / LocalLucene之类的内容。