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.

Doczytywanie opisów markerów

Ten artykuł dotyczy API w wersji 2

« powrót do listy poradników

Proste aplikacje często łączą warstwę danych z warstwą skryptową. Przykładowo, bezpośrednio w skrypcie możesz przechowywać tekst, który otwierany jest w oknach infoWindow. Ta metoda ma jednak kilka wad, które mogą stać się uciążliwe, jeśli na mapę trzeba wstawić predefiniowane markery, a nie korzystamy z dobrodziejstw XML:

  • im więcej tekstu w skrypcie, tym większy jego rozmiar - a co za tym idzie - dłuższy czas wczytywania
  • użytkownik zazwyczaj nie będzie otwierał okien wszystkich dostępnych markerów, co oznacza, że nie istnieje potrzeba przechowywania ich zawartości

W tej części kursu napiszemy aplikację, która po kliknięciu na marker wczytuje z zewnętrznego pliku odpowiednie dane na żądanie - oszczędza to czas przy ładowaniu oraz transfer.

Zasada działania

Każdemu dodawanemu markerowi przypiszemy pewną właściwość url, w której będzie przechowywany adres pliku, zawierającego tekst okna infoWindow. Następnie, za pomocą prototypowanej metody openAjaxInfoWindow() plik ten będzie pobierany, a jego zawartość wyświetlana w okienku:

GMarker.prototype.openAjaxInfoWindow = function(url,opcje)
{
	var marker = this;
	GLog.write('Pobieram plik '+url); // w celach diagnostycznych następuje wyświetlenie komunikatu o pobieranym pliku
	GDownloadUrl(url,function(tresc,kodOdpowiedzi)
	{
		kontener.innerHTML = '<div style="width: 300px; height: 200px; overflow: auto;">'+tresc+'</div>';
		marker.openInfoWindow(kontener,opcje);
	});
}

Obiekt kontener tworzymy na początku działania skryptu jako obiekt globalny:

var kontener = document.createElement('div');

Funkcja, służąca do dodania markera na mapę może wyglądać następująco:

function dodajMarker(punkt,url,opcje)
{
	var marker = new GMarker(punkt);
	marker.url = url;
	mapa.addOverlay(marker);
	GEvent.addListener(marker,'click',function()
	{
		marker.openAjaxInfoWindow(marker.url);
	});
	return marker;
}

Przykład działania (bez XML)

Dodamy marker, przekazując funkcji dodajMarker() następujące parametry:

var marker = dodajMarker(new GLatLng(53.41,14.58),'/examples/012/01/titanic.html',{});
mapa.addOverlay(marker);

Sprawdzamy działanie w praktyce - działa prawidłowo, a dodatkowo czas między kliknięciem a wyświetleniem treści jest praktycznie niezauważalny: przykład 1pokaż kod przykładu

Przykład działania (XML)

Zapisanie danych w pliku XML jest zazwyczaj lepszym rozwiązaniem niż trzymanie ich w skrypcie. Jeśli jednak łączna objętość wszystkich tekstów, które muszą być zawarte w pliku XML jest duża, można również zaimplementować rozwiązanie jak w powyższym przykładzie, a w pliku XML pozostawić jedynie odnośnik do pliku z opisem. Przykładowy plik XML:

<dane>
	<marker lat="53.41" lon="14.58" url="/examples/012/01/titanic.html" />
</dane>

Wczytamy ten plik za pomocą prostej funkcji, parsującej XML:

function wczytajMarkery(url)
{
	GLog.write('Wczytuję '+url); // w celach diagnostycznych
	GDownloadUrl(url,function(dane,kodOdpowiedzi)
	{
		var xml = GXml.parse(dane);  
		var markery = xml.documentElement.getElementsByTagName('marker');  
		for(var i=0; i<markery.length; i++)  
		{  
		    var lat = parseFloat(markery[i].getAttribute("lat"));  
		    var lon = parseFloat(markery[i].getAttribute("lon"));  
		    var url = markery[i].getAttribute("url");  
			
		    dodajMarker(new GLatLng(lat,lon),url,{});  
		}  
	});
}

Funkcję wczytajMarkery() wywołamy tuż za inicjalizacją mapy:

wczytajMarkery('/examples/006/02/markery.xml');

I gotowe! Oczywiście, efekt działania będzie identyczny jak w przykładzie 1, ale efektywność rozwiązania znacząco wzrasta, szczególnie jeśli na Twojej mapie jest wiele markerów o długich, rozbudowanych opisach: przykład 2pokaż kod przykładu

Uwagi

  • Jak zwykle, pamiętaj o ograniczeniach, wynikających z zabezpieczeń przed atakami typu XSS. Pobierany plik z opisem musi być w tej samej domenie co skrypt go wywołujący.
  • Jeżeli możesz, używaj metody opisanej w tym przykładzie: Optymalizacja wyświetlania dużej ilości znaczników. Dzięki niej, marker może posiadać dwa rodzaje opisów - skrócony i rozszerzony, przy czym ten drugi jest pobierany dynamicznie na żądanie użytkownika.

Polecane artykuły

Dodaj stronę do ulubionego serwisu społecznościowego

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

Dodawanie znaczników na mapę

API v2

Kurs podstaw cz. II: Podstawowe informacje na temat wstawiania markerów (znaczników)


Dodawanie markerów przez użytkownika

API v2

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


Popularne, darmowe ikony dla markerów

API v2

Kurs podstaw cz. IV: Lista darmowych ikon do wykorzystania w Twojej aplikacji mapowej


Wczytywanie danych z pliku XML

API v2

Kurs podstaw cz. X: Omówienie wczytywania danych z pliku XML za pomocą AJAXa