示例:通过面渐变模拟时空变化
Step1 准备数据和服务
本例中使用的数据和服务包括:
底图:SuperMap Online发布的地图服务 map_China4003
用于绘制动态图层的等高线数据:animationPolygonData.js,包含四个不同时刻下(时间数据),7个不同温度值的等高线(空间数据)
Step2 定义动态图层显示的风格样式
为面渐变图层定义填充颜色等风格样式,本例定义了7个不同的颜色层次。
//定义面渐变的样式
var style1 = {
fillColor: "#b6fb7e",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style2 =
{
fillColor: "#ffff00",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style3 =
{
fillColor: "#efad3b",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style4 =
{
fillColor: "#ef8425",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style5 =
{
fillColor: "#ef255e",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style6 =
{
fillColor: "#f80f1a",
fillOpacity: 0.2,
strokeOpacity: 0
};
var style7 =
{
fillColor: "#ff000",
fillOpacity: 0.2,
strokeOpacity: 0
};
Step3 初始化地图
初始化地图,本例使用SuperMap Online发布的地图。
var map, layer, animatorVector,
url = "http://www.supermapol.com/iserver/services/map_China4003/rest/maps/China";
var value="IbooSg6gIBmhIRaesVgjSED0",
name = "key";
SuperMap.Credential.CREDENTIAL = new SuperMap.Credential(value, "key");
function init() {
if (!document.createElement('canvas').getContext) {
alert('您的浏览器不支持 canvas,请升级');
return;
}
//初始化地图
map = new SuperMap.Map("map", {
controls: [
new SuperMap.Control.ScaleLine(),
new SuperMap.Control.Zoom(),
new SuperMap.Control.Navigation({
dragPanOptions: {
enableKinetic: true
}
})],
projection: "EPSG:3857"
});
……
}
Step4 初始化底图和动态图层
初始化底图,使用China中的动态瓦片。
初始化动态渲染图层Polygon,设置播放速度、开始时间、结束时间,以及每秒的渲染次数。
//初始化图层
layer = new SuperMap.Layer.TiledDynamicRESTLayer("China", url, null,{maxResolution:"auto"});
//初始化动画矢量图层
animatorVector = new SuperMap.Layer.AnimatorVector("Polygon", {}, {
//设置速度为每帧播放0.01小时的数据
speed: 0.01,
//开始时间为12点
startTime: 12,
//每秒渲染12次
frameRate: 12,
//结束时间为15点
endTime: 15
});
Step5 实现面图层渐变效果
实现等温面的动态渐变效果:
从animationPolygonData.js中读取不同时刻的各四条等温度线数据lines,并把等温线转成等温面。
根据预设的风格样式,为温度从31到32分别设置颜色等风格样式。
把等温面几何要素及其ID、时间等属性信息添加到animatorVector中。
//添加面数据
function addPolygon() {
var regionFeatures = [];
for (var i = 0, len = lines.length; i < len; i++) {
var arr = [];
for (var j = 0; j < lines[i][3].length; j++) {
var point = new SuperMap.Geometry.Point(lines[i][3][j][0], lines[i][3][j][1]);
arr.push(point);
}
var line = new SuperMap.Geometry.LinearRing(arr);
var region = new SuperMap.Geometry.Polygon([line]);
var style;
if (lines[i][2] == 31) {
style = style1;
}
else if (lines[i][2] == 32) {
style = style2;
}
else if (lines[i][2] == 33) {
style = style3;
}
else if (lines[i][2] == 34) {
style = style4;
}
else if (lines[i][2] == 35) {
style = style5;
}
else if (lines[i][2] == 36) {
style = style6;
}
else if (lines[i][2] == 37) {
style = style7;
}
var regionFeature = new SuperMap.Feature.Vector(region, {
FEATUREID: lines[i][0],
TIME: lines[i][1],
TEMPERATURE: lines[i][2]
}, style);
regionFeatures.push(regionFeature);
}
animatorVector.addFeatures(regionFeatures);
}
//开始播放动画
function startAnimator() {
animatorVector.animator.start();
}
//暂停播放动画
function pauseAnimator() {
animatorVector.animator.pause();
}
Step6 把图层添加到地图上
把底图和动态面图层添加到地图上。
//监听图层信息加载完成事件
layer.events.on({"layerInitialized":function(){
map.addLayers([layer, animatorVector]);
map.addControl(selectFeature);
selectFeature.activate();
map.setCenter(new SuperMap.LonLat(11586634.286396, 3588716.5813769), 12);
//增加数据
addPolygon();
}});
var selectFeature = new SuperMap.Control.SelectFeature(animatorVector, {
onSelect: function(fe){
console.log(fe);
},
hover: false
});
在线演示与源码编辑
您可以在线访问完整代码、体验演示效果,也可以直接在线编辑源码并实时查看效果。