我写的基于应用程序的位置,并希望得到合理的对API使用一些智慧。位置VS的GeoPoint VS 1E6 VS充电
什么我目前了解的是,与诠释的工作更有效率。我将需要存储它们的负载,并做大量的距离计算。
我的应用程序使用实现LocationListener的一个服务,我存储经度纬度&像int这样计算::
public static int degreesToMicroDegrees(double degrees){
return (int)(degrees * 1E6);
}
有时我需要一个SQL分贝(经由ormlite)的内部值(微度)知道什么时候我已经返回到特定的“位置”,因此我将int值从数据库中取出以与最新的位置更新进行比较。
问题是,什么是我的最新位置更新中的int值(其中我曾经是)和双值(其中我现在)之间的比较,“位置”的最佳方式?
找遍了周围的一些数学来完成的距离计算,发现这个::
public static double distanceBetween(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
我试图通过我的国际价值在这样的:((双)myIntValue)/ 1E6F 的返回的距离值让我感到困惑。如果我走100米,我的应用程序明智地告诉我,我已经使用Location.distanceTo(myLastLocation)走了约100米。但是,如果我使用上面的方法对我存储的int值,我会返回零值。
如果任何人都可以解释E6格式,将是巨大的。
1E6相同1000000?
此外,我可以看到有这样的GeoPoint类。我很犹豫如何使用它,因为我不清楚Google是否会对GeoPoints进行大量计算。 GoogleMaps API的使用收费似乎存在一些噪音,我一直无法找到关于如何收费的明确解释。
感谢所有的智慧。
感谢您的想法。我使用Location.distanceTo(myLastLocation),当我需要它,并且工作正常。然而,我所做的大部分计算都在int值上。绝大多数将在经纬度上存储为整数,看起来像GeoPoint是我的朋友。 (只要没有涉及费用) – 2012-04-11 07:17:44
如果我的答案是你正在寻找的东西,一定要接受它,让别人知道这是一个正确的答案! – hwrdprkns 2012-04-19 06:51:55