Monika Rzewuska

Monika Rzewuska Human Resources /
Recruitment
Consultant

Temat: problem z markerami

Witam, może byłby ktoś w stanie pomóc. Mam taki problem:
Podzieliłam sobie markery na kategorie i chciałabym żeby przy włączeniu mapy widoczne były tylko niektóre z nich.
Ewentualnie dodatkowo, żeby wyświetliły się przy zwiększeniu zoomu. Bo w tym momencie wyświetlają mi się wszystkie i zasłaniają mapę.

Dzięki z góry za pomoc :)
Bogdan Madera

Bogdan Madera programista
front-end, php

Temat: problem z markerami

Tą mapę robi Pani w serwisie maps.google.pl? Tam chyba nie ma zbyt wielu możliwości zarządzania kategoriami markerów, a już na pewno nie ma możliwości zarządzania widocznością markerów w zależności od poziomu zoom.
Aby takie efekty uzyskać trzeba skorzystać z google maps api.
Monika Rzewuska

Monika Rzewuska Human Resources /
Recruitment
Consultant

Temat: problem z markerami

Ja robię w google maps api i właśnie tutaj mam ten problem. Znalazłam w intrenecie samouczek ;) ale te funkcja nie była opisana , a by się przydała :)

Temat: problem z markerami

Myślę, że 'eventy' mapy załatwią temat. Przy zmianie zoom sprawdzać wartość i jeżeli jest większy lub równy wybranej wartości to pokazywać markery z danej kategorii. Jeżeli mniejszy, to czyścimy markery z tej kategorii.
Tu mały przykład na wykrycie zdarzenia przy zmianie zoom:

http://code.google.com/intl/pl/apis/maps/documentation...
Monika Rzewuska

Monika Rzewuska Human Resources /
Recruitment
Consultant

Temat: problem z markerami

Póki co udało mi się zrobić coś takiego jak w tym przykładzie którego kod wkleiłam poniżej.
Nie jestem zbyt doświadczona w Google API :), może mógłby mnie ktoś naprowadzić w której części powinnam zmieniać, aby jedne markery były odznaczone i niewidoczne.;)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css" media="all">@import "/style/Przyklad.css";</style>
<title>Przyklad</title>
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>

