私は場所ベースのアプリケーションを作成しており、賢明な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を使用すると料金に関する騒音があるようですが、その充電の仕組みを明確に説明することはできませんでした。
すべての知恵は喜んで受け取りました。
あなたの考えをありがとう。私はそれを必要とするLocation.distanceTo(myLastLocation)を使用しているとうまくいきます。しかし、私が行う計算のほとんどはint値です。大部分は、GeoPointが私の友人であるように見えるintとして格納された緯度/経線ペアになります。 (これまでに費用がかかっていない限り) –
私の答えがあなたが探していたものであれば、それを受け入れて、これが正解であることを他の人に知らせるようにしてください! – hwrdprkns