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

标签 javascript polygon google-fusion-tables infowindow infobox

设置

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

相关文章:

javascript - FusionTablesLayer 多边形与 styleId 点击事件未触发

javascript - Google map 自定义信息窗口

javascript - Node.js Express 服务器端结构

javascript - 制作位置 :absolute div relative after toggleFade()

algorithm - 两个 3D 三角形,计算 z 顺序的方法(图形)

mysql - Sql 多边形查询使用子查询执行需要很长时间

c# - 以编程方式将数据插入到 FusionTables

javascript - 使用 var 键将 [Data Object] 添加到现有数组

javascript - html 中具有相同属性的两个 <div> 层

algorithm - 确定一个多边形是否包含另一个多边形