基于坐标的搜索

时间:2011-02-23 15:31:02

标签: java sql search geocoding latitude-longitude

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

所以我有一组带坐标的活动,我想在附近找到活动的点的坐标,我想要返回的活动不超过5公里(或英里或任何你喜欢的)远离这一点。

我有这个想法,我可以通过计算最大/最小纬度和经度来解决这个问题,并在sql-query中使用这些作为参数,我使用where子句进行过滤...问题我m面向这里首先计算这些最大/最小值,其次是圆形区域(半径5km),而不是矩形

非常感谢这里的任何输入! 感谢:!)

3 个答案:

答案 0 :(得分:2)

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

如果你有很多分数,直接穷举搜索会变得太慢,无论是否为球形。幸运的是,GIS扩展程序同时提供for MySQLfor Postgres。商业DB也具有空间扩展。这些可以有效地搜索附近的对象。

答案 1 :(得分:1)

  • 计算边界纬度和经度。
  • 选择纬度介于两个值之间的所有内容,同样选择经度。如果您没有使用空间索引,请注意球体上的边缘情况(最优秀的双关语!):交叉0度,90度或180度可能会导致不可能的标准。
  • 在SQL服务器或应用中,根据结果执行Haversine公式。您必须具有矩形边界值以防止表扫描,但矩形中的结果将包括圆圈外的结果。

如果你真的停下来思考它,你的矩形和圆圈都是畸形的......但这无论如何都不相关。

另外,请查看此内容,这将扩展距离测量并提及其他一些想法:http://www.movable-type.co.uk/scripts/gis-faq-5.1.html

答案 2 :(得分:1)

希望这可以帮到你。

Get nearest places on Google Maps, using MySQL spatial data

然而,这是MySQl查询。您可以将其转换为您的要求。