2013-08-11 9 views
12

Hallo, ich muss ein Ereignis bei onchangelocation() berechnen, indem ich den aktuellen Breiten- und Längengrad mit einem gespeicherten Breiten- und Längengrad vergleiche, aber einen Fehler erhalte. Eclipse erkennt keine Schlüsselwortdistanz, und für einen Korrekturfehler gibt es einen Hinweis auf die Kistenmethode "distance" mit 4 Parametern ... wie man es repariert ??? oder eine andere Möglichkeit, die gleiche Arbeit zu machen ???Vergleichen zweier Orte mit Längen- und Breitengrad

danke und grüße. Code ist unterhalb

@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... 
    } 
} 
+2

Sie benötigen eine Funktion Abstand zu schreiben, es existiert nicht in Android. Sie können dies auch überprüfen: http://developer.android.com/training/location/geofencing.html – Ran

+0

Herr ich möchte einfach zwei Breiten- und Längenwerte vergleichen. Wenn sie übereinstimmen, dann möchten Sie ein Ereignis oder ein anderes Ereignis aufrufen. gibt es eine andere einfache Möglichkeit, das zu tun ... das ist mein vollständiger Code http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

so ist es das Problem der Distanzmethode. werden Sie die Signatur der Entfernungsmethode posten? – Sandeep

Antwort

24

Sie müssen tatsächlich eine Funktion namens Abstand implementieren, die den Abstand zwischen zwei Standorten berechnen wird. Die Berechnung der Entfernung zwischen zwei Orten ist eine Möglichkeit, die Längen- und Breitengrade zu vergleichen.

Ein Beispiel von ihnen zu vergleichen:

@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 
} 
+0

sir Ich möchte einfach zwei Breiten- und Längenwerte vergleichen. Wenn sie übereinstimmen, dann möchten Sie ein Ereignis oder ein anderes Ereignis aufrufen. gibt es eine andere einfache Möglichkeit, das zu tun ... das ist mein vollständiger Code http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

Dann sollten Sie sich so ausdrücken und nicht eine Funktion namens distance verwenden, die nicht existiert. –

+0

Ich habe versucht, aber bekam Fehler ... können Sie eine Probe Codierung für diesen Zweck tun – user2590541

0

Alle 4 Eingangsparameter in Schwimmers sind. Entfernung ist eine relative nicht reale Entfernung. Sie müssen diesen Abstand zu einem echten Abstand konvertieren, indem eine Formel der Suche online :(Ich habe dies in meinem App nächste U-Bahn-Station von meinem aktuellen Standort zu erhalten. Hoffen, dass dieser Schnipsel hilft jemand :)

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

Sie verwenden können die statische des Location Klasse distanceBetween() Methode wie folgt:

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

Wenn Sie zwei Location Objekte haben, eine weitere Option ist distanceTo()