echarts实现GIS可视化——热力图

热力图介绍

echarts的热力图有两种,一种时按照点元素的权重,还有一种是按照点元素的密度(官网api害死人,一直搞不清为什么要用.concat([1]))

点元素密度案例

看一下热力图实现的案例:

效果图:

在这里插入图片描述

示例代码&注释:

$.get(ROOT_PATH + '/data/asset/data/hangzhou-tracks.json', function (data) {
    var points = [].concat.apply([], data.map(function (track) {
        return track.map(function (seg) {
            return seg.coord.concat([1]);
        });
    }));
    myChart.setOption(option = {
    	//是否使用动画
        animation: false,
        //背景地图中心点等基础值
        bmap: {
            center: [120.13066322374, 30.240018034923],
            zoom: 14,
            roam: true
        },
        //视觉映射组件
        visualMap: {
            show: false,
            top: 'top',
            min: 0,
            max: 5,
            seriesIndex: 0,
            calculable: true,
            //定义在选中范围中的视觉元素
            inRange: {
                color: ['blue', 'blue', 'green', 'yellow', 'red']
            }
        },
        series: [{
            type: 'heatmap',
            //该系列使用的坐标系,可选'cartesian2d'和'geo'
            coordinateSystem: 'bmap',
            data: points,
            //每个点的大小
            pointSize: 5,
            //每个点模糊的大小
            blurSize: 6
        }]
    });
    // 添加百度地图插件
    var bmap = myChart.getModel().getComponent('bmap').getBMap();
    bmap.addControl(new BMap.MapTypeControl());
});

我们打印一下接口的数据:
在这里插入图片描述
visualMap 线性映射:
线性映射 表示 series.data 中的每一个值(dataValue)会经过线性映射计算,从 [visualMap.min, visualMap.max] 映射到设定的 [visual value 1, visual value 2] 区间中的某一个视觉的值(下称 visual value)。
我们设置了 [visualMap.min, visualMap.max] 为 [0, 100],并且我们有 series.data: [50, 10, 100]。我们想将其映射到范围为 [0.4, 1] 的 opacity 上,从而达到用透明度表达数值大小的目的。那么 visualMap 组件会对 series.data 中的每一个 dataValue 做线性映射计算,得到一个 opacityValue。最终得到的 opacityValues 为 [0.7, 0.46, 1]
0.7 = 0.4 + 50 * 0.6 /100
0.46 = 0.4 + 10 * 0.6 / 100
对于 颜色(color),使用数组表示例如:[’#333’, ‘#78ab23’, ‘blue’]。意思就是以这三个点作为基准,形成一种『渐变』的色带,数据映射到这个色带上。也就是说,与 visualMap.min 相等的值会映射到 ‘#333’,与 visualMap.max 相等的值会映射到 ‘blue’。对于 visualMap.min 和 visualMap.max 中间的其他点,以所给定的 ‘#333’, ‘#78ab23’, ‘blue’ 这三个颜色作为基准点进行分段线性插值,得到映射结果。

所以在调用上述接口时,我们会在inRange里面配置不同程度下的颜色去做映射,point的格式为:经度、纬度、1

Vue上实现

框架:vue-cli和webpack
ak申请地址:http://lbsyun.baidu.com/index.php?title=jspopular
安装包:

npm install echarts -S

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <!--引入百度地图-->
    <script  type="text/javascript" 
              src="http://api.map.baidu.com/api?v=2.0&ak=" ></script>
    <!--引入百度热力图-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>

    <script type="text/javascript" src=""></script>
    <title>official</title>

  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

webpack.config.js

module.exports = {
    entry: './src/main.js', 
    externals: {
        "BMap": "BMap",
    },
}

新建map.js

export function MP(ak) {  
    return new Promise(function (resolve, reject) {  
      window.onload = function () {  
        resolve(BMap)  
      }  
      var script = document.createElement("script");  
      script.type = "text/javascript";  
      script.src = "http://api.map.baidu.com/api?v=2.0&ak="+ak+"&callback=init";  
      script.onerror = reject;  
      document.head.appendChild(script);  
    })  
  } 

ChartTest.vue

<template>
  <!--一定要给宽高,不然会报错,container没有高度-->
  <div id="chart">echarts百度地图</div>
</template>

<script>
//引入json数据
import baiduJSON from "./datas/baiduData.json";
import "echarts/extension/bmap/bmap";
import { MP } from "../api/map.js";

export default {
  data() {
    return {
      ak: '7G4utppO09SpqFPHlhzGRUideunFgY0W'
    };
  },
  mounted() {
    this.$nextTick(function () {
      var _this = this;
      MP(_this.ak).then((BMap) => {
        let myChart = _this.$echarts.init(document.getElementById("chart"));
        let pointsData = baiduJSON; //其实这一步是多余的
        //把数据处理成需要的格式,只是把数值都改成了1,具体项目可以根据自己实际来处理
        var points = [].concat.apply(
          [],
          pointsData.map(function (track) {
            return track.map(function (seg) {
              return seg.coord.concat([1]);
            });
          })
        );

        let option; // eslint-disable-line no-unused-vars
        myChart.setOption(
          (option = {
            animation: false,
            bmap: {
              center: [120.13066322374, 30.240018034923],
              zoom: 14,
              roam: true,
            },
            visualMap: {
              show: true,
              top: "top",
              min: 0,
              max: 5,
              seriesIndex: 0,
              calculable: true,
              inRange: {
                color: ["blue", "blue", "green", "yellow", "red"],
              },
            },
            series: [
              {
                type: "heatmap",
                coordinateSystem: "bmap",
                data: points,
                pointSize: 5,
                blurSize: 6,
              },
            ],
          })
        );

        var bmap = myChart.getModel().getComponent("bmap").getBMap();
        bmap.addControl(new BMap.MapTypeControl());
      });
    });
  },
};
</script>

<style>
#chart {
  width: 1300px;
  height: 1300px;
}
</style>

