6

有没有办法让标记聚类(即makerclusterer)与 Fusion Table 层一起工作?似乎您必须为 markerclusterer 分配标记,但在使用融合表层时,Google 正在处理标记/信息窗口?仍在试图弄清楚这个融合表的事情。

基本上是在寻找一种方法来聚集通过 Fusion Table 提供的大量标记

4

4 回答 4

5

Fusion Table Layers 为覆盖在地图图块顶部的每个图块渲染一个额外的 png 图像,其中包含该图块的数据点,这是服务器端渲染部分。所以它是每个包含数据点的图块的多个数据点。

MapsIt.png 已在图层上定位数据点的地图图块

从数据中生成您自己的标记,这对于 MarkerClusterer 来说是必需的,它不会在每个图块上叠加图像,它会在地图上为每个数据点创建一个单独的标记,并在其上叠加一个精灵图像。

用于每个数据点的 Marker Sprite 图像

基于此,无法使用 MarkerClusterer 和 FusionTablesLayer。

于 2011-10-26T20:40:59.023 回答
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)是全局变量。您可以在此处查看完整的工作示例。

于 2011-11-10T03:49:26.577 回答
1

我不认为你会得到它与融合表一起工作。IMO 融合表缺乏对空间索引的支持。A si 有助于将 2d 复杂度降低到 1d 复杂度。它用于许多应用程序,如热图、树图、邮政编码搜索、地图应用程序。您想查找 Nick 的希尔伯特曲线空间索引四叉树博客。

于 2011-07-26T20:53:45.770 回答
0

Fusion Tables 允许您使用服务器端渲染(来自谷歌服务器)一次查看数千个点。Marker Clusterer 通过从最近的点(来自客户端浏览器)构建一组集群来解决这个问题。我不一定会同时使用它们,但它可能适用于您的用例,这取决于您。

您可以在此处阅读有关它们如何工作的更多信息:

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

如果您真的想要,您可以使用 Fusion Tables API 将数据从 Fusion Tables 提供给 Marker Clusterer。

希望这可以帮助。

于 2011-07-27T09:39:33.020 回答