如何根据当前位置获取最近的地方(用户输入的)?

时间:2013-02-12 14:38:02

标签: java android google-maps location google-maps-android-api-2

我正在构建一个Android应用程序,用户可以根据当前位置查找最近的位置,并且还可以将位置添加到数据库中。我知道我将不得不在我的数据库中使用long和lat,但我真的不知道如何将当前位置与数据库中的位置进行比较。我怎么会搜索它,因为我可能需要经过整个数据库系统地拉出每个地理位置,然后将它与用户位置进行比较?

实施例: 假设用户已进入伦敦的10个地方和全球其他1000个地方,伦敦的一个人正在使用该应用程序,并希望根据他们当前的位置找到离他们最近的地方。我如何在数据库中的1000个其他地方中搜索这10个地方?执行distanceTo()1000次是不必要的。

任何建议,指南,教程,参考都会很棒。

提前致谢。

编辑:

到目前为止,这是我的想法。

获取可能已被搜索的位置的经度和纬度,当前位置或用户在屏幕上点击的位置。

使用所述位置的长/纬度 - 使用getFromLocation方法从反向地理编码获取地点的位置描述。

使用地点描述,根据地址字符串搜索数据库。

这就是我现在所拥有的,但这似乎并不可靠。给定位置的长/纬度,必须有一种更简单的方法来查询数据库,并返回最近点的完整列表。

2 个答案:

答案 0 :(得分:2)

如果您使用纬度和经度,这应该非常简单。假设个体的坐标大致为:49°N,2°E。

要查找1平方度纬度/经度的所有位置,您只需选择满足以下条件的所有位置:

  • 纬度> = 48°N且<= 50°N

..和..

  • 经度&gt; = 1°E且<= 3°E

答案 1 :(得分:0)

这很简单。

Wikipedia上有一张表格,说明1公里的十进制度数等。从Google接收到的坐标为十进制度

https://en.wikipedia.org/wiki/Decimal_degrees

如果您对如何计算等还有其他疑问,请问:)

基本上,您只需要检查位置纬度是否高于

currentLocationLatitude - rangeInDecimalDegrees

并且小于

currentLocationLatitude + rangeInDecimalDegrees