设置
然后将其拉入 v3 谷歌地图,FusionTablesLayer
如下所示:
// The Google Map object
map = new google.maps.Map( mapCanvas, mapOptions );
// The FusionTables layer
layer['provinces'] = new google.maps.FusionTablesLayer({
query: {
select: '*',
from: '16L-UK_1OZxGw6DlKR8V8yP4XZrtmNdOMugRRNrQ'
},
clickable: true,
suppressInfoWindows: true // Hide the default FusionTables InfoWindow
});
之后,我将一个click
事件侦听器附加到FusionTablesLayer
,并构建一个自定义 InfoBox 对象,如下所示:
google.maps.event.addListener(layer['provinces'], 'click', function(e){
/*
Here I build the infoBox HTML using e.row[]
eg: html = '<div>' + e.row['Province'].value + '</div>';
*/
// Attach the infoBox to the click
infoBox.setContent(html);
infoBox.setPosition(e.latLng);
infoBox.open(map);
});
之后,我在地图上渲染图层:
// Render the layer on the map
layer['provinces'].setMap(map);
所有这些都有效。没问题。
问题
click 事件返回 FusionTable 相应行中的所有列,并将其附加到上面的变量e
中。
现在,FusionTable 中的每一行都有一个很长的KML 字符串——从 114kb 到 2.5MB——并且e.infoWindowHtml
在e.row['Polygon'].value
.
e: (Object)
infoWindowHtml: "_Very_ long string in here."
latLng: Q
pixelOffset: T
row: (Object)
Number: (Object)
Polygon: (Object)
Province: (Object)
由于谷歌这边的缓存很重,请求不需要很长时间,但是点击一个省份后,信息框弹出大约需要5秒。
tl;博士
该infoBox.open(map)
方法在单击 FusionTables 多边形后非常慢。我该如何加快速度?
更新
数据在第一次点击后被缓存。有没有办法在第一次点击之前缓存数据?
或者,有没有办法限制附加到的返回变量e
,即:从点击请求中删除“多边形”数据?