如何在FusionTables图层单击上加快infoBox.open()的速度?

时间:2013-01-30 09:46:42

标签: javascript polygon google-fusion-tables infowindow infobox

设置

我有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秒


TL;博士

单击FusionTables多边形后,infoBox.open(map)方法非常慢。我如何加快速度?

更新

首次点击后会缓存数据。有没有办法在第一次点击之前缓存数据

或者,有没有办法限制附加到e的返回变量,即:从点击请求中删除'Polygon'数据?

2 个答案:

答案 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是相当大的,这就是你的瓶颈 - 你不能简化它们吗?对于体面的概述,您不需要那么多细节。这应该加快速度。 (尝试用一个矩形替换一个省,看看是否有帮助)