Android: Reverzní geokódování - getFromLocation

hlasů
46

Snažím se získat adresu vychází z dlouhé / lat. Zdá se, že něco takového by mělo fungovat?

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

Problém je, že Dostávám: Metoda Geocoder (Locale) je definována pro typ savemaplocation

Jakákoliv pomoc by byla užitečná. Děkuji.


Díky, jsem se snažil kontext, jednu locale první, a že selhal a byl při pohledu na některé z dalších konstruktérů (viděl jsem ten, který se zmínil jen locale). Bez ohledu na,

Nefungovalo to, jak jsem stále dostává: Metoda Geocoder (Context, Locale) je definována pro typ savemaplocation

Mám: import android.location.Geocoder;

Položena 23/01/2009 v 10:08
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
62

Následující fragment kódu je na tom to pro mě (lat a LNG jsou dvoulůžkové uvedených výše tohoto bitu):

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
Odpovězeno 25/01/2009 v 01:58
zdroj uživatelem

hlasů
41

Zde je kompletní příklad kódu pomocí vlákno a Handler získat odpověď Geocoder bez blokování UI.

Postup Geocoder volání, mohou být umístěny ve třídě Helper

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();
}

Zde je výzva, aby tento postup Geocoder ve vašem UI aktivita:

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

A psovod ukázat výsledky ve svém uživatelském rozhraní:

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

Nezapomeňte uvést následující oprávnění ve vašem Manifest.xml

<uses-permission android:name="android.permission.INTERNET" />
Odpovězeno 12/02/2011 v 23:35
zdroj uživatelem

hlasů
34

Vypadá to, že tam jsou dvě věci, tady děje.

1) jste vynechal newklíčové slovo z doby před voláním konstruktoru.

2) Parametr jste předáním do Geocoder konstruktoru je nesprávná. Jste procházející v Locale, kde je očekával Context.

Existují dva Geocoderkonstruktéři, z nichž oba vyžadují Context, a jeden také Přičemž Locale:

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

Řešení

Upravte váš kód předat platný kontextu a patří newa vy byste měli být dobré jít.

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

Poznámka

Pokud máte stále potíže, může být permissioning problém. Geocoding implicitně používá internet k provedení vyhledávání, takže vaše aplikace bude vyžadovat INTERNETznačku používá-oprávnění ve svém manifestu.

Přidat následující uzel používá-oprávnění v manifestuzlu svého manifestu.

<uses-permission android:name="android.permission.INTERNET" />
Odpovězeno 23/01/2009 v 11:25
zdroj uživatelem

hlasů
7

Důvodem pro to je neexistující Backend Service:

Třída Geocoder vyžaduje backend službu, která není zahrnuta v základním android rámce. Metody dotazu Geocoder vrátí prázdný seznam, pokud neexistuje backend služby na platformě.

Odpovězeno 07/10/2013 v 08:40
zdroj uživatelem

hlasů
4

Nejprve získat Zeměpisná šířka a délka použití umístění a třídy LocationManager. Nyní zkuste níže uvedený kód pro Získejte město řešit info

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());
    }

City info je nyní v SB. Nyní převést sb na provázku (pomocí sb.toString ()).

Odpovězeno 01/06/2012 v 13:41
zdroj uživatelem

hlasů
2

No, já jsem stále agitoval. Takže tady je více kódu.

Než jsem se opustit svou mapu, říkám SaveLocation(myMapView,myMapController);To je to, co skončí volá mé informace geokódování.

Ale protože getFromLocationmohou vyvolat IOException, co jsem musel udělat následující volat SaveLocation

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

Pak jsem musel změnit SaveLocation tím, že hází IOExceptions:

 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);
//...
    }

A došlo ke zhroucení pokaždé.

Odpovězeno 24/01/2009 v 00:06
zdroj uživatelem

hlasů
0

Použij toto

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
Odpovězeno 07/11/2016 v 13:36
zdroj uživatelem

hlasů
0

Slyšel jsem, že Geocoder je na straně kočárku. Nedávno jsem dal dohromady příklad aplikace, která používá geokódů službu http Google k vyhledávání umístění z lat / long. Neváhejte a podívat se na to zde

http://www.smnirven.com/?p=39

Odpovězeno 09/10/2009 v 06:55
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more