Witam.
Czy ktoś potrafi mi pomóc w zrozumieniu czemu nie działa mi w skrypcie opcja ukrywania markerów przy pomniejszeniu mapy?
Użyłem getZoom z marker.setMap a także z marker.visible i nic nie daje mi rezultatu chociaż w innych skryptach z użyciem google maps api działa bez zarzutu.
Część kodu odpowiedzialna za widoczność markerów:
google.maps.event.addListener(map, 'zoom_changed', function() { zoom = map.getZoom(); if (zoom < 10) { marker.visible = false; } else { marker.visible = true; } });
Obsługa zoom powinna być wyprowadzona poza pętlę tworzącą markery (jaki jest sens podpinania takiej funkcji przy tworzeniu każdego markera?). Tam też powinna być iteracja po wszystkich markerach i chowanie/ukrywanie w zależności od powiększenia mapy.
Podałem Ci wskazówkę. Również nie odnosi skutku?
Spróbowałem w ten sposób:
google.maps.event.addListener(map, 'zoom_changed', function() { var zoom = map.getZoom(); for (i = 0; i < locations.length; i++) { markers[i].setVisible(zoom <= 10); } });
Dlaczego nadal funkcja obsługująca zdarzenie zoom_changed jest w środku pętli dodającej markery?
markery są tworzone w czasie rzeczywistym i usuwanie przez graczy. Aby w grze aktualizowały się zaraz po wykonaniu działania innej opcji nie da rady zastosować.
Co do problemu który miałem dokładniej mi to wyjaśnili na stackoverflow.
Wystarczyło potem odpowiedni wzór zastosować i tyle.
W moim projekcie już perfekt hula opcja zoom. Podpiąłem złą tablicę i dlatego nie działało. Teraz już ok.
Problem mam jeszcze z przestawieniem ikon markerów by znajdowały się niżej niż w tej chwili i nie wiem na razie jak to obejść.
Może ktoś wie jak to zrobić.
marker = new google.maps.Marker({ position: latlng, map: map, visable: true, icon: icon_p });
Nie ma znaczenia, że markery są tworzone w czasie rzeczywistym. Zdarzenie zoom_change nie dotyczy markerów tylko mapy i takie powinno być obsłużone poza pętlą tworzącą markery. Podpinasz raz, w środku przebiegasz po tablicy markerów i włączasz/wyłączasz.
Teraz oczywiście iterujesz po pętli markerów, o czym pisałem wcześniej, natomiast nadal bezsensownością jest podpinanie zdarzenia tyle razy ile tworzysz markerów. W ten sposób przy każdym przybliżaniu/oddalaniu mapy będziesz przelatywał po pętli markerów nie 1 raz, a tyle razy ile tych markerów tworzysz na początku. Jeśli więc utworzysz 100 markerów , to pętla for (i = 0; i < boxes2.length; i++) wykona się 100 razy, zamiast jednokrotnie.
Być może Tobie jest potrzebna zmiana właściwości anchor lub origin markera. Nie wiem jednak co znaczy, że marker ma być niżej. Niżej jeśli chodzi o współrzędne geograficzne, czy niżej w pikselach.
Pewne jest że masz dużo racji w tym co piszesz. Jednak moja świadomość kodowania jest jeszcze zbyt niska by to zrobić tak jak piszesz.
Próbowałem to wyprowadzić poza pętle i za każdym razem kończyło się to tym że dopiero po odświeżeniu strony ręcznie aktualizowały się znaczniki.
Dla mnie i tak sukces jest wprowadzenie rozwiązań które wg. wielu opinii nie mają prawa zaistnieć we współdziałaniu z api google maps (a raczej wymagają głębszej wiedzy niż posiadam).
Co do umiejscowienia znaczników. Chodzi raczej o piksele względem pozycji oryginalnej ponieważ w wypadku zmiany współrzędnych geograficznych automatycznie hexagony mi wariują.
Próbowałem z anchor:
var icon_p = { url: icon_m, origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(7, 9), labelOrigin: new google.maps.Point(0,0) };
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)