其中baiduData.json 下载地址:https://cdn.jsdelivr.net/gh/apache/incubator-echarts-website@asf-site/examples/data/asset/data/hangzhou-tracks.json

点元素权重案例

效果图:

在这里插入图片描述

示例代码&注释:

 var convertData = function (data) {
   var res = [];
     for (var i = 0; i < data.length; i++) {
         var geoCoord = geoCoordMap[data[i].name];
         if (geoCoord) {
             res.push(geoCoord.concat(data[i].value));
         }
     }
     return res;
 };

 option = {
     title: {
         text: '全国主要城市空气质量',
         subtext: 'data from PM25.in',
         sublink: 'http://www.pm25.in',
         left: 'center',
         textStyle: {
             color: '#fff'
         }
     },
     //backgroundColor: '#404a59',           //一定要去除,否则地图不现实
     visualMap: {
         min: 0,
         max: 250,
         splitNumber: 5,
         inRange: {
             color: ['#d94e5d','#eac736','#50a3ba'].reverse()
         },
         textStyle: {
             color: '#000'
         }
     },
     series: [{
         name: 'AQI',
         type: 'heatmap',
         coordinateSystem: 'leaflet',
         data: convertData([
             {name: "海门", value: 9},
             {name: "鄂尔多斯", value: 12},
             {name: "招远", value: 12},
             {name: "舟山", value: 12},
             {name: "齐齐哈尔", value: 14},
             {name: "盐城", value: 15},
             {name: "赤峰", value: 16},
             {name: "青岛", value: 18},
             {name: "乳山", value: 18},
             {name: "金昌", value: 19},
             {name: "泉州", value: 21},
             {name: "莱西", value: 21},
             {name: "日照", value: 21},
             {name: "胶南", value: 22},
             {name: "南通", value: 23},
             {name: "拉萨", value: 24},
             {name: "云浮", value: 24},
             {name: "梅州", value: 25},
             {name: "文登", value: 25},
             {name: "上海", value: 25},
             {name: "攀枝花", value: 25},
             {name: "威海", value: 25},
             {name: "承德", value: 25},
             {name: "厦门", value: 26},
             {name: "汕尾", value: 26},
             {name: "潮州", value: 26},
             {name: "丹东", value: 27},
             {name: "太仓", value: 27},
             {name: "曲靖", value: 27},
             {name: "烟台", value: 28},
             {name: "福州", value: 29},
             {name: "瓦房店", value: 30},
             {name: "即墨", value: 30},
             {name: "抚顺", value: 31},
             {name: "玉溪", value: 31},
             {name: "张家口", value: 31},
             {name: "阳泉", value: 31},
             {name: "莱州", value: 32},
             {name: "湖州", value: 32},
             {name: "汕头", value: 32},
             {name: "昆山", value: 33},
             {name: "宁波", value: 33},
             {name: "湛江", value: 33},
             {name: "揭阳", value: 34},
             {name: "荣成", value: 34},
             {name: "连云港", value: 35},
             {name: "葫芦岛", value: 35},
             {name: "常熟", value: 36},
             {name: "东莞", value: 36},
             {name: "河源", value: 36},
             {name: "淮安", value: 36},
             {name: "泰州", value: 36},
             {name: "南宁", value: 37},
             {name: "营口", value: 37},
             {name: "惠州", value: 37},
             {name: "江阴", value: 37},
             {name: "蓬莱", value: 37},
             {name: "韶关", value: 38},
             {name: "嘉峪关", value: 38},
             {name: "广州", value: 38},
             {name: "延安", value: 38},
             {name: "太原", value: 39},
             {name: "清远", value: 39},
             {name: "中山", value: 39},
             {name: "昆明", value: 39},
             {name: "寿光", value: 40},
             {name: "盘锦", value: 40},
             {name: "长治", value: 41},
             {name: "深圳", value: 41},
             {name: "珠海", value: 42},
             {name: "宿迁", value: 43},
             {name: "咸阳", value: 43},
             {name: "铜川", value: 44},
             {name: "平度", value: 44},
             {name: "佛山", value: 44},
             {name: "海口", value: 44},
             {name: "江门", value: 45},
             {name: "章丘", value: 45},
             {name: "肇庆", value: 46},
             {name: "大连", value: 47},
             {name: "临汾", value: 47},
             {name: "吴江", value: 47},
             {name: "石嘴山", value: 49},
             {name: "沈阳", value: 50},
             {name: "苏州", value: 50},
             {name: "茂名", value: 50},
             {name: "嘉兴", value: 51},
             {name: "长春", value: 51},
             {name: "胶州", value: 52},
             {name: "银川", value: 52},
             {name: "张家港", value: 52},
             {name: "三门峡", value: 53},
             {name: "锦州", value: 54},
             {name: "南昌", value: 54},
             {name: "柳州", value: 54},
             {name: "三亚", value: 54},
             {name: "自贡", value: 56},
             {name: "吉林", value: 56},
             {name: "阳江", value: 57},
             {name: "泸州", value: 57},
             {name: "西宁", value: 57},
             {name: "宜宾", value: 58},
             {name: "呼和浩特", value: 58},
             {name: "成都", value: 58},
             {name: "大同", value: 58},
             {name: "镇江", value: 59},
             {name: "桂林", value: 59},
             {name: "张家界", value: 59},
             {name: "宜兴", value: 59},
             {name: "北海", value: 60},
             {name: "西安", value: 61},
             {name: "金坛", value: 62},
             {name: "东营", value: 62},
             {name: "牡丹江", value: 63},
             {name: "遵义", value: 63},
             {name: "绍兴", value: 63},
             {name: "扬州", value: 64},
             {name: "常州", value: 64},
             {name: "潍坊", value: 65},
             {name: "重庆", value: 66},
             {name: "台州", value: 67},
             {name: "南京", value: 67},
             {name: "滨州", value: 70},
             {name: "贵阳", value: 71},
             {name: "无锡", value: 71},
             {name: "本溪", value: 71},
             {name: "克拉玛依", value: 72},
             {name: "渭南", value: 72},
             {name: "马鞍山", value: 72},
             {name: "宝鸡", value: 72},
             {name: "焦作", value: 75},
             {name: "句容", value: 75},
             {name: "北京", value: 79},
             {name: "徐州", value: 79},
             {name: "衡水", value: 80},
             {name: "包头", value: 80},
             {name: "绵阳", value: 80},
             {name: "乌鲁木齐", value: 84},
             {name: "枣庄", value: 84},
             {name: "杭州", value: 84},
             {name: "淄博", value: 85},
             {name: "鞍山", value: 86},
             {name: "溧阳", value: 86},
             {name: "库尔勒", value: 86},
             {name: "安阳", value: 90},
             {name: "开封", value: 90},
             {name: "济南", value: 92},
             {name: "德阳", value: 93},
             {name: "温州", value: 95},
             {name: "九江", value: 96},
             {name: "邯郸", value: 98},
             {name: "临安", value: 99},
             {name: "兰州", value: 99},
             {name: "沧州", value: 100},
             {name: "临沂", value: 103},
             {name: "南充", value: 104},
             {name: "天津", value: 105},
             {name: "富阳", value: 106},
             {name: "泰安", value: 112},
             {name: "诸暨", value: 112},
             {name: "郑州", value: 113},
             {name: "哈尔滨", value: 114},
             {name: "聊城", value: 116},
             {name: "芜湖", value: 117},
             {name: "唐山", value: 119},
             {name: "平顶山", value: 119},
             {name: "邢台", value: 119},
             {name: "德州", value: 120},
             {name: "济宁", value: 120},
             {name: "荆州", value: 127},
             {name: "宜昌", value: 130},
             {name: "义乌", value: 132},
             {name: "丽水", value: 133},
             {name: "洛阳", value: 134},
             {name: "秦皇岛", value: 136},
             {name: "株洲", value: 143},
             {name: "石家庄", value: 147},
             {name: "莱芜", value: 148},
             {name: "常德", value: 152},
             {name: "保定", value: 153},
             {name: "湘潭", value: 154},
             {name: "金华", value: 157},
             {name: "岳阳", value: 169},
             {name: "长沙", value: 175},
             {name: "衢州", value: 177},
             {name: "廊坊", value: 193},
             {name: "菏泽", value: 194},
             {name: "合肥", value: 229},
             {name: "武汉", value: 273},
             {name: "大庆", value: 279}
         ])
     }]
 };
 L.capinfo.echartsLayer(option).addTo(map);
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 数据可视化是指利用图表、图形等形式,将数据进行图形化展示和解读的过程。而GIS(Geographic Information System,地理信息系统)则是利用计算机技术来存储、分析、管理和展示地理空间信息的系统。 在数据可视化中,GIS地图分析可以提供更直观和准确的空间数据展示和分析。通过将数据与地图相结合,可以更清晰地展示地理空间的分布、关系和变化趋势,帮助人们更好地理解和解读数据。 CSDN作为中国最大的IT技术社区,提供了大量的数据可视化GIS地图分析相关的文章和教程。在CSDN上,你可以找到许多关于数据可视化GIS地图分析的技术、方法和案例的文章和资料。通过学习这些内容,你可以了解数据可视化GIS地图分析的基本概念和原理,掌握相关的工具和技术,提高自己在这方面的能力。 在实际应用中,数据可视化GIS地图分析在各个领域都有广泛的应用。在城市规划中,可以通过可视化和地图分析来评估交通拥堵情况、资源分布等问题;在环境保护中,可以利用数据可视化和地图分析来监测污染源、分析环境变化等;在商业分析中,可以通过地理空间的可视化和分析来评估市场潜力、进行竞争对手分析等。 总之,数据可视化GIS地图分析是当今信息化时代重要的技术手段,CSDN作为IT技术社区提供了丰富的相关资源,帮助人们学习和应用这些技术,促进技术的创新和发展。 ### 回答2: 数据可视化是一种通过图表、图像、地图等方式将数据呈现出来的方法。地理信息系统(GIS)是一种将地理数据与其他信息相结合的技术,可以对地理数据进行分析、管理和展示。CSDN是一个专业的IT社区,提供了大量关于计算机科学和技术的在线资源和互动交流。 在数据可视化方面,GIS地图分析在CSND上具有重要意义。首先,通过GIS地图分析,我们可以将大量的地理数据呈现在地图上,使得这些数据更加直观和易于理解。例如,我们可以将销售数据与地理位置相结合,在地图上展示出销售热点区域和销售额分布。这样的可视化分析可以帮助企业更好地了解市场需求和消费行为,从而做出更为准确和科学的决策。 其次,GIS地图分析可以帮助我们发现地理空间上的规律和趋势。通过对地理数据的统计和分析,我们可以得出一些重要的结论和认识,例如人口分布、土地利用、交通网络等。这些结论和认识可以帮助我们更好地规划城市、保护环境和改善生活质量。在CSND上分享和交流这些GIS地图分析的成果,可以促进更多人了解和参与城市规划和环境保护等工作。 此外,GIS地图分析还可以与其他数据分析方法相结合,例如统计分析、机器学习等。通过将不同类型的数据进行融合和分析,我们可以得到更加全面和深入的认识。在CSND上,我们可以发布关于GIS地图分析和其他数据分析方法相结合的案例和经验,推动学术界和业界之间的交流和合作。 总之,数据可视化GIS地图分析在CSND上具有重要的意义,可以帮助我们更好地理解和利用地理数据,促进城市规划和环境保护等工作的发展。同时,通过在CSND上分享和交流这方面的经验和成果,可以促进学术界和业界之间的合作和创新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值