Ron*_*ieT 6 google-maps google-maps-api-3 google-fusion-tables
有没有办法让标记聚类(即makerclusterer)与Fusion Table层一起使用?似乎你必须为markerclusterer分配标记,但是当使用融合表层时,Google正在处理标记/ infowindows?还在努力想出这个融合表的事情.
基本上寻找一种方法来聚集通过Fusion Table提供的大量标记
Fusion Table图层为每个图块渲染一个额外的png图像,该图像覆盖在地图图块的顶部,包含该图块的数据点,这是服务器端渲染部件.因此,每个图块包含数据点的多个数据点.
从数据生成您自己的标记(MarkerClusterer所必需的)不会覆盖每个图块的图像,它会在地图上为每个数据点创建单独的标记,并将精灵图像叠加到该图像上.
基于此,不可能使用MarkerClusterer和FusionTablesLayer.
这是我自己的代码.我在之前的链接中尝试了这种技术,但它对我不起作用.所以这就是我做到的.
首先,我使用常规图表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);
}
Run Code Online (Sandbox Code Playgroud)
接下来,在我的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);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,主映射,标记数组(下面代码中的mc)是全局变量.你可以在这里看到完整的工作示例.
小智 0
Fusion Tables 允许您使用服务器端渲染(来自 google 服务器)一次查看数千个点。标记聚类器通过从最近的点(从客户端浏览器)构建一组聚类来解决该问题。我不一定会同时使用它们,但它可能适合您的用例,这取决于您。
您可以在此处阅读有关它们如何工作的更多信息:
http://code.google.com/apis/maps/articles/tooomymarkers.html
如果您确实也想要,可以使用 Fusion Tables API 将数据从 Fusion Tables 提供给标记聚类器。
希望这可以帮助。
归档时间: |
|
查看次数: |
8971 次 |
最近记录: |