2013-08-11 11 views
12

Ciao ho bisogno di cal un evento a onchangelocation(), confrontando latitudine e longitudine correnti con un po 'di latitudine e longitudine salvate ma sto ricevendo un errore. eclipse non riconosce la distanza della parola chiave, e per errore di correzione sta dando un suggerimento al metodo della cassa "distanza" con 4 parametri ... come risolverlo ??? o qualche altro modo di fare lo stesso lavoro ???Confronto di due posizioni usando Longitudine e Latitudine

grazie e saluti. il codice è allegato sotto

@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

Hai bisogno di scrivere una distanza funzione, non esiste in Android. Si potrebbe anche voler controllare questo: http://developer.android.com/training/location/geofencing.html – Ran

+0

signore voglio semplicemente confrontare due valori di latitudine e longitudine. se abbinato, desidera chiamare un altro evento altro evento. c'è un altro modo semplice per farlo ... è il mio codice completo http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

quindi il problema del metodo di distanza. posterete la firma del metodo di distanza. – Sandeep

risposta

24

In realtà è necessario implementare una funzione chiamata distanza che calcola la distanza tra due posizioni. Calcolare la distanza tra due posizioni è un modo possibile di confrontare i valori di longitudine e latitudine.

Un esempio di confrontandoli:

@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

signore, voglio semplicemente confrontare due valori di latitudine e longitudine. se abbinato, desidera chiamare un altro evento altro evento. c'è un altro modo semplice per farlo ... questo è il mio codice completo http://stackoverflow.com/questions/18150929/how-to-call-event-depening-upon-latitide-and-longitude/18152841? Noredirect = 1 # 18152841 – user2590541

+0

Quindi dovresti esprimerti in quel modo e non usare una funzione chiamata distanza che non esiste. –

+0

ho provato ma ho degli errori ... puoi fare una codifica di esempio per questo scopo – user2590541

0

Tutti i parametri di ingresso 4 sono in float. La distanza è una distanza relativa non reale. È necessario convertire questa distanza ad una distanza reale con la ricerca on-line qualche formula :(Ho usato questo nella mia app per ottenere fermata metro più vicina dalla mia posizione attuale. Spero che questo aiuta qualcuno frammento :)

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

È possibile utilizzare static distanceBetween() il metodo della classe Location in questo modo:

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

Se si dispone di due Location oggetti, un'altra opzione è distanceTo()