【问题标题】:How do I speed up infoBox.open() on FusionTables layer click?如何加快 FusionTables 图层单击上的 infoBox.open()?
【发布时间】:2013-01-14 02:00:50
【问题描述】:

设置

我有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);

所有这些都有效。没问题。


问题

点击事件返回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的返回变量,即:从点击请求中删除“多边形”数据?

【问题讨论】:

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


    【解决方案1】:

    我偶然找到了答案。

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

    地图标签工具&gt;更改信息窗口布局...

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

    您选择的列随后会附加到click eventListener 中的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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您好,谢谢您的回复。不幸的是,简化 KML 文件不是一种选择,因为它们是由外部源更新的。我现在正在玩,试图在click之前缓存必要的数据(因此删除返回的e,并加快一切速度)。如果您对此有任何想法,请告诉我。 :{D
      • 我看到您的问题或多或少得到了解决。只想补充一点,您可以在更新期间使用 OGR2OGR 工具 gdal.org/ogr2ogr.html 简化大型 KML 文件。在更新我的 kml 文件时,我也在服务器端使用它。它需要使用一些 sss 技术,如 PHP。干杯!
      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多