web-dev-qa-db-ja.com

経度と緯度を使用して2つの場所を比較する

こんにちは、現在の緯度と経度を保存されている緯度と経度と比較して、onchangelocation()でイベントを計算する必要がありますが、エラーが発生します。 Eclipseはキーワードの距離を認識していません。修正エラーの場合、4つのパラメーターを持つ「距離」をクレートする方法にヒントを与えています...どのように修正するのですか?または同じ作業を行う他の方法???

よろしくお願いいたします。コードは以下に添付されています

@Override
public void onLocationChanged(Location location) {
 double currentLat=location.getLatitude();
 double currentLon=location.getLongitude();

    if (distance(lat,lon,currentLat,currentLon)<2.0){
 //do what you want to do...
  }
}
16
user2590541

実際には、2つの場所の間の距離を計算する距離と呼ばれる関数を実装する必要があります。 2つの場所間の距離を計算することは、経度と緯度の値を比較する1つの可能な方法です。

それらを比較する例:

@Override
public void onLocationChanged(Location location) {

 double lat2 = location.getLatitude();
 double lng2 = location.getLongitude();

    // lat1 and lng1 are the values of a previously stored location
    if (distance(lat1, lng1, lat2, lng2) < 0.1) { // if distance < 0.1 miles we take locations as equal
       //do what you want to do...
    }
}

/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist; // output distance, in MILES
}
34
Philipp Jahoda

Locationクラスの静的 distanceBetween() メソッドを次のように使用できます。

_    float[] distance = new float[1];
    Location.distanceBetween(lat, lon, currentLat, currentLon, distance);
    // distance[0] is now the distance between these lat/lons in meters
    if (distance[0] < 2.0) {
        // your code...
    }
_

2つのLocationオブジェクトがある場合、別のオプションは distanceTo() です。

12
yuval

4つの入力パラメーターはすべて浮動小数点です。距離は、実際の距離ではなく相対的な距離です。オンラインで数式を検索して、この距離を実際の距離に変換する必要があります。

float distance(float lat,float lon,float clat,float clon)
{
    float distance;
    float temp1;
    float temp2;
    temp1=(float)((lat-clat)*(lat-clat));
    temp2=(float)((lon-clon)*(lon-clon));
    distance=temp1+temp2;
    return distance;
}
0