2010-11-23 7 views
15

Ich versuche, den Straßennamen meines aktuellen Standorts zu erhalten, aber ich kann nicht scheinen, es zu bekommen.Abrufen des Straßennamens von Adresse/Standortobjekt in Android

Ich benutze diese Methode, um die Adresse abzurufen:

public Address getAddressForLocation(Context context, Location location) throws IOException { 

     if (location == null) { 
      return null; 
     } 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     int maxResults = 1; 

     Geocoder gc = new Geocoder(context, Locale.getDefault()); 
     List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults); 

     if (addresses.size() == 1) { 
      return addresses.get(0); 
     } else { 
      return null; 
     } 
    } 

Und dann kann ich Dinge wie. address.getLocality()

Aber was ich will ist der Straßenname. Wie in "Potterstraße 12". Wenn ich AddressLine (0) und AddressLine (1) drucke, erhalte ich nur die Postleitzahl, die Stadt und das Land.

Wie kann ich den Straßennamen der aktuellen Position abrufen?

Antwort

13

Haben Sie versucht, getAddressLine zu verwenden? Siehe here für weitere Informationen über diese Methode

etwas tun sollte (nicht getestet):

for (int i = 0; i < addresses.getMaxAddressLineIndex(); i++) { 
Log.d("=Adress=",addresses.getAddressLine(i)); 
} 
+0

Ja, wie ich oben sagte, wenn ich drucken getAddressLine (0) und (1) bekomme ich die postal, Stadt und Land. Kein Straßenname. – Galip

+0

Tut mir leid, ich habe es nicht bemerkt. Vielleicht können Sie versuchen, über den Emulator einen anderen Längen- und Breitengrad an einem anderen Ort zu senden und zu überprüfen, ob einige Straßennamen zurückgegeben werden können. – ccheneson

+0

Vielleicht könnten Sie auch die maxResult erhöhen, um zu überprüfen, was die anderen Ergebnisse als Info enthalten. – ccheneson

-3
Geocoder gcd = new Geocoder(this, Locale.getDefault()); 
List<Address> addresses = 
       gcd.getFromLocation(currentLatitude, currentLongitude,100); 
if (addresses.size() > 0 && addresses != null) { 
       StringBuilder result = new StringBuilder(); 
       myaddress.setText(addresses.get(0).getFeatureName()+"-"+addresses.get(0).getLocality()+"-"+addresses.get(0).getAdminArea()+"-"+addresses.get(0).getCountryName()); 
} 
  • getfeaturename() return Straßen
  • getlocality() return Stadt
  • getadminarea() Rückgabewert

Das ist alles ..!

+5

Das ist überhaupt nicht korrekt. – Xample

0

hatte ich ein sehr ähnliches Problem, aber mit dem Ländernamen, das ist die Funktion, die ich am Ende mit:

function getCountry(results) { 
    var geocoderAddressComponent,addressComponentTypes,address; 
    for (var i in results) { 
     geocoderAddressComponent = results[i].address_components; 
     for (var j in geocoderAddressComponent) { 
     address = geocoderAddressComponent[j]; 
     addressComponentTypes = geocoderAddressComponent[j].types; 
     for (var k in addressComponentTypes) { 
      if (addressComponentTypes[k] == 'country') { 
      return address.long_name; 
      } 
     } 
     } 
    } 
    return 'Unknown'; 
} 

Sie sollten diese in der Lage sein, sich anzupassen, den Straßennamen ohne viel Aufhebens zu bekommen.

Inspired by this answer

1

Wenn Sie eine vollständige Adresse (Stadt + Straße) haben, in

address.getAddressLine(0) 

Sie die Straßennamen und die Nummer finden.

8

Versuche so etwas in Ihrem Code

String cityName=null;    
Geocoder gcd = new Geocoder(getBaseContext(),Locale.getDefault());    
List<Address> addresses;  
try {  
    addresses = gcd.getFromLocation(location.getLatitude(), location 
        .getLongitude(), 1);  
    if (addresses.size() > 0) 
     StreetName=addresses.get(0).getThoroughfare(); 
     String s = longitude+"\n"+latitude + 
     "\n\nMy Currrent Street is: "+StreetName; 
     Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show(); 

es funktioniert für mich :-) Viel Glück ;-)

+2

getThoroughfare() gibt null zurück, wenn Sie sich in einem suburbanen Gebiet befinden. Es kann nicht für jeden Standort des Benutzers verallgemeinert werden. – Mrigank

1

getFromLocation auch nicht für mich arbeitet. Es gibt ein paar Schritte, die du machen kannst.

1. Zunächst gehen Sie in Großbuchstaben und stellen Sie sicher, dass Sie die neuesten Play-Dienste lib verwenden.

2. Nicht über spezifizieren, der Grund, warum ich keine Ergebnisse habe, ist, weil ich zu viel Information in meiner Adresse hatte. Als ich die Postleitzahl entfernte, bekam ich jedes Mal Ergebnisse.

3. Versuchen Sie die Online-API: http://maps.google.com/maps/api/geocode/json?address=192%20McEwan%20Dr%20E,%20Caledon,%20ON&sensor=false Ersetzen Sie einfach die Adresse dort mit Ihren.

Viel Glück

Verwandte Themen