0

我的数据库中有一个地点列表,它们都有纬度/经度。

在我的应用程序中,我得到了用户位置,我想获取距离他 100 米的所有地方。

为此,我将他的纬度和经度加 100 米

我试图做这样的事情:

    double radius = 100; // 100 meters

    double limitLatitudeNorth = latitude + radius;
    double limitLatitudeSouth = latitude - radius;

    double limitLongitudeWest = longitude - radius;
    double limitLongitudeEast = longitude + radius;

    StringBuffer query = "latitude < '" + limitLatitudeNorth + "' AND latitude > '" + limitLatitudeSouth + "' AND longitude < '" + limitLongitudeWest + "' AND longitude > '" + limitLongitudeEast + "'";

但是当然,经度和纬度不是米,所以我不知道如何求和。

公式是什么?我听说这取决于在全球的位置。假设我在法国。

很多应用程序都这样做(即:LINE)我以为我会很容易找到代码,但我没有:(

任何想法?

4

2 回答 2

0

对于纬度距离(通过两极形成一个大圆圈),那么 1 弧分 = 1 海里 = 1852 米(大约)。因此 1 度 = 111.12 公里

对于经度的变化,您需要将此因子乘以纬度的余弦。因此,在赤道,距离变化与纬度变化相同,在两极(cos 90 度 = 0)处,等经线都汇聚到一个点。

于 2013-10-21T11:24:29.067 回答
0

您可以在 Location 类中使用distanceTo方法。请执行下列操作:

Location location = new Location();
location.setLatitude(latitude);
location.setLongitude(longitude);

Location locationFromDB = new Location();
locationFromDB.setLatitude(latitudeFromDB);
locationFromDB.setLongitude(longitudeFromDB);

float dist = location.distanceTo(locationFromDB);
if(dist<100f){
     //do here your magic
}
于 2013-10-21T11:18:11.673 回答