2012-04-11 25 views
3

私は場所ベースのアプリケーションを作成しており、賢明なAPIの使い方について知恵を得たいと考えています。場所vs GeoPoint vs 1E6 vs課金

私がこれまで理解してきたことは、intを使って作業する方が効率的だということです。私はそれらの負荷を格納し、距離計算をたくさん行う必要があるでしょう。

時々私が必要私のアプリは、LocationListenerを実装するサービスを使用し、私はこのようにして算出(ormliteを介して)SQL DBの内部値(マイクロ度)intとして経度&緯度を格納しています::

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

私が特定の「場所」に戻ったときを知っていて、最新の場所の更新と比較するためにint値をdbからフェッチします。

質問:私の最新の位置情報更新では、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; 
     } 

私はこのように私のint型の値を渡して試してみました::((ダブル)myIntValue)/ 1E6F ザ・を返された距離の値は私を混乱させる。私が100m歩くと、私のアプリでは、Location.distanceTo(myLastLocation)を使って約100m行ったことが分かります。しかし、上記の方法を私の格納されたint値に対して使用すると、値ゼロが返されます。

誰かがE6フォーマットについて説明することができれば、それは素晴らしいものです。

1E6は1000000と同じですか?

また、このGeoPointクラスがあることがわかります。私はジオポイントの膨大な計算をGoogleが請求することになるのかどうか分かりませんので、これを使用することを躊躇しています。 GoogleMaps APIを使用すると料金に関する騒音があるようですが、その充電の仕組みを明確に説明することはできませんでした。

すべての知恵は喜んで受け取りました。

答えて

3

ちょうど私2cents:

1E6は1,000,000と同じです。ダブル1にあなたのint型の緯度/経度に変換するために

、あなただけ行うことができます。

(double)theLat/1E6; 

は、私はまた、あなたがLocationクラスのLocation.distanceBetweenメソッドを使用することをお勧めします。


GeoPointはアプリケーションに費用をかけることはありません。私はいつも使っています。 :-)

+0

あなたの考えをありがとう。私はそれを必要とするLocation.distanceTo(myLastLocation)を使用しているとうまくいきます。しかし、私が行う計算のほとんどはint値です。大部分は、GeoPointが私の友人であるように見えるintとして格納された緯度/経線ペアになります。 (これまでに費用がかかっていない限り) –

+0

私の答えがあなたが探していたものであれば、それを受け入れて、これが正解であることを他の人に知らせるようにしてください! – hwrdprkns