设置
我有a polygon map of all the Provinces in South Africa .
然后将其作为 FusionTablesLayer
拉入 v3 Google map ,如下所示:
// 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);
});
之后,我在 map 上渲染图层:
// Render the layer on the map
layer['provinces'].setMap(map);
所有这些都有效。没问题。
问题
点击事件返回FusionTable相应行中的所有列,并将其附加到上面的变量e
。
现在,FusionTable 中的每一行都有一个非常长的 KML 字符串 - 从 114kb 到 2.5MB - 并且在 e.infoWindowHtml
以及 中返回>e.row['多边形'].value
.
e: (Object)
infoWindowHtml: "_Very_ long string in here."
latLng: Q
pixelOffset: T
row: (Object)
Number: (Object)
Polygon: (Object)
Province: (Object)
由于 Google 方面的缓存较多,该请求不会花费很长时间,但在点击某个省份后,需要大约 5 秒才能弹出信息框。
tl;博士
单击 FusionTables 多边形后,infoBox.open(map)
方法非常慢。如何加快速度?
更新
第一次点击后数据会被缓存。有没有办法在第一次点击之前缓存数据?
或者,有没有办法限制附加到 e
的返回变量,即:从点击请求中删除“多边形”数据?
最佳答案
我偶然找到了答案。
您可以通过在“更改信息窗口布局...”窗口中选择适当的列来自定义返回的内容。
map 选项卡工具>
更改信息窗口布局...
我取消选择“多边形”,并选择“数字”和“省份”。
然后,您选择的列将附加到 click
事件监听器中的 e
:
e: (Object)
infoWindowHtml: "Better string"
latLng: Q
pixelOffset: T
row: (Object)
Number: (Object)
Province: (Object)
重要提示(这就是运气)
选择正确的列后,您需要以某种有意义的方式更改 FusionTable数据 to clear the strong caching on Google's side .
返回在自动
选项卡中选择的列。
似乎自定义
选项卡被忽略。
关于javascript - 如何加快 FusionTables 层上的 infoBox.open() 单击速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14600871/