2009-04-29 12 views

Odpowiedz

0

możliwych sposobów rozwiązania tego problemu:

  • zbudować JSON na serverside, zależnie do zoomlevel (Con: wymaga przeładowania po zoom, pro: tylko małe amouts danych muszą być załadowane)
  • Dołącz informacje o tym, jak znacznik jest dostępny w danych JSON (pro: tylko dane jednorazowe muszą być załadowane, con: iteracja poprzez dane z JavaScript)
  • Oblicz widoczne znaczniki w JavaScript (PRO: bardzo dynamiczny, CON: duże obciążenie obliczeń)
8

istnieje pojęcie „prostokąt,” na widoku mapy. Api mapy dostarcza ci to jako dwie długie/długie pary współrzędnych - jedna dla narożnika SW, a druga dla narożnika NE.

Jeśli masz niestandardową usługę danych, która zwraca punkty JSON, musisz zaakceptować te współrzędne jako dane wejściowe i odpowiednio dostosować zwracany zestaw danych (najprawdopodobniej jako klauzulę WHERE w instrukcji SELECT).

Nie mam szczegółów na temat zapamiętywania tego prostokąta obwiedni, ale do tego właśnie służą API docs.

1

Tak, zrobiłem coś podobnego we wniosku dla władz lokalnych, w którym pokazywaliśmy objętość każdego domu poddawanego recyklingowi w 6000 nieparzystych gospodarstw domowych. Ponieważ całkowita ilość danych (które zawierały adres i informacje statystyczne dla każdego gospodarstwa domowego) była dość duża, cofając cały plik danych jednym ruchem spowodował, że przeglądarka zawiesiła się.

Zamiast tego w wywołaniu AJAX do bazy danych wysłaliśmy współrzędne prostokąta ograniczającego (szerokość i długość geograficzna) obszaru mapy, a następnie zwróciliśmy tylko te punkty, które widzimy. Ze względu na naturę aplikacji, przycisk użytkownika do "pobierania danych" był całkiem do zaakceptowania, ale jest oczywiście wiele innych wariacji, na które można zagrać w temacie - po dostarczeniu współrzędnych granicznych do strony serwera można zdecydować, co do zrobienia - na przykład tylko zwrócić podzbiór, jeśli poziom powiększenia jest zbyt wysoki. Powinieneś również być w stanie złapać zdarzenie losowania mapy i automatycznie wykonać to działanie.

1

Po zmianie powiększenia wyślij nowy poziom zoomu do usługi JSON i zwróć znaczniki, które powinny być widoczne na tym poziomie. Użyj addMarkers(), aby dodać wyniki do MarkerManager i uczynić je widocznymi tylko na bieżącym poziomie powiększenia.

Inne odpowiedzi tutaj sugerują zwracanie tylko znaczników w bieżącym widoku, ale możesz również po prostu zwrócić wszystkie znaczniki na tym poziomie powiększenia. To zależy od tego, ile wiesz o markerach, które chcesz pokazywać na każdym poziomie.

6

Jest nowa biblioteka nazywa MarketClustered które pomogą Ci

alt text http://gmaps-samples.googlecode.com/svn/trunk/images/screenshot_clusterereffect.jpg

Nawet jeśli dane są zbyt duże, myślę, że będzie lepiej karmić mapa będzie wszystkie dane, i niech go zrób to.

+7

Ponad 2 000 markerów z MarkerClustererem jest dla mnie za wolne (w Firefoksie - Chrome i Safari 4 są dobre do około 8 000). Chociaż zależy to od gęstości markerów. Zgadzam się, że prawdopodobnie lepiej byłoby zaimportować dane za jednym razem, a nie przesyłać fragmentów, gdy zmienia się zoom. –

+1

Dobrze, że masz prawdziwe dane. Wzniesiony komentarz. –