我目前正在尝试构建一个应用,用户在靠近标记时会收到通知,或者在我的情况下,我正在使用Osmdroid的ItemizedOverlay,我想知道是否有办法做到这一点数百个标记,而不会在几分钟内耗尽电池。 我看到了一些方法,但是当您只有几个标记时,所有方法都适用。 如果有人可以帮助我,我将非常高兴。
答案 0 :(得分:1)
为补充@Barns的回答,有2条评论:
,您无需编写自己的getDistanceMeters,因为GeoPoint已经拥有 此方法:
GeoPoint.distanceToAsDouble(其他最终IGeoPoint)
答案 1 :(得分:0)
如果标记具有静态位置,则无需重复加载它们。
如果您只想计算地球上两点之间的距离,并且具有经度和纬度坐标,则不需要任何Google API的地图或其他库。这只是额外的开销和维护成本。只需像这样创建一个静态方法:
public static double getDistanceMeters(LatLng pt1, LatLng pt2){
double distance = 0d;
try{
double theta = pt1.longitude - pt2.longitude;
double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
+ Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude)) * Math.cos(Math.toRadians(theta));
dist = Math.acos(dist);
dist = Math.toDegrees(dist);
distance = dist * 60 * 1853.1596;
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
return distance;
}
然后您可以执行以下操作:
public static boolean checkDistanceIsClose(LatLng pt1, LatLng pt2, double distance){
boolean isInDistance = false;
try{
double calcDistance = getDistanceMeters(pt1, pt2)
if(distance <= calcDistance){
isInDistance = true;
}
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
return isInDistance;
}
相同的算法适用于任何平台。只需将其翻译为适当的程序语言即可。