有没有办法让标记聚类(即makerclusterer)与Fusion Table图层一起使用?似乎你必须为markerclusterer分配标记,但是当使用融合表层时,Google正在处理标记/ infowindows?仍然试图想出这个融合表的事情。
基本上寻找通过Fusion Table提供大量标记的方法
答案 0 :(得分:5)
Fusion Table图层为每个图块渲染一个额外的png图像,该图像覆盖在地图图块的顶部,包含该图块的数据点,这是服务器端渲染部件。因此,每个图块包含数据点的多个数据点。
从数据生成您自己的标记,这是MarkerClusterer所必需的,不会覆盖每个图块的图像,它会在地图上为每个数据点创建一个单独的标记,并将精灵图像叠加到该图像上。
基于此,不可能使用MarkerClusterer和FusionTablesLayer。
答案 1 :(得分: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 :(得分:1)
我认为你不会使用融合表。 IMO融合表缺乏对空间索引的支持。 A si有助于将2d复杂度降低到1d复杂度。它用于许多应用程序,如热图,树图,后代码搜索,地图应用程序。你想找尼克的希尔伯特曲线空间索引四叉树博客。
答案 3 :(得分:0)
Fusion Tables允许您使用服务器端呈现(来自Google服务器)一次查看数千个点。 Marker Clusterer通过从最近点(来自客户端浏览器)构建一组集群来解决问题。我不一定会同时使用它们,但它可能适用于您的用例,这取决于您。
您可以在此处阅读有关其工作原理的更多信息:
http://code.google.com/apis/maps/articles/toomanymarkers.html
如果您真的想要,也可以使用Fusion Tables API将数据从Fusion Tables提供给Marker Clusterer。
希望这有帮助。