【问题标题】:Google Maps incorrect overlay after panning平移后谷歌地图覆盖不正确
【发布时间】:2013-08-09 01:03:21
【问题描述】:

我在 Google 地图上放置了一个叠加热图。更具体地说,我正在使用这个插件:http://www.patrick-wied.at/static/heatmapjs/example-heatmap-googlemaps.html

现在,我的实现与演示略有不同,因为每次发生变化时我都会更新地图,因此

google.maps.event.addListenerOnce(map, 'idle', function(event){ updateHeatMap();});

成为:

google.maps.event.addListener(map, 'idle', function(event){ updateHeatMap();});

虽然缩放和平移应该刷新,但我注意到每当我拖动地图时,覆盖“颜色”移动的距离是地图移动距离的两倍。另一方面,缩放效果很好,因此放大和缩小可以再次校正位置。

只有在触发idle 事件时刷新数据时才会发生这种情况。该演示工作正常,因为它只加载一次地图,与我的实现不同。

我怀疑下面的代码有问题,但我没有设法检测到实际问题。

HeatmapOverlay.prototype.setDataSet = function(data){

var me = this,
    currentBounds = me.map.getBounds(),
    mapdata = {
        max: data.max,
        data: []
    },
    d = data.data,
    dlen = d.length,
    projection = me.getProjection(),
    latlng, point;

me.latlgs = [];

while(dlen--){    
  latlng = new google.maps.LatLng(d[dlen].lat, d[dlen].lng);
    if(!currentBounds.contains(latlng)) { 
        continue; 
    }

  me.latlngs.push({latlng: latlng, c: d[dlen].count});    point = me.pixelTransform(projection.fromLatLngToContainerPixel(latlng));
  mapdata.data.push({x: point.x, y: point.y, count: d[dlen].count});
}
me.heatmap.clear();
me.heatmap.store.setDataSet(mapdata); }

感谢您的见解,因为我现在已经浪费了太多时间来解决这个问题......

非常感谢,非常感谢!

【问题讨论】:

    标签: javascript google-maps-api-3 overlay heatmap panning


    【解决方案1】:

    以上这些都无所谓。

    我意识到 Google 有自己的热图库,我转换了我的代码以使用它。效果很好!

    https://developers.google.com/maps/documentation/javascript/layers#JSHeatMaps

    【讨论】:

    • 我仍然对该问题的解决方案感兴趣,因为 Google 地图热图图层没有足够的动画性能。此外,这个示例 (crimeheatmap.ca) 似乎通过使用 window.requestNextAnimationFrame() 解决了这个问题,而不是在给定的时间间隔更新数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2021-01-03
    相关资源
    最近更新 更多