“我不满意,我不想等待,我也不再推诿,我要站出来做一点什么。我要做的事,就在此时,就在此刻,就在此地,就在此生”。自离职央视后,沉寂许久的知名记者、主持人柴静昨日携个人视频新作 《穹顶之下》宣告归来,并在短时间内引起广泛关注。生活在这个地球上,空气质量的好坏决定这我们的健康,每个人都希望能够呼吸新鲜空气,都希望抬起头看到的是蓝天和白云,而不是灰蒙蒙的雾霾。说到雾霾,我们用TWaver GIS实现了一个全国雾霾图的示例供大家参考。


首先要创建地图,如果熟悉TWaver GIS的人,下面的代码应该不难,如果第一次接触TWaver GIS,可以参考html5 gis的官方文档。贴出地图的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
network = new twaver.vector.Network();
map = new twaver.gis.Map(document.getElementById("container"),"test");
map.setSize({width:800,height:1200});
map.setEnableDoubleZoom(false);
map.setBackgroundColor(GISConsts.GOOGLE_COLOR);
map.setProjectionType(GISConsts.PROJECTION_MERCATOR);
map.addLayer("OSM",GISConsts.EXECUTOR_TYPE_OSM);
 
map.setZoomLevel(4);
map.setCenter(new twaver.gis.geometry.GeoCoordinate(40,100));
network.adjustBounds({x:0,y:0,width:900,height:800});
var box = network.getElementBox();
 
adapter = new twaver.gis.Adapter();
adapter.bindNetworkAndMap(network,map);
 
adapter.enableCombineInteraction();
 
var borderPane = new twaver.controls.BorderPane(map);
appendChild(borderPane.getView(),document.getElementById("container"),0,0,0,0);
 
var toolbar = new twaver.gis.gadget.MapToolbar("",map);
map.installGadget(toolbar.getView());
 
var navigator = new twaver.gis.gadget.Navigator("cn",map);
map.installGadget(navigator,{x:20,y:50});

接下来是在地图上画出每个省省会的的雾霾指数,可以用网元来表示, 先注册一下网元的样式,用我们的矢量描述来表示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
twaver.Util.registerImage('exponent', {
        w: 80,
        h: 30,
        origin: { x: 0, y: 0 },
        line: {
            width: 0,
            color: 'red'
        },
        v: [
            {
                shape: 'rect',
                rect: [ 0, 0, 80, 20],
                fill: 'white',
                r: 2
            },
            {
                shape: 'rect',
                rect: [ 50, 0, 30, 20],
                fill: '<%= data.getClient("color") %>',
                r:2
            },
            {
                shape: 'text',
                text: '<%= data.getClient("name") %>',
                textAlign: 'left',
                textBaseline: 'top',
                x: 5,
                y: 5
            },
            {
                shape: 'text',
                text: '<%= data.getClient("exponent") %>',
                textAlign: 'left',
                textBaseline: 'top',
                x: 55,
                y: 5
            },
            {
                shape: 'circle',
                cx: 40,
                cy: 22,
                r: 2,
                fill: 'red'
            }
        ]
    });

