wtorek, 19 kwietnia 2011

Zmiana wyglądu ikony w Google maps

W bibliotece, z której korzystam do wizualizowania plików GPX na google maps, do wyświetlenia punktu (czyli elementu wpt) wykorzystywana jest funkcja GPXParser.prototype.CreateMarker:


GPXParser.prototype.CreateMarker = function(point)
{
var lon = parseFloat(point.getAttribute("lon"));
var lat = parseFloat(point.getAttribute("lat"));
// ... ... ...
var marker = new GMarker(new GLatLng(lat,lon));
// ... ... ...
}

W powyższym symbol // ... ... ... oznacza pominięte fragmenty funkcji.

Wszystkie ikony dla elementów wpt są oznaczone standardową dużą czerwoną pinezką. Ja chcę, żeby moja pinezka ,,reagowała'' na obecność elementu type, który według schematu GXP, określa typ punktu. Przykładowo miejsce odwiedzone będę oznaczał jako:


<wpt lat="54.071729" lon="18.446817"><ele/>
<name>Skarszewy</name>
<type>visited</type>
<extensions><html>Skarszewy</html></extensions></wpt>

Tak oznaczone miejsca mają być wyróżniane za pomocą niebieskiej ikony. Pozostałe będą oznaczane czerwoną:


GPXParser.prototype.CreateMarker = function(point)
{
var lon = parseFloat(point.getAttribute("lon"));
var lat = parseFloat(point.getAttribute("lat"));

var wpType = point.getElementsByTagName("type")[0] ; // czy istnieje element type?
var wpTypeTxt = "?";

if ( wpType ) { wpTypeTxt = wpType.firstChild.nodeValue; } // jeżeli tak przypisz wartość

// ... ... ...
// zmiana wyglądu, skopiowane z: http://kody.wig.pl/tag/gmarker/
var cIcon = new GIcon();

// Ikony do pobrania z http://sites.google.com/site/gmapicons/
// umieszczam w katalogu '/icons_/'
if ( wpTypeTxt == "visited" ) { cIcon.image = '/icons_/mm_20_blue.png'; }
else { cIcon.image = '/icons_/mm_20_red.png'; }

cIcon.shadow = "/icons_/mm_20_shadow.png";
var marker = new GMarker(new GLatLng(lat,lon), cIcon );

cIcon.iconSize = new GSize(12, 20);
cIcon.shadowSize = new GSize(22, 20);
cIcon.iconAnchor = new GPoint(6, 20);
cIcon.infoWindowAnchor = new GPoint(5, 1);

// ... ... ...
}

Wynik można obejrzeć tutaj.

Brak komentarzy:

Prześlij komentarz