我有a polygon map of all the Provinces in South Africa。
然后将其作为FusionTablesLayer
添加到v3 Google地图中,如下所示:
// 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
中都会返回。< / p>
e: (Object)
infoWindowHtml: "_Very_ long string in here."
latLng: Q
pixelOffset: T
row: (Object)
Number: (Object)
Polygon: (Object)
Province: (Object)
由于Google方面存在大量缓存,请求不会花很长时间,但点击一个省后,会弹出infoBox大约需要5秒。
单击FusionTables多边形后,infoBox.open(map)
方法非常慢。我如何加快速度?
首次点击后会缓存数据。有没有办法在第一次点击之前缓存数据?
或者,有没有办法限制附加到e
的返回变量,即:从点击请求中删除'Polygon'数据?
答案 0 :(得分:2)
我偶然找到了答案。
您可以通过在更改信息窗口布局... 窗口中选择正确的列来自定义返回的内容。
地图标签 工具>
更改信息窗口布局...
我取消选择'Polygon',并选中'Number'和'Province'。
然后,您选择的列将附加到e
eventListener中的click
:
e: (Object)
infoWindowHtml: "Better string"
latLng: Q
pixelOffset: T
row: (Object)
Number: (Object)
Province: (Object)
选择正确的列后,您需要以某种有意义的方式to clear the strong caching on Google's side更改FusionTable 数据。
返回Automatic
标签中选择的列。
似乎忽略了Custom
标签。
答案 1 :(得分:1)
第二次打开弹出窗口时速度很快,所以我认为它会被缓存。 KML是相当大的,这就是你的瓶颈 - 你不能简化它们吗?对于体面的概述,您不需要那么多细节。这应该加快速度。 (尝试用一个矩形替换一个省,看看是否有帮助)