标签:
首先我们得做一些准备:
首先创建一个热点格网图对象。由于热点格网图只负责矢量数据的渲染,所以初始化只需要设置一个图层的名称即可。
//创建一个名为“myHeatGrid”的热点格网图层。
var heatGridLayer = new SuperMap.Layer.HeatGridLayer("myHeatGrid");
然后将此图层添加到map里面。
//向map中添加图层
map.addLayers([heatGridLayer]);
首先需要获取一个点数组(SuperMap.Feature.Vector数组), 数据可以从服务器查询我们之前准备好的点数据集,也可以使用本地数据,不过都只能是点数据。 如下的形式:
var heatFeatures = [feature1,feature2,......,featureN];
其次需要一个格网子对象数组主要用于对数据进行分段渲染。此数组的每一个子对象必须有如下三个属性:
//创建一个格网子对向数组
var items = [
{
//在此例子中代表格网中点数据数量的下限,也就是至少为0个
start:0,
//在此例子中代表格网中点数据数量的上限,也就是至多不超过5个(不包含5个)
end:5,
//代表满足一个格网中数据数量大于等于0且小于5的格网按照如下的style进行渲染
style:{
//格网的边框颜色
strokeColor: "#C69944",
//格网边框的宽度
strokeWidth: 1,
//格网内部填充色
fillColor: "#B8E4B8",
//格网的透明度
fillOpacity: 0.5
}
},
{
start:5,
end:10,
style:{
strokeColor: "#C69944",
strokeWidth: 1,
fillColor: "#66dd66",
fillOpacity: 0.5
}
},
...
];
设置相关参数:
//设置热点格网图的格网子对象数组,如果不设置则所有格网都是统一默认style
heatGridLayer.items=items;
//将数据添加到图层中
heatGridLayer.addFeatures(heatFeatures);
然后一个简单的热点格网图我们就创建成功了,如下是查询的全球各国首都制作的格网图效果:

此范例默认表示的是数量,也就是 labelMode 为默认0,可以用于与人口密度的展示方面。
当 labelMode 属性设置为非0时,dataField 属性也必须设置,需要制定一下数据的来源,如:
//设置为格网中所有数据的平均值
heatGridLayer.labelMode = SuperMap.Layer.HeatGridLayer.LABELMODE_MEAN ;
//假设我们的点数据集的权重字段weightName为“temperature”,那么此处需要指定
//如果数据时查询出来的,那么在 feature.attributes 里面会自动存放权重,如果是自己创建的Feature,那么必须自己往feature.attributes里添加权重值。
heatGridLayer.dataField = "temperature";
保证数据存在权重,客户端相应设置权重字段就能使用平均值、最大最小的模式
这两个参数用于设置格网的高度和宽度,单位是像素,默认都是50像素的大小。热点格网图中的点数据聚散计算就是由格网的宽高决定的, 聚散计算时会将格网大小换算为地理范围,将内部所有点聚散为一个格网,所以格网的宽高越大,相对来说聚散的点越多,而格网数量会越少, 格网过少效果不好,过多影响浏览器性能,从而用户需要根据自己的需求设置宽高。格网宽高必须都大于0,格网宽高可随意设置,如:
//设置格网的高度
heatGridLayer.gridHeight = 10 ;
//设置格网的宽度
heatGridLayer.gridWidth = 25;
这两个参数用于控制点击格网时的放大效果, isZoomIn 默认为true,代表默认情况点击格网地图会进行放大, zoomInNumber 默认为1,代表点击格网时地图放大一级。 这两个参数可以控制点击格网是否放大以及放大的程度,如:
//设置点击格网时可以放大地图
heatGridLayer.isZoomIn = true ;
//设置点击格网时地图放大2级
heatGridLayer.zoomInNumber = 2;
设置热点格网图的扩散级别,当地图放大到这一级时格网会进行扩散,还原为点数据,默认为3,如:
//设置格网图放大到第4级时进行格网扩散
heatGridLayer.spreadZoom = 4 ;
扩散后的效果如下:

热点格网图支持很多事件,如:
这里举例说明一下最常用的clickFeature事件,当地图、底图以及heatGridLayer都准备完毕时注册事件如下:
//初始化格网选择事件控件
var select = new SuperMap.Control.SelectGrid(heatGridLayer,{
callbacks:{
//绑定clickFeature
clickFeature:function(f){
//初始化信息框
openInfoWin(f);
}
}
});
//将控件添加进map
map.addControl(select);
//激活控件
select.activate();
弹出信息框的代码如下:
function openInfoWin(feature){
//获取feature的几何对象
var geo = feature.geometry;
//获取geo的bounds
var bounds = geo.getBounds();
//获取bounds的中心点
var center = bounds.getCenterLonLat();
//创建popup的内容
var contentHTML = "<div style=‘font-size:.8em; opacity: 0.8; overflow-y:hidden;‘>";
contentHTML += "<div>"+"SMID:"+feature.data.SMID+"<br />"+"国家:"+feature.data.COUNTRY+"<br />"+"首都:"+feature.data.CAPITAL+"</div></div>";
//创建一个popup弹出信息框
var popup = new SuperMap.Popup.FramedCloud("popwin",
new SuperMap.LonLat(center.lon,center.lat),
null,
contentHTML,
null,
true);
feature.popup = popup;
//将信息框添加进map
map.addPopup(popup);
}
然后当我们点击点数据时就能获取如下效果:

这样我们就可以使用热点格网图功能了,完整范例请见:
http://www.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/heatGridLayer.html
标签:
原文地址:http://www.cnblogs.com/zhuimengdeyuanyuan/p/4585328.html