Android: Umgekehrte Geokodierung – getFromLocation

Lesezeit: 6 Minuten

Android Umgekehrte Geokodierung – getFromLocation
Chrispix

Ich versuche, eine Adresse basierend auf dem langen/lat zu erhalten. es scheint, dass so etwas funktionieren sollte?

Geocoder myLocation = Geocoder(Locale.getDefault());
    List myList = myLocation.getFromLocation(latPoint,lngPoint,1);

Das Problem ist, dass ich immer wieder bekomme: Die Methode Geocoder (Locale) ist für den Typ savemaplocation nicht definiert

Jede Hilfe wäre hilfreich. Danke.


Danke, ich habe zuerst den Kontext, das Gebietsschema 1, ausprobiert, und das ist fehlgeschlagen, und ich habe mir einige der anderen Konstruktoren angesehen (ich hatte einen gesehen, der nur das Gebietsschema erwähnt hatte). Trotzdem,

Es hat nicht funktioniert, da ich immer noch bekomme: Die Methode Geocoder (Context, Locale) ist für den Typ savemaplocation nicht definiert

Ich habe: import android.location.Geocoder;

Das folgende Code-Snippet erledigt dies für mich (lat und lng sind Doubles, die über diesem Bit deklariert sind):

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);

  • Ich habe das auch versucht, jedes Mal, wenn ich versuche, die Adressliste anzuzeigen, bombardiert es. Nicht sicher, was los ist. Ich werde es in ein oder zwei Tagen mit einer neuen App hier versuchen, um zu sehen, was ich finden kann.

    – Chrispix

    26. Januar 2009 um 3:32 Uhr

  • Ich fand das sehr hilfreich für die Positionierung von Sachen: blogoscoped.com/archive/2008-12-15-n14.html

    – Wilfried Knievel

    29. Januar 2009 um 17:30 Uhr

  • … außerdem habe ich die folgenden zwei Berechtigungen in meinem Manifest: Als ich einen davon verpasst habe (ich kann mich nicht erinnern, welcher), hat die App einen wirklich nicht hilfreichen Fehler ausgegeben.

    – Wilfried Knievel

    29. Januar 2009 um 17:39 Uhr

  • Wie kann ich dieser Klasse einen API-Schlüssel hinzufügen? Damit ich mehr Anfragen bekommen kann?

    – Olsi Saqe

    20. Mai 2014 um 15:44 Uhr

  • Haben wir im Jahr 2019 (api>= 26 SDK) eine Möglichkeit, eine Adresse zu erhalten, ohne den Kontext zu übergeben?

    – Ponomarenko Oleh

    27. Februar 2019 um 13:58 Uhr

Hier ist ein vollständiger Beispielcode, der einen Thread und einen Handler verwendet, um die Geocoder-Antwort zu erhalten, ohne die Benutzeroberfläche zu blockieren.

Geocoder-Aufrufprozedur, kann sich in einer Hilfsklasse befinden

public static void getAddressFromLocation(
        final Location location, final Context context, final Handler handler) {
    Thread thread = new Thread() {
        @Override public void run() {
            Geocoder geocoder = new Geocoder(context, Locale.getDefault());   
            String result = null;
            try {
                List<Address> list = geocoder.getFromLocation(
                        location.getLatitude(), location.getLongitude(), 1);
                if (list != null && list.size() > 0) {
                    Address address = list.get(0);
                    // sending back first address line and locality
                    result = address.getAddressLine(0) + ", " + address.getLocality();
                }
            } catch (IOException e) {
                Log.e(TAG, "Impossible to connect to Geocoder", e);
            } finally {
                Message msg = Message.obtain();
                msg.setTarget(handler);
                if (result != null) {
                    msg.what = 1;
                    Bundle bundle = new Bundle();
                    bundle.putString("address", result);
                    msg.setData(bundle);
                } else 
                    msg.what = 0;
                msg.sendToTarget();
            }
        }
    };
    thread.start();
}

Hier ist der Aufruf dieser Geocoder-Prozedur in Ihrer UI-Aktivität:

getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler());

Und der Handler, um die Ergebnisse in Ihrer Benutzeroberfläche anzuzeigen:

private class GeocoderHandler extends Handler {
    @Override
    public void handleMessage(Message message) {
        String result;
        switch (message.what) {
        case 1:
            Bundle bundle = message.getData();
            result = bundle.getString("address");
            break;
        default:
            result = null;
        }
        // replace by what you need to do
        myLabel.setText(result);
    }   
}

Vergessen Sie nicht, die folgende Berechtigung in Ihre einzufügen Manifest.xml

