标记聚类 - 融合表层 - Google Maps v3

时间:2011-07-26 19:03:07

标签: google-maps google-maps-api-3 google-fusion-tables

有没有办法让标记聚类(即makerclusterer)与Fusion Table图层一起使用?似乎你必须为markerclusterer分配标记,但是当使用融合表层时,Google正在处理标记/ infowindows?仍然试图想出这个融合表的事情。

基本上寻找通过Fusion Table提供大量标记的方法

4 个答案:

答案 0 :(得分:5)

Fusion Table图层为每个图块渲染一个额外的png图像,该图像覆盖在地图图块的顶部,包含该图块的数据点,这是服务器端渲染部件。因此,每个图块包含数据点的多个数据点。

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

从数据生成您自己的标记,这是MarkerClusterer所必需的,不会覆盖每个图块的图像,它会在地图上为每个数据点创建一个单独的标记,并将精灵图像叠加到该图像上。

Marker Sprite image used for each data point

基于此,不可能使用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。

希望这有帮助。