Autore Topic: Indirizzo a partire da Latitudine e Longitudine  (Letto 4102 volte)

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Indirizzo a partire da Latitudine e Longitudine
« il: 15 Marzo 2011, 18:43:43 CET »
0
Ciao ragazzi avrei bisogno nuovamente del vostro aiuto. Sto sviluppando una applicazione che ha bisogno di visualizzare sempre in primo piano la posizione corrente. Ora dal GPS grazie a metodi di GET sono capace di ricavare LOTITUDINE E LONGITUDINE corrente ma avrei bisogno di convertire questi due valori in un indirizzo effettivo.

Vi ringrazio in anticipo per l'aiuto^_^

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #1 il: 15 Marzo 2011, 19:22:12 CET »
0
Il processo di cui parli si chiama reverse geocoding.

Mai provata, ma c'è una classe apposita: Geocoder | Android Developers

Citazione
A class for handling geocoding and reverse geocoding. Geocoding is the process of transforming a street address or other description of a location into a (latitude, longitude) coordinate. Reverse geocoding is the process of transforming a (latitude, longitude) coordinate into a (partial) address. The amount of detail in a reverse geocoded location description may vary, for example one might contain the full street address of the closest building, while another might contain only a city name and postal code. The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform. Use the isPresent() method to determine whether a Geocoder implementation exists.

Leggo adesso per la prima volta due righe di codice che lo usano:
Codice (Java): [Seleziona]
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #2 il: 15 Marzo 2011, 19:33:51 CET »
0
Grazie ^^ lo provo subito

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #3 il: 15 Marzo 2011, 19:38:38 CET »
0
La cosa tra l'altro è stra-discussa, dai un occhio agli snippet la prossima volta ;)

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #4 il: 15 Marzo 2011, 19:47:31 CET »
0
Hai ragione non ci ho pensato..scusate ^_^. La prox volta prima cercherò e poi casomai posterò. :-[

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #5 il: 17 Marzo 2011, 14:20:47 CET »
0
Ragazzi ho provato il codice che mi avete postato ma non va :

Codice: [Seleziona]
public class GPS_Pos extends Activity {
    private LocationManager lm;
    private TextView tvLatitudine;
    private TextView tvLongitudine;
    Geocoder myLocation ;
   /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Lat_Log();
    }
    private void Lat_Log(){
       
        tvLatitudine = (TextView)this.findViewById(R.id.tvLatitudine);
                tvLongitudine = (TextView)this.findViewById(R.id.tvLongitudine);

       lm=(LocationManager)this.getSystemService(LOCATION_SERVICE);
       lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 10, new LocationListener(){
       public void onLocationChanged(Location location) {           
               String lat=Double.toString(location.getLatitude());
               String lng=Double.toString(location.getLongitude());
               
                      tvLatitudine.setText(Double.toString(getRound(location.getLatitude(), 5)));
                            tvLongitudine.setText(Double.toString(getRound(location.getLongitude(), 5)));
                           
                            Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
                            List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); // nn legge  getFromLocation

                   
               }
           
               public double getRound(double x, int digits){
                                        double powerOfTen = Math.pow(10, digits);
                                        return ((double)Math.round(x * powerOfTen) / powerOfTen);
               }
               
                                public void onProviderDisabled(String provider) {
                    Log.d("a","onProviderDisabled: " +provider); 
               }
             
               public void onProviderEnabled(String provider) {
                    Log.d("a","onProviderEnabled: " +provider);
               }

               public void onStatusChanged(String provider, int status,Bundle extras) {
                    Log.d("a","onStatusChanged: " +provider + status);   
               }
         
       });
    }

}

Potreste darmi una mano per capire il perchè?

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #6 il: 17 Marzo 2011, 15:26:24 CET »
0
Per favore, usa i tag code java per postare il "codice java"



Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #7 il: 17 Marzo 2011, 16:18:30 CET »
0
Ragazzi ho provato il codice che mi avete postato ma non va :

La descrizione dei sintomi è un po' troppo troppo generica.

Dovresti scrivere di preciso cosa non va ed anche cosa va, così da escludere parti di codice corretto e concentrarsi su altro. Poi comincia a mettere un po' di Log.d lungo il percorso di esecuzione che ti aspetti, facendo uscire i risultati intermedi, così poi lo alleghi nel forum, perchè se anche 99 persone non ci vedono niente di anormale, la centesima magari si rende conto di dove è il problema.