<uses-permission android:name="android.permission.INTERNET" />

  • Der Code funktioniert einwandfrei, eine großartige Basis, um ihn weiter anzupassen

    – John

    20. Februar 2014 um 18:57 Uhr

  • Dies ist richtig, ein anderes Android wird durchkommen NetworkOnMainThreadException.Alternativ kann man auch eine einfachere verwenden AsyncTask um dies zu tun

    – Nezam

    3. Mai 2014 um 8:18 Uhr

  • Umgekehrt geocodierte Adresse wird mehrmals angezeigt. Ich weiß nicht warum?

    – Vineeth Kuttipurath kottayodan

    21. Juli 2017 um 8:31 Uhr

  • @VineethKuttipurathkottayodan Wenn dieselbe Adresse mehrmals vorkommt, liegt das daran, dass Sie die Funktion getAddressFromLocation in die Funktion onLocationChanged eingefügt haben

    – Codierer

    29. September 2017 um 7:46 Uhr

Android Umgekehrte Geokodierung – getFromLocation
Reto Meier

Es sieht so aus, als würden hier zwei Dinge passieren.

1) Du hast das verpasst new Schlüsselwort vor dem Aufruf des Konstruktors.

2) Der Parameter, den Sie an den Geocoder-Konstruktor übergeben, ist falsch. Sie fahren in a vorbei Locale wo es erwartet a Context.

Es gibt zwei Geocoder Konstruktoren, die beide eine erfordern Contextund man nimmt auch a Locale:

Geocoder(Context context, Locale locale)
Geocoder(Context context)

Lösung

Ändern Sie Ihren Code, um einen gültigen Kontext zu übergeben und einzuschließen new und Sie sollten gut gehen.

Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());   
List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1);

Notiz

Wenn Sie weiterhin Probleme haben, kann es sich um ein Berechtigungsproblem handeln. Die Geocodierung verwendet implizit das Internet, um die Suchen durchzuführen, daher erfordert Ihre Anwendung eine INTERNET uses-permission-Tag in Ihrem Manifest.

Fügen Sie den folgenden uses-permission-Knoten innerhalb der manifest Knoten Ihres Manifests.

<uses-permission android:name="android.permission.INTERNET" />

  • Danke, ich glaube, ich habe letzte Nacht zu spät gearbeitet, nicht sicher, was mit meinem Neuen passiert ist. Ich glaube, ich habe es ursprünglich vergessen, habe es wieder angelegt, als ich nur mein Gebietsschema hatte, und als ich zurückkam, habe ich es wieder vergessen. Ich weiß es zu schätzen.

    – Chrispix

    23. Januar 2009 um 16:44 Uhr

  • Keine Sorge, ich habe es beim ersten Mal auch nicht bemerkt 🙂

    – Reto Meier

    23. Januar 2009 um 16:58 Uhr

1646119391 817 Android Umgekehrte Geokodierung – getFromLocation
Ingo

Grund dafür ist der nicht vorhandene Backend Service:

Die Geocoder-Klasse erfordert einen Back-End-Dienst, der nicht im Core-Android-Framework enthalten ist. Die Geocoder-Abfragemethoden geben eine leere Liste zurück, wenn kein Back-End-Dienst auf der Plattform vorhanden ist.

Android Umgekehrte Geokodierung – getFromLocation
Antonius

Rufen Sie zunächst Breiten- und Längengrad mithilfe der Klassen Location und LocationManager ab. Probieren Sie jetzt den folgenden Code aus, um die Stadt und die Adressinformationen abzurufen

double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
    List<Address> addresses = gc.getFromLocation(lat, lng, 1);
    StringBuilder sb = new StringBuilder();
    if (addresses.size() > 0) {
        Address address = addresses.get(0);
        for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
            sb.append(address.getAddressLine(i)).append("\n");
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getPostalCode()).append("\n");
            sb.append(address.getCountryName());
    }

Stadtinfo ist jetzt in sb. Konvertieren Sie nun sb in String (mithilfe von sb.toString() ).

1646119392 122 Android Umgekehrte Geokodierung – getFromLocation
Adil Soomro

Nun, ich bin immer noch ratlos. Hier ist also mehr Code.

Bevor ich meine Karte verlasse, rufe ich an SaveLocation(myMapView,myMapController); Das nennt man schließlich meine Geokodierungsinformationen.

Aber seit getFromLocation kann ein werfen IOExceptionmusste ich Folgendes tun, um SaveLocation aufzurufen

try
{
    SaveLocation(myMapView,myMapController);
}
catch (IOException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Dann muss ich SaveLocation ändern, indem ich sage, dass es IOExceptions auslöst:

 public void SaveLocation(MapView mv, MapController mc) throws IOException{
    //I do this : 
    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());   
    List myList = myLocation.getFromLocation(latPoint, lngPoint, 1);
//...
    }

Und es stürzt jedes Mal ab.

1646119393 264 Android Umgekehrte Geokodierung – getFromLocation
Yazan

Benutze das

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);

898060cookie-checkAndroid: Umgekehrte Geokodierung – getFromLocation

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy