www.gmapsapi.com

Kompleksowy kurs podstaw API, po którym mapowianie nie będzie miało przed Tobą żadnych tajemnic!

Setki przykładów, kursów i poradników z kodem gotowym do skopiowania i korzystania.

Największa strona o Google Maps API w Polsce, największe źródło informacji w języku polskim.

Szczegóły wielu wyników geokodowania

Ten artykuł dotyczy API w wersji 2

« powrót do listy poradników

W tutorialu Obsługa wielu wyników geokodowania pokazany został przykład obsługi geokodowania wielu wyników, dzięki którym przy znalezieniu więcej niż jednego pasującego rezultatu program wyświetlał dostępne opcje, a użytkownik mógł wybrać tę właściwą. Problemem było jedynie to, że nie istniały żadne dodatkowe wskazówki, mówiące o położeniu danej miejscowości. Przykładowo wpisanie słowa "Mierzyn" powodowało pokazanie kilku rezultatów, brzmiących identycznie "Mierzyn":

Kilka identycznie brzmiących wyników

W tym poradniku pokazany zostanie sposób na dokładniejsze określenie geokodowanych adresów.

Struktura

Kluczowym zagadnieniem jest struktura, zwracana przez funkcję getLocations() obiektu GClientGeocoder(). Oto przykładowe wyniki dla jednego rekordu, które są zwracane jako JSON:

{
	"id":"p1",
	"address":"Mierzyn, Poland",
	"AddressDetails":
	{
		"Country":
		{
			"CountryNameCode":"PL",
			"AdministrativeArea":
			{
				"AdministrativeAreaName": "Zachodniopomorskie",
				"SubAdministrativeArea":
				{
					"SubAdministrativeAreaName":"Białogardzki",
					"Locality":
					{
						"LocalityName":"Mierzyn"
					}
				}
			}
		},
		"Accuracy": 4
	},
	"Point":
	{
		"coordinates":[15.886338,54.112441,0]
	}
}

Aby wyciągnąć nazwę powiatu i województwa, wystarczy skorzystać z następującego odwołania (przy założeniu że wyniki to zwrócona tablica, a j to numer iteracji pętli, wykonywanej dla każdego wyniku:

wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName; // powiat
wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName // województwo

Posiadając te informacje, modyfikacja przykładu to czysta formalność - oto kluczowy fragment kodu:

html+='<strong>Znalazłem kilka pasujących adresów:</strong><ul>';
// dla każdego z wyników...
for (var j=0; j<wyniki.Placemark.length; j++)
{
	var punkt = wyniki.Placemark[j].Point.coordinates;
	
	// dodajemy linki, umożliwiające dodanie markera
	html += '<li><a href="#" onclick="document.getElementById(\'geoAdresy\').style.display=\'none\'; mapa.addOverlay(new GMarker(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'))); mapa.setCenter(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'),15);  return false;">';
		
	try
	{
		html += wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName+', ';
		html += 'pow. '+wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName+', ';
		html += 'woj. '+wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
	}
	catch(e)
	{
		html += document.getElementById('adres').value;
	}
	html += '</a>';
	
	
}
html +='</ul>';

Konstrukcja try {} catch() {} została zastosowana z tej przyczyny, że niektóre wyniki po przetworzeniu mogą nie posiadać pewnych własności - kod w tej formie wyklucza wystąpienie błędów JavaScript.

Efekt jest zgodny z naszymi oczekiwaniami:

Sytuacja po poprawkach

przykład 1pokaż kod przykładu

Uwaga

Celowo sprawdzane jest istnienie elementu wyniki.Placemark[j].AddressDetails.Country.AdministrativeArea - spotkałem się dotychczas z kilkoma miejscowościami, które nie posiadają żadnych (!!!) informacji. Wówczas wyświetlamy jedynie nazwę, którą pobieramy bezpośrednio z formularza do wyszukiwania.

Polecane artykuły

Dodaj stronę do ulubionego serwisu społecznościowego

Oto, co najczęściej czytają internauci, którzy przeczytali ten artykuł:

Dodawanie markerów przez użytkownika

API v2

Poradnik pokazuje, w jaki sposób stworzyć formularz, pozwalający na dodawanie markerów


Geokodowanie adresów

API v2

Kurs podstaw cz. XI: Proste i szybkie geokodowanie adresów (zamiana adresu na współrzędne)


Kategorie markerów i polilinii

API v2

Stwórz markery/polilinie w kilku kategoriach, a następnie ukrywaj i pokazuj wybrane kategorie


jQuery i Google Maps

API v2

Przyjemne dla oka animacje za pomocą bilbioteki jQuery uatrakcyjnią każdą mapę!