位置vs GeoPoint vs 1E6 vs Charging

时间:2012-04-11 01:16:52

标签: android

我正在编写一个基于位置的应用程序,并希望在合理的API使用方面获得一些智慧。

到目前为止我所理解的是使用int更有效。我将需要存储它们的负载并进行大量的距离计算。

我的应用使用了一个实现LocationListener的服务,我正在存储经度&纬度为SQL db(通过ormlite)内部的int值(微度),因此计算::

public static int degreesToMicroDegrees(double degrees){
    return (int)(degrees * 1E6);
}

有时我需要知道何时返回特定的“位置”,因此我从数据库中取回int值以与最新的位置更新进行比较。

问题是,在我最新的位置更新中比较int值(我以前在哪里)和double值(我现在的位置)之间的'location'的最佳方法是什么?

我搜索了一些数学来完成距离计算,发现了这个::

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; 
        } 

我试过像这样传递我的int值::((double)myIntValue)/ 1E6F 返回的距离值令我困惑。如果我走100米我的应用程序明智地告诉我,我已经使用Location.distanceTo(myLastLocation)走了大约100米。但是如果我对上面存储的int值使用上面的方法,我会得到零值。

如果有人能解释E6格式会很棒。

1E6与1000000相同?

此外,我可以看到有这个GeoPoint类。我对使用它犹豫不决,因为我不清楚是否会对Google收取大量的GeoPoints计算费用。关于使用GoogleMaps API的收费似乎存在一些噪音,我无法找到有关收费如何运作的明确解释。

感激所有的智慧。

1 个答案:

答案 0 :(得分:3)

只是我的2点:

1E6与1,000,000相同。

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

(double)theLat/1E6;

我还建议您使用Location类的Location.distanceBetween方法。


GeoPoint不会为您的申请产生任何费用。我用它所有的时间。 : - )