2011-07-26 17 views
6

Czy istnieje sposób na zbieranie znaczników (np. makerclusterer) do pracy z warstwą stołu Fusion? Wydaje się, że musisz przypisać markery do Markclusterer, ale gdy używasz warstwy stołu fuzyjnego, Google obsługuje znaczniki/infowindows? Nadal próbuję odgadnąć, co to za fuzja.Klastrowanie znaczników - warstwa tabel Fusion - Google Maps v3

Zasadniczo szukasz sposobu na klastrze duże ilości markerów udostępnione za pośrednictwem tabeli Fusion

Odpowiedz

0

Tabele Fusion umożliwiają wyświetlanie tysięcy punktów jednocześnie za pomocą renderowania po stronie serwera (z serwerów Google). Klastra Marker rozwiązuje problem, budując zestaw klastrów z najbliższych punktów (z przeglądarki klienta). Nie używałbym ich jednocześnie w tym samym czasie, ale może to zadziałać w twoim przypadku użycia, to zależy od ciebie.

Możesz przeczytać więcej informacji o tym, jak one działają tutaj:

http://code.google.com/apis/maps/articles/toomanymarkers.html

Jeśli naprawdę chciał też można użyć API Fusion Tables karmić dane z Fusion Tables do znacznika Clusterer.

Mam nadzieję, że to pomoże.

1

Nie sądzę dostaniesz pracować ze stołem fusion. IMO w tabeli fuzji brakuje obsługi indeksu przestrzennego. Wartość A pomaga zredukować złożoność 2d do złożoności 1d. Jest wykorzystywany w wielu aplikacjach, takich jak mapa termiczna, treemaps, wyszukiwanie kodów pocztowych, aplikacja map. Chcesz poszukać blogu quadtree o indeksie przestrzennym Hilberta.

5

Warstwy tabeli Fusion renderują dodatkowy obraz png dla każdego kafelka, który zostanie nałożony na kafelek mapy, zawierający punkty danych dla tego kafelka, jest to część renderująca po stronie serwera. Jest to więc wiele punktów danych na kafelek, który zawiera punkty danych.

MapsIt.png map tile with data points already positioned on the layer

Generowanie własne znaczniki z danymi, które jest niezbędne do MarkerClusterer, nie nakładanie obrazu za płytki, tworzy pojedynczy znacznik na mapie dla każdego punktu danych i nakłada obraz na sprite że.

Marker Sprite image used for each data point

W oparciu o to, że nie jest możliwe użycie MarkerClusterer i FusionTablesLayer.

+0

Przebiegłem ten post badając to dla siebie. Pomyślałem, że zostawię komentarz, że tak, jest to możliwe zgodnie z zespołem Google Fusion Tables. [https://groups.google.com/d/msg/fusion-tabele-users-grupa/EW-der8-diM/UnaqHkpgeDcJ] – danagerous

+0

@danagerous Jest duża różnica między robi to na FusionTablesLayer i wykorzystując dane z tabeli Fusion jak słupka pan wspomniał referencje. Jest to możliwe do wykonania, że ​​za pomocą danych z Tabeli syntezy, to jednak nie jest możliwe, aby to zrobić za pomocą FusionTablesLayer pozbawionej po stronie serwera. Będą musieli utworzyć warstwę zgrupowanych przedmiotów na każdym poziomie powiększenia po stronie serwera. – Freddy

+0

@danagerous Twój link wydaje się być uszkodzony. Czy masz alternatywny? – tentaclenorm

5

To jest mój własny kod. Próbowałem tej techniki we wcześniejszym łączu, ale to nie działało dla mnie. Tak to zrobiłem.

pierwszy zapytaliśmy tabelę fuzję z kwerendy api regularne wykresu

function initialize() { 
    mapMain = new google.maps.Map(document.getElementById('map-canvas'), { 
     center: new google.maps.LatLng(37.4, -100.1), 
     zoom: 3, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    mc = new MarkerClusterer(mapMain); 
    var queryText = encodeURIComponent("select wikipedia_article, xy from "+tableid); 
    var query = new google.visualization.Query("https://www.google.com/fusiontables/gvizdata?tq="+queryText); 
    query.send(handleQueryResponse); 
} 

Następnie w moim handleQueryResponse, dynamicznie tworzone znaczniki i dodać go do Mapclusterer

function handleQueryResponse(response){ 
    dataTable = response.getDataTable(); 

    for(var i=0; i< dataTable.getNumberOfRows();i++){   
     var hrefval = dataTable.getValue(i,0).toString(); 

     var arr = dataTable.getValue(i,1).toString().split(" ");    
     var latlng = new google.maps.LatLng(arr[0], arr[1]); 

     var marker = new google.maps.Marker({ 
      position: latlng, 
      map:mapMain 
     }); 
     fn = markerClick(i, marker); 
     google.maps.event.addListener(marker,'click', fn);   
     markers.push(marker); 
    } 
    mc.addMarkers(markers); 
} 

W tym przypadku, główna mapa, tablica znaczników (mc w poniższym kodzie) są zmiennymi globalnymi. Możesz zobaczyć pełny przykład roboczy: here.

+2

mógłbyś podsumować to, co zrobili w tym miejscu tak, że odpowiedź nie jest przedmiotem link rot? – user7116

+0

To ciekawe, chciałbym zrobić to samo ze znacznikami KML załadowanych FusionTableLayer. Czy masz jakiś przykład? –

+0

Zrobiłem to od dawna, od tego czasu nie wykonałem żadnych prac opartych na mapach Google. – Ayush