Infine, come dice Qlimax, non formattare il codice Java con , ma con .

PS: Non ho mai usato le mappe su Android, ma rileggendo la mia precedente risposta, non a caso avevo evidenziato questa frase: Use the isPresent() method to determine whether a Geocoder implementation exists.. Non mi sembra di vederlo nel codice, magari non serve a niente, però penso sia buona norma inserirlo, dato che viene consigliato.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #8 il: 17 Marzo 2011, 16:25:33 CET »
0
scusa ho copiato il codice sbagliato  rimedio subito.Scusami ancora
« Ultima modifica: 17 Marzo 2011, 16:55:32 CET da caos »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #9 il: 17 Marzo 2011, 16:53:42 CET »
0
Confesso che mi sono perso: quest'ultimo codice è un altro problema o ha sempre a che vedere con il discorso iniziale del GeoCoder?  o_O

Edit: ah ecco, lo hai tolto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #10 il: 17 Marzo 2011, 16:56:37 CET »
0
Eccolo qui :

Codice (Java): [Seleziona]
public class GPS_Pos extends Activity{
   private LocationManager lm;
    private TextView tvLatitudine;
    private TextView tvLongitudine;
 

   
    Geocoder myLocation ;
   /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Lat_Log();
    }
    private void Lat_Log(){
       
        tvLatitudine = (TextView)this.findViewById(R.id.tvLatitudine);
                tvLongitudine = (TextView)this.findViewById(R.id.tvLongitudine);

       lm=(LocationManager)this.getSystemService(LOCATION_SERVICE);
       lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 10, new LocationListener(){
       public void onLocationChanged(Location location) {          
                   
                   Double lat=location.getLatitude()*1E6;
                   Double lng=location.getLongitude()*1E6;
                   
                  Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
                  try {
                                List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
                                Toast.makeText(GPS_Pos.this, addresses.toString(), Toast.LENGTH_LONG).show();
                        } catch (IOException e) {
                                Log.e("TAG", "Impossible to connect to Geocoder", e);
                        }
                       
                           
                   
               }
           
                             
                                public void onProviderDisabled(String provider) {
                    Log.d("a","onProviderDisabled: " +provider);  
               }
             
               public void onProviderEnabled(String provider) {
                    Log.d("a","onProviderEnabled: " +provider);
               }

               public void onStatusChanged(String provider, int status,Bundle extras) {
                    Log.d("a","onStatusChanged: " +provider + status);  
               }
         
       });
    }

}

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #11 il: 27 Marzo 2011, 20:39:46 CEST »
+1
io ho fatto che al touch di un punto della mappa mi da l'indirizzo in una textview in alto. ti posto il mio codice, vedi se ti può tornare utile:
Codice (Java): [Seleziona]
public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
               
                Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
               
                try {
                    List<Address> addresses = gc.getFromLocation(p.getLatitudeE6() / 1E6,
                                                                 p.getLongitudeE6() / 1E6, 10);
                   
                    String add = "";
                    if (addresses.size() > 0)
                    {
                        Address address = addresses.get(0);
                        StringBuilder sb = new StringBuilder();
                    sb.append(address.getAddressLine(0) + ", ");
                    sb.append(address.getAddressLine(1));
                    add = sb.toString();
                    }
                   
                  txt_indirizzo.setText("Ti trovi in " + add);
                   
                } catch (IOException e) {
                    e.printStackTrace();
                }
           
                mapController.animateTo(p);
                mapView.invalidate();
            }
            return true;
        }

;)

