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

Android:如何以纬度/经度位置为中心查找纬度和经度范围?,android,geolocation,Android,Geolocation,我有一个不同位置的数据集,希望显示最近的位置(5公里以内) 如何确定纬度和经度的最小值/最大值 f、 我需要给我的车加满油,我正在找附近所有的加油站,这样我就可以去最近的加油站了。如何在安卓手机上实现这一点 我也不想重复所有的位置,因为我有大约2500个位置,而且还在上升。有什么建议吗 提前感谢你们的建议 更新: 谢谢你们给我的反馈,我通过迭代服务器上的所有位置并使用谷歌距离矩阵API来计算距离,从而解决了我的问题:简化,纬度是赤道上方/下方的角度,经度是格林威治子午线的右/左角度 因此,要计算

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

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

f、 我需要给我的车加满油,我正在找附近所有的加油站,这样我就可以去最近的加油站了。如何在安卓手机上实现这一点

我也不想重复所有的位置,因为我有大约2500个位置,而且还在上升。有什么建议吗

提前感谢你们的建议

更新:
谢谢你们给我的反馈,我通过迭代服务器上的所有位置并使用谷歌距离矩阵API来计算距离,从而解决了我的问题:

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

因此,要计算(平均)纬度是多少,例如1º纬度,您将其转换为,然后乘以

对于您的问题,过程是相反的:走5公里,将其转换为度:

  • 除以地球的半径
  • 乘以180/PI

  • 通过这种方式,你将得到delta度,也就是说,有多少度是5公里(平均来说,如果你想要精确,你将需要精确的地球半径差超过这5公里),你可以用它围绕给定的位置建立一个圆(就像.

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

    地球周长约为40076000米

    每度纬度的旅行距离都是相同的,只是地球圈的一部分

    然而,每度经度的旅行距离随纬度的不同而变化(地球仪上的光环越靠近两极越小)

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

    earthcirc = 40076000;
    // at Lat and Lon for distance m (in meters)
    LatDelta = (m * 360) / earthcirc;
    LonDelta = (m * 360) / abs(eathcirc*cos(lat));
    
    这将为您提供方形lat-long delta,用于简单的数据搜索。但是在fingin上,你应该做一个完整的距离计算,因为广场的一角距离5公里多一点

    两个横向/纵向之间的距离

    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条目,我不想费心了,这里有两个问题,1)如何计算两对lat/lon之间的距离,2)如何找到距离给定点最短的点

  • 网上有一些公式,例如,有些公式比其他公式更精确

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


  • 不是精确的代码,但希望能有所帮助。

    有没有办法知道某个纬度的确切地球半径是多少?某种类型的站点或API?你指的是具体位置(lat/long)。实际上,这一差异只能是+-20公里,与6371公里相比,这一差异可以忽略不计(误差为+-0.003%)。无论如何,您可以检查GPS提供的高度参数,或者。谢谢!我用Google DistanceMatrix API解决了我的问题:很高兴它起作用了。记住选择对你有用的答案;)请注意,在一小圈纬度上移动不会提供最小和最大经度。看见