2011-07-26 39 views
6

有沒有辦法讓標記聚類(即makerclusterer)與Fusion表層一起工作?看起來您必須在使用融合表圖層時將標記分配給markerclusterer,Google正在處理標記/ infowindows?仍然試圖找出這個融合表的事情。標記羣集 - 融合表層 - 谷歌地圖v3

基本上在尋找一種方式來聚集大量的標記被通過融合表

回答

0

Fusion Tables允許您使用服務器端呈現(來自Google服務器)一次查看數千個點。 Marker Clusterer通過從最近的點(從客戶端瀏覽器)構建一組集羣來解決問題。我不一定會同時使用它們,但它可能適用於您的使用情況,這取決於您。

你可以閱讀更多有關他們在這裏是如何工作的:

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

如果你真的想太多,你可以使用Fusion Tables的API從數據融合表的標記聚類器填充數據。

希望這會有所幫助。

1

提供的,我不認爲你會得到它的融合工作表中。 IMO的融合表缺乏對空間索引的支持。 si有助於將2D複雜度降低到1d複雜度。它用於許多應用程序,如熱圖,樹圖,郵政編碼搜索,地圖應用程序。你想要找Nick的希爾伯特曲線空間索引四叉樹博客。

5

Fusion Table Layers爲地圖塊頂部的每個圖塊渲染一個額外的png圖像,其中包含該圖塊的數據點,這是服務器端渲染部分。所以它是每個tile包含數據點的多個數據點。

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

生成自己的標記從數據中,這是必要的MarkerClusterer,不覆蓋每瓦的圖像,它創建的地圖每個數據點上的個別標記和上覆蓋精靈形象那。

Marker Sprite image used for each data point

在此基礎上,它是不可能使用MarkerClusterer和FusionTablesLayer會。

+0

跑過這篇文章爲自己研究這個。以爲我會留下評論,是的,根據Google Fusion Tables Team的說法是可以的。 [https://groups.google。com/d/msg/fusion-tables-users-group/eW-der8-diM/UnaqHkpgeDcJ] – danagerous

+0

@danagerous在FusionTablesLayer上執行此操作並使用Fusion Table中的數據(例如您提到的參考文獻)之間有很大區別。使用來自Fusion Table的數據可以做到這一點,但仍然不可能使用服務器端提供的FusionTablesLayer來完成。他們必須在服務器端的每個縮放級別創建一個分組項目層。 – Freddy

+0

@danagerous你的鏈接似乎被打破。你有另一個嗎? – tentaclenorm

5

這是我自己的代碼。我在早期的鏈接中嘗試了這種技術,但它並不適合我。所以這就是我做到的。

首先我查詢的融合表與常規圖表API查詢

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

接下來,在我的handleQueryResponse,我動態創建的標記,並將其添加到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); 
} 

在這種情況下,主映射,標記數組(mc,代碼如下)是全局變量。你可以看到完整的工作示例here

+2

您可以總結一下他們在該網站上做了什麼,以便您的答案不受限制鏈接腐爛? – user7116

+0

這很有趣,我想在FusionTableLayer中加載KML標記。你有什麼樣的例子嗎? –

+0

我做了很久很久很久沒有做過任何谷歌地圖工作。 – Ayush