首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heatmap.js不呈现

Heatmap.js不呈现
EN

Stack Overflow用户
提问于 2013-12-04 19:20:22
回答 1查看 6.3K关注 0票数 23

我正在尝试将heatmap.js与谷歌地图集成起来,以完成一些可视化工作。我提到这一点:

http://www.patrick-wied.at/static/heatmapjs/example-heatmap-googlemaps.html

因此,本地示例中的代码看起来几乎相同:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">    </script>
<div id="heatmapArea" style="width:1024px;padding:0;height:768px;cursor:pointer;position:relative;"></div>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/heatmap.js"></script>
<script type="text/javascript" src="js/heatmap-gmaps.js"></script>
<script type="text/javascript">
    window.onload = function(){
    // standard gmaps initialization
    var myLatlng = new google.maps.LatLng(48.3333, 16.35);
    // define map properties
    var myOptions = {
      zoom: 3,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      disableDefaultUI: false,
      scrollwheel: true,
      draggable: true,
      navigationControl: true,
      mapTypeControl: false,
      scaleControl: true,
      disableDoubleClickZoom: false
    };
    // we'll use the heatmapArea 
    var map = new google.maps.Map($("#heatmapArea")[0], myOptions);

    // let's create a heatmap-overlay
    // with heatmap config properties
    var heatmap = new HeatmapOverlay(map, {
        "radius":20,
        "visible":true, 
        "opacity":60
    });

    // here is our dataset
    // important: a datapoint now contains lat, lng and count property!
    var testData={
            max: 46,
            data: [{lat: 33.5363, lng:-117.044, count: 1},{lat: 33.5608, lng:-117.24,     count: 1},{lat: 38, lng:-97, count: 1},{lat: 38.9358, lng:-77.1621, count: 1}]
    };

    // now we can set the data
    google.maps.event.addListenerOnce(map, "idle", function(){
        // this is important, because if you set the data set too early, the     latlng/pixel projection doesn't work
        heatmap.setDataSet(testData);
    });

};
</script>
</html>

我在我的div中得到了google地图渲染,但是heatmap本身并没有在testData提供的长时间数据点上呈现。

浏览器控制台没有错误..。

有人看到我在这里做傻事了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 00:24:51

更新

由于heatmap.js v1现在已经是退休,我还在这里提供了一个基于当前版本v2的示例:

http://jsfiddle.net/Fresh/pz4usuLe/

这是基于heatmap网站上的Google示例的。

原始答案

我看了这个,这绝对是令人困惑的。我拿走了你的代码并在这里工作:

http://jsfiddle.net/Fresh/nRQbd/

(请注意,当v1已经退役时,上面的原始示例不再起作用,要想让它与v2一起工作,请参见此http://jsfiddle.net/Fresh/pz4usuLe/)

请注意,我是如何修改testData中的数据点以获得在地图上绘制的结果:

代码语言:javascript
复制
var testData = {
    max: 3,
    data: [{
        lat: 48.3333,
        lng: 16.35,
        count: 100
    }, {
        lat: 51.465558,
        lng: 0.010986,
        count: 100
    }, {
        lat: 33.5363,
        lng: -5.044,
        count: 100
    }]
};

我还增加了每个点的计数值;一个点值为1是不可见的,但是将其值增加(例如增加到100)会增加渲染点的颜色强度(从而使其可见!)。

当在可见地图边界外绘制点时,似乎会出现此问题。我通过调试推断了这一点:

代码语言:javascript
复制
heatmap.setDataSet(testData);

(取消对“调试器”的注释,以调试web控制台中的代码)

导致数据点不呈现的heatmap-gmaps.js中的代码如下所示:

代码语言:javascript
复制
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.fromLatLngToDivPixel(latlng));
 mapdata.data.push({x: point.x, y: point.y, count: d[dlen].count});
}

您的示例中的任何数据点似乎都不包含在呈现的映射区域的当前边界内。因此,"!currentBounds.contains(latlng)“始终为真,因此没有向mapdata对象添加任何点。

这个假设似乎是正确的,因为您的dataSet中的第一点(即lat: 33.5363,lng:-117.044)实际上是在圣地亚哥(使用这个来确认http://itouchmap.com/latlong.html),在呈现的地图上是不可见的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20384017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档