Android:如何以纬度/经度位置为中心查找纬度和经度范围?

时间:2012-02-20 17:18:19

标签: android geolocation

我有一个不同位置的数据集,并希望显示最近的位置(5公里内)。

如何确定纬度和经度的最小值/最大值?

f.e。:我需要把车开满,我正在寻找附近的所有加油站,所以我可以去最近的。如何在Android手机上执行此操作?

我想避免遍历所有位置,因为我有大约2500个位置并且正在上升。有什么建议吗?

先谢谢你们提出这方面的建议!

更新 感谢您给我的反馈,我通过迭代服务器上的所有位置并使用Google Distance Matrix API计算距离来解决我的问题:http://code.google.com/intl/nl/apis/maps/documentation/distancematrix/

3 个答案:

答案 0 :(得分:2)

简化,纬度是赤道上方/下方的角度,经度是格林威治子午线的右/右角度。

因此,要计算(平均)1º纬度是多少,您将其转换为radians (multiply by PI/180),然后乘以Earth's mean radius (6,371.0 km)

对于你的问题,过程是逆过程:取5公里并将其转换为度数:

  1. 按地球半径划分
  2. 乘以180 / PI
  3. 通过这种方式,您将获得 delta 度,即多少度为5公里(平均而言,如果您需要精确度,则需要精确的地球半径差异超过5公里)你可以围绕给定的位置建立一个圆圈(就像compass那样)。

答案 1 :(得分:0)

所有的计算方法都是近似值,但是在您所需要的公差范围内。

地球周长约为40076000米。

每个纬度的行进距离总是相同的,并且只是地球的一部分。

每度经度的距离旅行但是会根据你的纬度而变化(全球范围内的这个环越接近两极)。

因此对于给定距离m,相应的纬度和经度值

earthcirc = 40076000;
// at Lat and Lon for distance m (in meters)
LatDelta = (m * 360) / earthcirc;
LonDelta = (m * 360) / abs(eathcirc*cos(lat));

这为您提供了方形纬度较长的增量,可以简单搜索数据。但是对于一个候选人你应该做一个完整的距离计算,因为广场的角落距离超过5公里。

2纬度/长度之间的距离

distLat = (lat1-lat2) * earthcirc) / 360;
distLong = (long1-long2) * earthcirc * cos((lat1+lat2)/2) / 360;
dist = sqrt( sqr(distLat) + sqr(distLong) );

我知道大多数编译器/语言都使用弧度来表示cos / sin函数,但它更容易用度来解释。

对于搜索数据,最简单的方法是订购lat或long,然后你可以进行二进制搜索,找到可以检查的位置而不是完整扫描。有更好的方法来订购数据(四树),但对于2500个ish条目,我不会打扰

答案 2 :(得分:0)

这里有两个问题,1)如何计算两对lat / lon之间的距离和2)如何找到距给定点最短距离的点。

  1. 网上有公式,有些公式比其他公式更精确,例如http://www.movable-type.co.uk/scripts/latlong.html

  2. 这是(地理)空间索引问题(http://en.wikipedia.org/wiki/Spatial_index#Spatial_Index)。你可以使用例如一个四元树,其中lat / lng为X / Y(我假设你的点与极点不太接近,这使事情变得复杂但仍然可行)。通过四叉树,您可以在Log(N)时间内找到汽车附近区域,而无需迭代所有点。

  3. 不是确切的代码,但希望它会有所帮助。