最后我们创建网元,网元的图片就是上边注册的图片,并且用不同的颜色表示雾霾指数的高低:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function createTopo() {
        var box = network.getElementBox();
        var geoDatas = [
            {latitude: 39.91667, longitude: 116.41667, name:"北京"}, //北京
            {latitude: 31.14, longitude:121.29, name:"上海"},//上海
            {latitude: 39.13333, longitude: 117.20000, name:"天津"},//天津
            {latitude: 22.20000, longitude:114.10000, name:"香港"}, //香港
            {latitude: 23.16667, longitude: 113.23333, name:"广州"}, //广州
            {latitude: 30.26667, longitude:120.20000, name:"杭州"},//杭州
            {latitude: 29.56667, longitude: 106.45000, name:"重庆"},//重庆
            {latitude: 26.08333, longitude:119.30000, name:"福州"},//福州
            {latitude: 36.03333, longitude: 103.73333, name:"兰州"},//兰州
            {latitude: 26.56667, longitude:106.71667, name:"贵阳"},//贵阳
            {latitude: 28.21667, longitude: 113.00000, name:"长沙"},//长沙
            {latitude: 32.05000, longitude:118.78333, name:"南京"},//南京
            {latitude: 28.68333, longitude: 115.90000, name:"南昌"},//南昌
            {latitude: 41.80000, longitude:123.38333, name:"沈阳"},//沈阳
            {latitude: 37.86667, longitude: 112.53333, name:"太原"},//太原
            {latitude: 30.66667, longitude:104.06667, name:"成都"},//成都
            {latitude: 29.60000, longitude: 91.00000, name:"拉萨"},//拉萨
            {latitude: 43.76667, longitude:87.68333, name:"乌鲁木齐"},//乌鲁木齐
            {latitude: 25.05000, longitude: 102.73333, name:"昆明"},//昆明
            {latitude: 34.26667, longitude:108.95000, name:"西安"},//西安
            {latitude: 36.56667, longitude: 101.75000, name:"西宁"},//西宁
            {latitude: 38.46667, longitude:106.26667, name:"银川"},//银川
            {latitude: 45.75000, longitude: 126.63333, name:"哈尔滨"},//哈尔滨
            {latitude: 43.88333, longitude:125.35000, name:"长春"},//长春
            {latitude: 30.51667, longitude: 114.31667, name:"武汉"},//武汉
            {latitude: 34.76667, longitude:113.65000, name:"郑州"},//郑州
            {latitude: 38.03333, longitude: 114.48333, name:"石家庄"},//石家庄
            {latitude: 20.01667, longitude:110.35000, name:"海口"},//海口
            {latitude: 22.20000, longitude: 113.50000, name:"澳门"},//澳门
            {latitude: 40.48, longitude: 111.41, name:"呼和浩特"},//呼和浩特
            {latitude: 22.48, longitude: 108.19, name:"南宁"},//南宁
            {latitude: 36.40, longitude: 117.00, name:"济南"},//济南
            {latitude: 31.52, longitude: 117.17, name:"合肥"},//合肥
            {latitude: 25.03 , longitude: 121.30, name:"台北"}//台北
 
 
        ];
        for(var i = 0; i < geoDatas.length; i++) {
            var node =  new twaver.Node();
            node.setClient(GISSettings.GEOCOORDINATE,new twaver.gis.geometry.GeoCoordinate(geoDatas[i].latitude,geoDatas[i].longitude));
            node.setImage("exponent");
            node.setClient("name",geoDatas[i].name);
            node.setClient("exponent",Math.floor(Math.random() * 200) + 20);
            if(node.getClient("exponent") < 50) {
                node.setClient("color", "green");
            }else if(node.getClient("exponent") >= 50 && node.getClient("exponent") < 100) {
                node.setClient("color", "#D6C621");
            }else if(node.getClient("exponent") >= 100 && node.getClient("exponent") < 150) {
                node.setClient("color", "#F5582E");
            } else if(node.getClient("exponent") >= 150 && node.getClient("exponent") <= 220) {
                node.setClient("color", "red");
            }
            box.add(node);
        }
    }

这样一个简单的雾霾地图就实现了,上边的数据是模拟数据,如果想反映真实数据,可以直接调用中国天气的实时数据,网址:http://openweather.weather.com.cn/Home/Package/index.html

关于更多产品TWaver信息,可关注官网网站:www.servasoft.com

