2011-02-23 56 views
1

我正在开发一个网页,用户可以创建活动,其他人可以通过搜索功能找到它们。当你创建一个活动,你必须指定它将发生的确切位置,谷歌地图协助我检索经度和纬度。现在,当进行搜索时,我希望能够找到接近指定位置的所有活动(也可以通过Google地图进行协助)。坐标为基础的搜索

因此,我有一组活动的坐标,我想在附近找到活动的点的坐标,并且我想返回不超过5公里(或者英里或任何您喜欢的活动)远离这一点。

我在脑海中有这个想法,这可以通过计算最大/最小经纬度来解决,并使用这些参数作为SQL查询中的参数,其中我使用where子句进行过滤......问题I在这里面临的首先是计算这些最大/最小值,其次是在一个圆形区域(半径5km),而不是一个长方形,请点击这里! 谢谢!:)

回答

2

你得到的坐标可能不是x和y,而是经度和纬度;除非所有点都在相当小的范围内,否则您将需要spherical distance。几百英里。

如果你有很多点,直接穷举搜索变得太慢,球形或不。幸运的是,GIS扩展可用for MySQLfor Postgres。商业数据库也有空间扩展。这些可以搜索附近的物体。

1
  • 计算边界纬度和经度。
  • 选择这里的一切纬度是你的两个值之间为,同样的经度。如果您不使用空间索引,请小心球体上的边缘情况(最好的双关语!):穿过0度,90度或180度可能会导致不可能的标准。
  • 无论是在您的SQL服务器还是您的应用程序中,都可以根据您的结果执行Haversine公式。您必须具有矩形边界值才能防止表扫描,但矩形中的结果将包含圆以外的结果。

如果你真的停下来考虑一下,你的矩形和你的圈子都是畸形的......但这不是真的有关。

而且,看看这个,这将扩大对距离测量和提一些其他的想法:http://www.movable-type.co.uk/scripts/gis-faq-5.1.html