我正在开发一个应用程序,它会显示位于用户当前位置半径50米范围内的“事件”。我会从在线数据库中获取这些事件。这些事件包含LatLng和DB中的地址。
我已经实施了位置更新。
我的问题是,哪种方法会更好?
一种方法:
我使用addCircle
在当前位置绘制圆圈。然后在当前位置更改时删除并重绘这些圆圈。
关于这一点的困难之处在于我如何获得50米内的位置或纬度/拉力。
然后我会查询我的数据库并返回我的事件。
我考虑的另一种方法是Geofences。我现在还在研究它。 也许我会在当前位置绘制地理围栏并根据需要更新它。
答案 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