GoogleMaps mit der Geocoder Klasse - Tutorial
In den Android-Usergruppen häuften sich in letzter Zeit die Fragen über die Funktionalität der Geocoder Klasse und deren Möglichkeit eine Adresse in Longitude und Latitude zu konvertieren. Ich hoffe dieses kleine Tutorial kann einige Fragen beantworten.
Was die Anwendung kann:
Sie konvertiert eine eingegebene Adresse in Longitude und Latitude und zeigt den Standort auf einer Karte an.
Wie die Anwendung aussieht:

Schritt-für-Schritt Tutorial:
1. Erstelle zuerst ein passendes Layout. Es gibt mittlerweile genügend Tutorials zum Layouting (zum Beispiel im anddev.org - Forum), daher werde ich hier nicht weiter darauf eingehen. Du kannst dir aber den angehängten Sourcecode downloaden um zu sehen, wie meine main.xml aussieht
2. Füge den folgenden Code zu deiner Manifest.xml hinzu. Direkt über den
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
3. Nun können wir mit dem eigentlichen Java-Code beginnen:
Alles was du tun musst ist
- Eine GeoCoder Instanz erstellen
gc = new Geocoder(this); //create new geocoder instance
- Je eine OnClickListener-Funktion für den Suchen-Button (btnSearch) und den Text aus dem EditText-Feld (address)
gc = new Geocoder(this); //create new geocoder instance btnSearch.setOnClickListener(new OnClickListener() { public void onClick(View v) { String addressInput = adress.getText().toString(); //Get input text } });
- Nun lassen wir die GeoCoder Klasse nach der eingegebenen Adresse suchen (try-catch-statement nicht vergessen!)
gc = new Geocoder(this); //create new geocoder instance btnSearch.setOnClickListener(new OnClickListener() { public void onClick(View v) { String addressInput = adress.getText().toString(); //Get input text try { List<Address> foundAdresses = gc.getFromLocationName(addressInput, 5); //Search addresses } catch (Exception e) { //@todo: Show error message } } });
- Nun können wir die Longitude und Latitude der gefundenen Adresse auslesen und sie auf der Karte anzeigen (die navigateToLocation-Funktion findest du im kompletten Quellcode)
gc = new Geocoder(this); //create new geocoder instance btnSearch.setOnClickListener(new OnClickListener() { public void onClick(View v) { String addressInput = adress.getText().toString(); //Get input text try { List<Address> foundAdresses = gc.getFromLocationName(addressInput, 5); //Search addresses for (int i = 0; i < foundAdresses.size(); ++i) { //Save results as Longitude and Latitude //@todo: if more than one result, then show a select-list Address x = foundAdresses.get(i); lat = x.getLatitude(); lon = x.getLongitude(); } navigateToLocation((lat * 1000000), (lon * 1000000), myMap); //display the found address } catch (Exception e) { //@todo: Show error message } } });
Kompletter Quellcode
Der komplette Quellcode zeigt außerdem noch eine Fehlermeldung an, wenn die Adresse nicht gefunden wurde.
//Lot's of imports here... see full source public class simpleGoogleMaps extends MapActivity { protected boolean isRouteDisplayed() { return false; } private MapView myMap; private Button btnSearch; private EditText adress; private Geocoder gc; private double lat; private double lon; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myMap = (MapView) findViewById(R.id.simpleGM_map); //Get map from XML btnSearch = (Button) findViewById(R.id.simpleGM_btn_search); //Get button from XML adress = (EditText) findViewById(R.id.simpleGM_adress); //Get address from XML gc = new Geocoder(this); //create new geocoder instance btnSearch.setOnClickListener(new OnClickListener() { public void onClick(View v) { String addressInput = adress.getText().toString(); //Get input text try { List<Address> foundAdresses = gc.getFromLocationName(addressInput, 5); //Search addresses if (foundAdresses.size() == 0) { //if no address found, display an error Dialog locationError = new AlertDialog.Builder(simpleGoogleMaps.this) .setIcon(0) .setTitle("Error") .setPositiveButton(R.string.ok, null) .setMessage("Sorry, your address doesn't exist.") .create(); locationError.show(); } else { //else display address on map for (int i = 0; i < foundAdresses.size(); ++i) { //Save results as Longitude and Latitude //@todo: if more than one result, then show a select-list Address x = foundAdresses.get(i); lat = x.getLatitude(); lon = x.getLongitude(); } navigateToLocation((lat * 1000000), (lon * 1000000), myMap); //display the found address } } catch (Exception e) { //@todo: Show error message } } }); } /** * Navigates a given MapView to the specified Longitude and Latitude */ public static void navigateToLocation (double latitude, double longitude, MapView mv) { GeoPoint p = new GeoPoint((int) latitude, (int) longitude); //new GeoPoint mv.displayZoomControls(true); //display Zoom (seems that it doesn't work yet) MapController mc = mv.getController(); mc.animateTo(p); //move map to the given point int zoomlevel = mv.getMaxZoomLevel(); //detect maximum zoom level mc.setZoom(zoomlevel - 1); //zoom mv.setSatellite(false); //display only "normal" mapview }
Ich hoffe das Tutorial veranschaulicht, wie leicht es ist eine Adresse in Long/Lat zu konvertieren. Für mehr Infos rund um die Arbeit mit GoogleMaps empfehle ich folgendes Tutorial auf anddev.org.
Dieses Tutorial wurde von mir bereits hier auf englisch im Anddev.org Forum veröffentlicht
| Anhang | Größe |
|---|---|
| simpleGoogleMaps.tar | 65.5 KB |















Kommentare
Hi, echt schönes Tutorial!
Hi,
echt schönes Tutorial! Vielen Dank. Hab noch eine Frage. Ich versuche gerade die PLZ aus der Adresse auszulesen, aber x.getPostalCode() ist null und auch wenn ich mir die Adresszeilen einzeln ausgeben lasse, ist da keine PLZ dabei. Liefert die Methode getFromLocationName() diese garnicht mit? Wenn ich den anderen Weg gehe, also zu einem bestimmten Punkt die Adresse suche über getFromLocation() ist sie dabei. Gut ... man könnte also über getFromLocationName() den Punkt ermitteln und dann das Ergebnis nochmal durch getFromLocation() jagen, aber das ist nicht wirklich schön :-) Vielleicht hast du ja eine Idee.
Liebe Grüße
Rudi
Hallo, schön mal deutsche
Hallo,
schön mal deutsche Android Seite zu finden.Ich hab da auch gleich mal ne Frage.
Wie kann ich die Dateien in simpleGoogleMaps.tar mit eclipse öffnen.
Und wie krieg ich die auf mein G1 und kann sie damit öffnen.
Bin noch neu in der Materie,deswegen die Frage.
mfg knuppel
Hi knuppel, lies dir bitte
Hi knuppel,
lies dir bitte das Hello-World Tutorial auf der offiziellen Android Seite durch [1]. Dort wird alles nötige erklärt.
Ansonsten schau einfach ins Forum, dort gibt es ähnlich relevante Fragen, bzw User, die dir helfen können.
schönen Gruß!
Mic
[1] http://developer.android.com/guide/tutorials/hello-world.html