2011-07-26 17 views
6

işaretleyici kümeleme almanın bir yolu (yani makerclusterer) Fusion Tablosu katmanla çalışmak var mı? Google, bir füzyon tablosu katmanı kullanırken markerclusterer işaretleyicileri atamak zorunda gibi görünüyor, markerleri/infowindows mu? Hala bu füzyon masası olayını anlamaya çalışıyor. Temelde belirteçlerin büyük miktarlarda küme bir yol arıyoruzMarker Kümelenme - Füzyon Tablosu Katman - Google Maps v3

Fusion Tablo

cevap

0

Füzyon Tabloları Eğer (google sunucularından) sunucu tarafında oluşturma kullanılıyorsa seferde noktaları binlerce görüntülemenize olanak sağlar. Marker Clusterer, en yakın noktadan (istemci tarayıcısından) bir küme kümesini oluşturarak sorunu çözer. İkisini de aynı anda kullanmazdım, ama kullanım durumunuz için işe yarayabilir.

Sen burada nasıl çalıştığı hakkında daha fazla bilgi edinebilirsiniz:

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

gerçekten de seni Marker Clusterer için Füzyon Tabloları veri beslemek için Füzyon Tabloları API kullanabilirsiniz isteseydik.

Bu yardımcı olur umarım.

1

yoluyla sağlanıyor Ben bunu bir füzyon masaya ile çalışmak alacak sanmıyorum. IMO füzyon tablosunda uzamsal bir endeks desteğinden yoksundur. Bir si, 2d karmaşıklığını 1d karmaşıklığına düşürmeye yardımcı olur. Isı haritaları, treemaps, posta kodu araması, haritalar uygulaması gibi birçok uygulamada kullanılır. Nick'in hilbert eğrisi uzamsal dizin dörtgeni blogu için bakmak istiyorsun.

5

Füzyon Tablosu Katmanlar bu karo için veri noktalarını içeren, harita karo üzerine katman alır ve her bir parça için ek bir png resmi işlemek, bu bölümü oluşturulurken sunucu tarafı. Bu yüzden veri noktaları içeren karo başına birden fazla veri noktası.

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

, MarkerClusterer için gerekli olan verilerden kendi belirteçleri oluşturuluyor karo başına bir görüntü paylaşımı yapmayan, her veri noktası için harita üzerinde bireysel Marker oluşturur ve üzerine bir peri görüntü bindirmeleri söyledi. Buna dayanarak

Marker Sprite image used for each data point

, MarkerClusterer ve FusionTablesLayer kullanmak mümkün değildir.

+0

Bu gönderiye bakıp bunu kendi başıma araştırıyorum. Bir yorum bıraktığımı düşündüm evet, Google Fusion Tables Ekibine göre mümkündür. [Https://groups.google.com/d/msg/fusion-tabloları-users-group/eW-der8-diM/UnaqHkpgeDcJ] – danagerous

+0

@danagerous Bir FusionTablesLayer üzerinde yapmanın ve referanslardan bahsetmiş olduğunuz yayın gibi bir Fusion Tablosundaki verileri kullanmanın arasında büyük bir fark var. Bir Füzyon Tablosundan veri kullanarak bunu yapmak mümkündür, sunucu tarafında işlenen bir FusionTablesLayer kullanarak bunu yapmak hala mümkün değildir. Sunucu tarafında, her bir yakınlaştırma düzeyinde gruplandırılmış öğelerin bir Katmanı oluşturmak zorunda kalacaklardı. – Freddy

+0

@danagerous bağlantınızın bozuk olduğu görülüyor. Alternatif biriniz var mı? – tentaclenorm

5

Bu kendi kodum. Tekniği daha önceki bağlantıda deniyordum ama benim için çalışmadı. Yani böyle yaptım.

Öncelikle ben, düzenli grafik API sorgusu ile

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); 
} 

Sonraki, benim handleQueryResponse içinde, ben dinamik olarak oluşturulan belirteçleri füzyon tablo sorgulanan ve 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); 
} 
Bu durumda

onu ekledi Ana harita, işaretleyici dizisi (aşağıdaki koddaki mc) genel değişkenlerdir. Tam çalışma örneğini here görebilirsiniz.

+2

Bu sitede yaptıklarını özetleyebilir misiniz? link rot? – user7116

+0

Bu ilginç, FusionTableLayer'da yüklü KML işaretçileri ile aynı şeyi yapmak istiyorum. Herhangi bir örnek var mı –

+0

Uzun zaman önce yaptım, o zamandan beri google maps tabanlı bir çalışma yapmadım. – Ayush