</head>
<body onload="mapaStart()">
<script type='text/javascript'>
var mapa; //obiekt globalny
var dymek = new google.maps.InfoWindow();
var markery = []; // tablica globalna na markery
function mapaStart()
{
var wspolrzedne = new google.maps.LatLng(52.228791729248044, 21.002973318099975);
var opcjeMapy = {
zoom: 17,
center: wspolrzedne,
mapTypeId: google.maps.MapTypeId.SATELLITE

};
mapa = new google.maps.Map(document.getElementById("mapka"), opcjeMapy);
var ikona_rozmiar = new google.maps.Size(32,32);
var ikona_start = new google.maps.Point(0,0);
var ikona_zaczep = new google.maps.Point(16,16);
var ikona_transport = new google.maps.MarkerImage('
Obrazek
', ikona_rozmiar, ikona_start, ikona_zaczep);
var ikona_parkingi = new google.maps.MarkerImage('http://www.google.com/intl/en_ALL/mapfiles/markerP.png', ikona_rozmiar, ikona_start, ikona_zaczep);
// dodajemy seriÄ™ markerĂłw (lat,lon,tytul,opis,kategoria,ikona)
//transportowe
dodajMarker(52.22879830076604, 21.003166437149048, 'PKP', 'tu jest opis', 'transport', ikona_transport);
dodajMarker(52.22945544765169, 21.001224517822265, 'PKS', 'tu jest opis', 'transport', ikona_transport);
dodajMarker(52.22819371704034, 21.003037691116333, 'Przystanek1', 'tu jest opis', 'transport', ikona_transport);
dodajMarker(52.22783227718525, 21.00361704826355, 'Przystanek2', 'tu jest opis', 'transport', ikona_transport);
//parkingi
dodajMarker(52.229048017728424, 21.00459337234497, 'Parking1', 'tu jest opis', 'parkingi', ikona_parkingi);
dodajMarker(52.22855515395304, 21.001986265182495, 'Parking2', 'tu jest opis', 'parkingi', ikona_parkingi);
dodajMarker(52.230322866646965, 21.00484013557434, 'Parking3', 'tu jest opis', 'parkingi', ikona_parkingi);
dodajMarker(52.23143997220241, 21.003413200378418, 'Parking4', 'tu jest opis', 'parkingi', ikona_parkingi);
dodajMarker(52.22812800092191, 21.000677347183227, 'Parking5', 'tu jest opis', 'parkingi', ikona_parkingi);
odswiezSidebar();
}
// ta funkcja jest wywoływana przy kliknięciu na pole checkbox
function przerysuj(checkbox,kategoria)
{
// jeśli kliknięty checkbox jest zaznaczony, to wywołujemy funkcję z parametrem, mówiącym że ma pokazać markery i polilinie
// jeśli kliknięty checkbox nie jest zaznaczony, to wywołujemy funkcję z parametrem, mówiącym że ma ukryć markery i polilinie if(document.getElementById(checkbox).checked)
ukryjPokazKategorie(kategoria,true);
else
ukryjPokazKategorie(kategoria,false);
odswiezSidebar();
}
// ta funkcja generuje zawartość okienka informacyjnego
function zawartoscOkna(tytul,opis)
{
return '<h3>'+tytul+'</h3><p>'+opis+'</p>';
}
// ta funkcja pokazuje lub ukrywa markery lub polilinie danej kategorii, zgodnie z przekazanymi argumentami
function ukryjPokazKategorie(kategoria,pokaz)
{
// kategoria oznacza id kategorii której widzialność trzeba zmienić
// jeśli pokaz = false, to znaczy że mamy ukryć, w przeciwnym wypadku pokazać
// dla kaĹĽdego z markerĂłw
for(var i=0; i<markery.length; i++)
{
// jeśli poszukiwana kategoria jest kategorią markera
if(markery[i].kategoria==kategoria)
{
// to go ukrywamy lub pokazujemy, w zależności od argumetu pokaz
markery[i].setVisible(pokaz);
markery[i].widoczny = pokaz;
}
}
}
// ta funkcja dodaje marker we współrzędnych lat, lon, o tytule: tytul, opisie: opis, kategorii: kategoria, i ikonce z pliku ikona_url
function dodajMarker(lat,lon,tytul,opis,kategoria,ikona)
{
var punkt = new google.maps.LatLng(lat,lon);
var marker = new google.maps.Marker(
{
position: punkt,
icon: ikona,
title: tytul,
map: mapa
});
// przypisujemy markerowi ID kategorii
marker.kategoria = kategoria;
marker.tytul = tytul;
marker.opis = opis;
marker.widoczny = true; // pomocnicza właściwość do rysowania paska bocznego
markery.push(marker);
google.maps.event.addListener(marker,'click',function()
{
dymek.open(mapa,marker);
dymek.setContent(zawartoscOkna(tytul,opis));
});
}
</script>
<table>
<tr>
<td>
<div id="mapka" style="width: 700px; height: 500px; border: 1px solid black; background: gray;">
<!-- tu będzie mapa -->
</div>
</td>
<td style=" width:200px; vertical-align: top;" id="sidebar">
</td>
</tr>
</table>

<div id="kategorieBelka" style="color: #666; font-style: italic;">
<input checked="checked" id="kat1" type="checkbox" onclick="przerysuj('kat1','transport')" /> transport
<input checked="checked" id="kat2" type="checkbox" onclick="przerysuj('kat2','parkingi')" /> parkingi

</div> </body>
</html>

Temat: problem z markerami

Nie analizowałem tego kodu, ale metoda jest prosta:
1) tworzymy markery (nie wrzucamy na mapę)
2) wstawiamy je do tablicy
3) sprawdzamy event mapy dla zoom i

a) jeżeli zoom >= jakaś wartość, to w pętli dla tablicy z markerami podstawiamy setMap(map) (gdzie map, to nasz mapa)
b) jeżeli zoom < od danej wartości, to w pętli dla każdego elementu tablicy (czyt. każdego markera) dajemy setMap(null)

i tak jeszcze dwie rady:
1) kod js oddzielamy od html (osobny plik)
2) przy wklejaniu kodu na GL, dobrze wcześniej dać znaczniki code, wtedy jest to zdecydowanie bardziej czytelne np:


var a = new Array();
a.push(el);
Daniel Goździk edytował(a) ten post dnia 07.12.11 o godzinie 13:49
Monika Rzewuska

Monika Rzewuska Human Resources /
Recruitment
Consultant

Temat: problem z markerami

Dziękuje bardzo za pomoc- spróbuje coś pokombinować z tym :)

konto usunięte

Temat: problem z markerami

widoczność markerów w zależności od zoomu przy pomocy MarkerManager'a:
http://gmaps-utility-library-dev.googlecode.com/svn/tr...



Wyślij zaproszenie do