Offline riccardofarris

  • Utente junior
  • **
  • Post: 71
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #12 il: 01 Giugno 2011, 11:06:21 CEST »
0
io ho fatto che al touch di un punto della mappa mi da l'indirizzo in una textview in alto. ti posto il mio codice, vedi se ti può tornare utile:
Codice (Java): [Seleziona]
public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
               
                Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
               
                try {
                    List<Address> addresses = gc.getFromLocation(p.getLatitudeE6() / 1E6,
                                                                 p.getLongitudeE6() / 1E6, 10);
                   
                    String add = "";
                    if (addresses.size() > 0)
                    {
                        Address address = addresses.get(0);
                        StringBuilder sb = new StringBuilder();
                    sb.append(address.getAddressLine(0) + ", ");
                    sb.append(address.getAddressLine(1));
                    add = sb.toString();
                    }
                   
                  txt_indirizzo.setText("Ti trovi in " + add);
                   
                } catch (IOException e) {
                    e.printStackTrace();
                }
           
                mapController.animateTo(p);
                mapView.invalidate();
            }
            return true;
        }

;)

ciao ivan, ho provato a eseguire il tuo codice ma non mi appare niente se clicko sulla mappa non mi appare nessun messaggio....il tuo metodo l'ho inserito all'interno
 
Codice (Java): [Seleziona]
 LocationListener locationListener = new LocationListener() {
           
            public void onLocationChanged(Location location) {
                    // Aggiorna il marker della mappa
                 //  mapView.invalidate();

                    // Aggiorna la location
                    Double geoLat = location.getLatitude()*1E6;
                    Double geoLng = location.getLongitude()*1E6;
                    GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());

                    mapController.animateTo(point);

                    tvLatitudine.setText(Double.toString(getRound(location.getLatitude(), 5)));
                    tvLongitudine.setText(Double.toString(getRound(location.getLongitude(), 5)));
                    tvVelocita.setText(Double.toString(getRound(location.getSpeed()*3.6, 1))+" km/h");
                    tvQuota.setText(Integer.toString((int)location.getAltitude())+" m");
                    tvAccuratezza.setText(Integer.toString((int)location.getAccuracy())+" m");
            }

            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                        GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
                   
                    Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
                   
                    try {...........................
ma non mi restituisce niente!!!

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #13 il: 01 Giugno 2011, 15:16:43 CEST »
0
Purtroppo sono all'estero e non ho il codice con me, non posso controllare.

Non mi ricordo se l'evento onTouch va al di fuori del LocationListener.. Prova a fare questo tentativo.
Se non funziona prova a vedere cosa esce dal Logcat e lo posti ;)

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Indirizzo a partire da Latitudine e Longitudine
« Risposta #14 il: 02 Giugno 2011, 17:48:41 CEST »
0
ciao ivan, ho provato a eseguire il tuo codice ma non mi appare niente se clicko sulla mappa non mi appare nessun messaggio....il tuo metodo l'ho inserito all'interno
 
Codice (Java): [Seleziona]
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                        GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
                   
                    Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
                   
                    try {...........................
ma non mi restituisce niente!!!

Ciao, ha ragione Ivan, il metodo onTouch(...) va al di fuori del location listener. Hai due opzioni:
  • Implementi l'interfaccia onTouchListener all'inizio, in questo modo:
Codice (Java): [Seleziona]
public class GPS_Pos extends Activity implements View.OnTouchListener {
}

A questo punto Eclipse ti ricorderà di implementare il metodo onTouch(View v, MotionEvent event)
  • Crei l'interfaccia all'interno della classe:
Codice (Java): [Seleziona]
public class GPS_Pos extends Activity {

View.OnTouchListener mListener = new View.OnTouchListener(){    
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                return false;
                        }
}
}

    In entrambi i casi devi associare alla mappa il listener che hai creato. Supponendo che la mapView si chiami mMap, diventano così:


    Codice (Java): [Seleziona]
    public class GPS_Pos extends Activity implements View.OnTouchListener {

    MapView mMap;
    mMap = (MapView) findViewById(...);
    mMap.setOnTouchListener(this);

                           @Override
                            public boolean onTouch(View v, MotionEvent event) {
                                    return false;
                            }
    }

    Oppure:
    Codice (Java): [Seleziona]
    public class GPS_Pos extends Activity {

    MapView mMap;
    View.OnTouchListener mListener;
    mMap = (MapView) findViewById(...);

    mListener = new View.OnTouchListener(){        
                            @Override
                            public boolean onTouch(View v, MotionEvent event) {
                                    return false;
                            }
    }
    mMap.setOnTouchListener(mListener);
    }

    « Ultima modifica: 02 Giugno 2011, 17:50:42 CEST da Verandi »