2

设置

我有一张南非所有省份的多边形地图

然后将其拉入 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.infoWindowHtmle.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,即:从点击请求中删除“多边形”数据?

4

2 回答 2

2

我偶然找到了答案。

您可以通过在“更改信息窗口布局...”窗口中选择适当的列来自定义返回的内容。

Map tab Tools > Change info window layout...

我取消选择“多边形”,并选择了“数字”和“省”。

然后将您选择的列附加到eeventListener 中click

e: (Object)
    infoWindowHtml: "Better string"
    latLng: Q
    pixelOffset: T
    row: (Object)
        Number: (Object)
        Province: (Object)

重要提示(这是运气)

选择正确的列后,您需要以某种有意义的方式更改 FusionTable数据,以清除 Google 方面的强缓存

返回选项卡中选择的列Automatic。似乎Custom选项卡被忽略了。

于 2013-01-30T11:32:12.263 回答
1

第二次打开弹出窗口很快,所以我认为它被缓存了。KML 相当大,那是您的瓶颈 - 您不能简化它们吗?对于一个体面的概述,您不需要那么多细节。那应该加快速度。(尝试用一个矩形替换一个省份,看看是否有帮助)

于 2013-01-30T10:38:07.313 回答