TWaver GIS制作穹顶之下的雾霾地图的更多相关文章

  1. 雾霾天出行,如何精确避开“雷区”?2016 SODA数据侠十强

    (2016年参加了上海 SODA 竞赛,进入前十,最终获得上海市的两个奖项.) ▍跟踪雾霾,仅靠零星的监测点数据怎么行? 如果雾霾短期内没有办法彻底根治,我们可以做什么,把环境污染物对人的影响尽可能降 ...

  2. TWaver GIS在电信中的使用

    GIS作为信息系统的重要组成部分,在电信行业中的应用由来已久.将GIS引入电信管理系统,GIS强大的功能就会得到充分的体现,GIS技术可以将各类电信信息系统以其特有的表现形有机整合在一起,并为真正做到 ...

  3. [置顶] 【机器学习PAI实践三】雾霾成因分析

    一.背景 如果要人们评选当今最受关注话题的top10榜单,雾霾一定能够入选.如今走在北京街头,随处可见带着厚厚口罩的人在埋头前行,雾霾天气不光影响了人们的出行和娱乐,对于人们的健康也有很大危害.本文通 ...

  4. 一步一步手写GIS开源项目-(2)地图平移缩放实现

    系列文章目录 一步一步手写GIS开源项目-(1)500行代码实现基础GIS展示功能 一步一步手写GIS开源项目-(2)地图平移缩放实现 项目github地址:https://github.com/Hu ...

  5. 杨柳目-杨柳科-Info-新闻:“北京三害”之一,危害堪比雾霾和沙尘,杨絮为什么会肆虐

    ylbtech-杨柳目-杨柳科-Info-新闻:“北京三害”之一,危害堪比雾霾和沙尘,杨絮为什么会肆虐 1.返回顶部 1. “北京三害”之一,危害堪比雾霾和沙尘,杨絮为什么会肆虐 18-05-0817 ...

  6. java离线地图web GIS制作

    因为项目需求,要做一个web地图,之前做过高德的在线地图,它提供了一系列的API,并且由于是国产的,所以开发起来比较容易,现在由于项目是内网使用的,所以需要使用离线地图,由此便开始了: Web GIS ...

  7. SU+GIS,让SketchUp模型在地图上活起来

    一.SU+GIS的场景展示 skp与卫星地图和倾斜摄影模型相结合人工模型与实景模型完美融合 这么一看是不是直接秒杀了单纯看看skp后联想的规划效果? 二.如何快速把草图大师的结果和GIS结合呢?在图新 ...

  8. VR的世界里没有雾霾!暴风魔镜发布Matrix一体机

         在2016年接近尾声的时候,暴风魔镜给VR行业带来一波暖流.12月20日,暴风魔镜宣布推出最新VR一体机--暴风魔镜"3K屏概念机"MATrix及VR眼镜S1两大产品. ...

  9. 我的Python成长之路---第一天---Python基础(4)---2015年12月26日(雾霾)

    五.数据运算与数据运算符 1.算术运算符 算术运算符 运算符 描述 示例 + 加法 >>> 14 - 5 9 - 减法 >>> 14 - 5 9  *  乘法 &g ...

随机推荐

  1. (七)Java 变量类型

    Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ...

  2. 【OI】简单的分块

    介绍下简单的分块: 当我们遇到区间类问题的时候,如何保证我们快速而高效地完成操作? 答案是线段树分块. 所谓分块,就是把一个序列分成许多块分别维护.是不是想起了树状数组 这样能大大提高效率: 例如,我 ...

  3. RDA 多屏参流程

    一.RDA MAKEFILE的本地变量 在介绍多屏参之前,先看一下./code/env.conf的包含过程,通过./code/Makefile.project加载,env.conf中所有的变量,都变为 ...

  4. 基于Flink的视频直播案例(上)

    目录 数据产生 Logstash部分 Kafka部分 Flink部分 配置/准备代码 视频核心指标监控 本案例参考自阿里云的视频直播解决方案之视频核心指标监控和视频直播解决方案之直播数字化运营. 基于 ...

  5. Same Tree 序列化二叉树

    https://oj.leetcode.com/problems/same-tree/ Given two binary trees, write a function to check if the ...

  6. mac+php+xdebug

    1,下载xdebug 2,进入xdebug-2.4.0RC4目录,运行phpize命令, 2,google之后说要安装autoconf brew install autoconf 3,但是使用brew ...

  7. 通过usb访问mtp设备(ubuntu12.04) (转载)

    转自:http://robert.penz.name/658/howto-access-mtp-devices-via-usb-on-ubuntu-12-04/ A friend asked me h ...

  8. PCB .NET Reactor 加密工具(NecroBit加密技术)

    在PCB行业中,我们使用的软件或脚本绝大多数都用非编译型语言写程序,而从一开始选择这种编程语言,就注定了程序的源码有被曝露风险.我们PCB工程系统用.NET语言编写,C#编译后会被转换为IL代码的中间 ...

  9. 搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子

    版本 springboot 2.1.5.RELEASE kafka 2.2 遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没 ...

  10. StackOverflow 创始人关于如何高效编程的清单

    这是 StackOverflow 联合创始人 Jeff Atwood 注释的十戒.程序员普遍有很强的自尊心,都应该看看本文,打印下来时刻提醒自己. “无我编程”发生在开发阶段,表现为技术团队经常通过同 ...