在当前位置的半径内获取地址或LatLng

时间:2015-03-28 03:38:32

标签: android google-maps parsing

我正在开发一个应用程序,它会显示位于用户当前位置半径50米范围内的“事件”。我会从在线数据库中获取这些事件。这些事件包含LatLng和DB中的地址。

我已经实施了位置更新。

我的问题是,哪种方法会更好?

一种方法:

我使用addCircle在当前位置绘制圆圈。然后在当前位置更改时删除并重绘这些圆圈。

关于这一点的困难之处在于我如何获得50米内的位置或纬度/拉力。

然后我会查询我的数据库并返回我的事件。

我考虑的另一种方法是Geofences。我现在还在研究它。 也许我会在当前位置绘制地理围栏并根据需要更新它。

2 个答案:

答案 0 :(得分:3)

public static LatLng getLocation(double lon, double lat, int radius) 
{
    Random random = new Random();

    // Convert radius from meters to degrees
    double radiusInDegrees = radius / 111000f;

    double u = random.nextDouble();
    double v = random.nextDouble();
    double w = radiusInDegrees * Math.sqrt(u);
    double t = 2 * Math.PI * v;
    double x = w * Math.cos(t);
    double y = w * Math.sin(t);

    // Adjust the x-coordinate for the shrinking of the east-west distances
    double new_x = x / Math.cos(lat);

    double foundLongitude = new_x + lon;
    double foundLatitude = y + lat;
    System.out.println("Longitude: " + foundLongitude + "  Latitude: "
            + foundLatitude);

    return new LatLng(foundLatitude, foundLongitude);

}

然后调用你想要的功能。 :)

private LatLng latlon1;

    latlon1 = getLocation(location.getLongitude(),location.getLatitude(),50);

- > location =您当前的位置
- > 50 =半径你想要的东西

希望你得到答案:)

答案 1 :(得分:0)

您需要一个名为

的功能
InRadius(centerX, centerY, radius, x, y) 
{
Return (radius * 111000f) >= sqrt((x-centerX )^2 +(y-centerY) ^2) 
} 

中心是用户位置。但是你必须调用事件表中的每个记录,将lat转换为y,将long转换为x