2012-04-11 70 views
3

我写的基于应用程序的位置,并希望得到合理的对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的使用收费似乎存在一些噪音,我一直无法找到关于如何收费的明确解释。

感谢所有的智慧。

回答

3

只是我的2分:

1E6和1,000,000一样。

要将INT纬度/经度转换为双的,你可以这样做:

(double)theLat/1E6; 

我也建议你使用Location类的Location.distanceBetween方法。


GeoPoint不会为您的应用程序承担任何费用。我用它所有的时间。 :-)

+0

感谢您的想法。我使用Location.distanceTo(myLastLocation),当我需要它,并且工作正常。然而,我所做的大部分计算都在int值上。绝大多数将在经纬度上存储为整数,看起来像GeoPoint是我的朋友。 (只要没有涉及费用) – 2012-04-11 07:17:44

+0

如果我的答案是你正在寻找的东西,一定要接受它,让别人知道这是一个正确的答案! – hwrdprkns 2012-04-19 06:51:55