【问题标题】:Android:How to find latitude and longitude range with a lat/lon location as center?Android:如何以纬度/经度位置为中心查找经纬度范围?
【发布时间】:2012-02-24 00:23:54
【问题描述】:

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

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

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

我也想避免遍历所有位置,因为我有大约 2500 个位置并且还在不断增加。对此有何建议?

提前感谢各位对此的建议!

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

【问题讨论】:

    标签: android geolocation


    【解决方案1】:

    简单来说,纬度是赤道上/下的角度,经度是格林威治子午线的右/左角。

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

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

    1. 除以地球半径
    2. 乘以 180/PI

    这样您将获得 delta 度,即 5 公里是多少度(平均而言,如果您想要精确度,您将需要这 5 公里上的确切地球半径差异)您可以在给定位置周围建立一个圆圈(就像 compass 一样)。

    【讨论】:

    • 有没有办法知道某个纬度的确切地球半径是多少?某种网站或 API?
    • 你的意思是在一个具体的位置(纬度/经度)。真正的差异只能是 +-20 公里,与 6,371 公里相比可以忽略不计(这是 +-0.003% 的误差......)。无论如何,您可以查看 GPS 提供的高度参数,或this Google API
    • 谢谢!我使用 Google DistanceMatrix API 解决了我的问题:code.google.com/intl/nl/apis/maps/documentation/distancematrix
    • 很高兴它成功了。记得选择适合你的答案;)
    • 请注意,在小纬度圈上移动不会提供最小和最大经度。见janmatuschek.de/LatitudeLongitudeBoundingCoordinates
    【解决方案2】:

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

    地球周长约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 函数,但它很容易以度数来解释。

    至于搜索您的数据,最简单的方法是按纬度或经度排序,然后您可以进行二进制搜索以找到可能的位置进行检查,而不是全盘扫描。有更好的方法来排序数据(四叉树),但对于 2500 个 ish 条目,我不会打扰

    【讨论】:

      【解决方案3】:

      这里有两个问题,1)如何计算两对纬度/经度之间的距离和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) 时间内找到您汽车的附近区域,而无需遍历所有点。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 2012-09-07
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多