【百度地图可视化(MapVGL)】绘制散点图

MapV开发文档 (baidu.com) 但是在文档中详细的操作不是非常详细。

使用百度地图中的地图可视化(MapVGL)绘制散点图
1. 在head 头部 导入需要的依赖信息
  <!-- 百度地图基础库 使用自己的 ak 进行配置 -->
    <script type="text/javascript"
            src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=********"></script>
    <!-- 公共的文件代码 里面包含 地图初始化 和 实用样式 -->
    <script src="https://mapv.baidu.com/gl/examples/static/common.js"></script>
    <!-- 使用根据城市名称获取城市的坐标 -->
    <script src="https://mapv.baidu.com/build/mapv.js"></script>
    <!--使用mapcgl的时候需要引入-->
    <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.54/dist/mapvgl.min.js"></script>
2. 进行全局样式的配置
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }

        #map_container {
            width: 100%;
            height: 100%;
        }
3. 编写一个容器用于展示地图 这里的id名称 在commo.js文件中已经被固定了,这里只能写为 map_container
<div id="map_container"></div>
4. 初始化地图
  1. 这里初始化地图使用的是 https://mapv.baidu.com/gl/examples/static/common.js库中的initMap 函数它初始化完成一个地图之后会返回一个地图对象。

  2. common.js 中有初始化地图公共的代码,但是其将地图容器的名称固定的写为 map_container,这里需要注意。

  3. 可以使用mapv库中的 mapv.utilCityCenter.getCenterByCityName('城市名称')根据城市名称获取一个城市的中心点坐标。

  /**
   * 初始化地图
   * */
  function initMyMap() {
    // 使用工具类获取城市的中心点坐标
    let centerCity = mapv.utilCityCenter.getCenterByCityName('城市名称')
    // 使用  /examples/static/common.js 下的 initMap 方法进行地图的初始化
    let map = initMap(
      {
        tilt: 45,
        heading: 30,
        zoom: 8,
        center: [centerCity.lng, centerCity.lat],
        style: snowStyle
      }
    )

    return map
  }

5. 初始化数据
  1. 这里需要初始化数据并进行返回 ;使用循环不断的向data中设置一个个的点数据。
  /**
   * 初始化数据
   */
  function initData() {
    // 保存的是每一个点的数据信息 这些点需要进行构造
    let data = [];
    // 保存城市信息
    let cities = ['北京', '天津', '上海', '重庆', '石家庄', '太原', '呼和浩特', '哈尔滨', '长春',
      '沈阳', '济南', '南京', '合肥', '杭州', '南昌', '福州', '郑州', '武汉', '长沙', '广州',
      '南宁', '西安', '银川', '兰州', '西宁', '乌鲁木齐', '成都', '贵阳', '昆明', '拉萨', '海口'];
    // 需要绘制的点的数量
    let randomCount = 700
    while (randomCount--) {

      // 根据每一个城市名称获取到城市的中心点坐标
      let centerCity = mapv.utilCityCenter.getCenterByCityName(cities[parseInt(Math.random() * cities.length, 10)])
      data.push(
        {
          geometry: {
            // 可以设置类型的有 : Point(点)、 LineString(线)、Polygon(面)  这里设置的类型是点
            type: 'Point',
            // 设置当前点的坐标点
            coordinates: [centerCity.lng - 2 + Math.random() * 4, centerCity.lat - 2 + Math.random() * 4]
          },
          // 可以为每一个点配置一些数据信息
          properties: {
            sales: Math.random() * 100
          }
        }
      );
    }
    // 对sales大于 50 的data项进行过滤
    data = data.filter(item => item.properties.sales > 50)
    return data;
  }
6. 初始化图层 、图层管理器、图层和数据源绑定
  1. 在散点图中的点需要渲染到一个图层上面,使用mapvgl.PointLayer创建一个点图层。

  2. 每一个图层需要使用图层管理器进行管理,使用mapvgl.View创建一个图层管理器并将图层添加到图层管理器中。

  3. 在创建完成图层之后需要将数据和图层进行绑定,这样每一个数据才能被渲染成为每一个点。

  /**
   * 设置数据源
   * @param map
   * @param data
   */
  function setData(map, data) {
    // 创建 intensity 强度对象用于 优化每一个点的显示效果
    let intensity = new mapvgl.Intensity(
      {
        min: 0,
        max: 100,
        minSize: 5,
        maxSize: 30,
        // 加入一个区分颜色的渐变配置信息
        gradient: {
          0: 'rgb(25, 66, 102, 0.8)',
          0.3: 'rgb(145, 102, 129, 0.8)',
          0.7: 'rgb(210, 131, 137, 0.8)',
          1: 'rgb(248, 177, 149, 0.8)'
        }
      }
    )
    // 创建图层信息
    let pointLayer = new mapvgl.PointLayer(
      {
        size: function (data) {
          return intensity.getSize(parseInt(data.properties.sales))
        },
        color: function (data) {
          return intensity.getColor(parseInt(data.properties.sales))
        }
      }
    );
    // 根据 map 对象 生成图层管理器
    let view = new mapvgl.View(
      {
        map
      }
    );
    // 将图层添加到 view 图层管理器中
    view.addLayer(pointLayer)
    //为图层绑定数据源
    pointLayer.setData(data)
  }
7. 全部完整的代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>replay-datav-Mapvgl-point</title>

    <style>
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }

        #map_container {
            width: 100%;
            height: 100%;
        }
    </style>

    <!-- 百度地图基础库 -->
    <script type="text/javascript"
            src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=*******"></script>
    <!-- 公共的文件代码 里面包含 地图初始化 和 实用样式 -->
    <script src="https://mapv.baidu.com/gl/examples/static/common.js"></script>
    <!-- 使用根据城市名称获取城市的坐标 -->
    <script src="https://mapv.baidu.com/build/mapv.js"></script>
    <!--使用mapcgl的时候需要引入-->
    <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.54/dist/mapvgl.min.js"></script>
</head>
<body>

<div id="map_container"></div>

<!-- 对散点图的复盘 -->
<script>

  let map = initMyMap()
  let data = initData();
  setData(map, data)

  /**
   * 初始化地图
   * */
  function initMyMap() {
    // 使用工具类获取城市的中心点坐标
    let centerCity = mapv.utilCityCenter.getCenterByCityName('云南')
    // 使用  /examples/static/common.js 下的 initMap 方法进行地图的初始化
    let map = initMap(
      {
        tilt: 45,
        heading: 30,
        zoom: 8,
        center: [centerCity.lng, centerCity.lat],
        style: snowStyle
      }
    )

    return map
  }

  /**
   * 初始化数据
   */
  function initData() {
    // 保存的是每一个点的数据信息 这些点需要进行构造
    let data = [];
    // 保存城市信息
    let cities = ['北京', '天津', '上海', '重庆', '石家庄', '太原', '呼和浩特', '哈尔滨', '长春',
      '沈阳', '济南', '南京', '合肥', '杭州', '南昌', '福州', '郑州', '武汉', '长沙', '广州',
      '南宁', '西安', '银川', '兰州', '西宁', '乌鲁木齐', '成都', '贵阳', '昆明', '拉萨', '海口'];
    // 需要绘制的点的数量
    let randomCount = 700
    while (randomCount--) {

      // 根据每一个城市名称获取到城市的中心点坐标
      let centerCity = mapv.utilCityCenter.getCenterByCityName(cities[parseInt(Math.random() * cities.length, 10)])
      data.push(
        {
          geometry: {
            // 可以设置类型的有 : Point(点)、 LineString(线)、Polygon(面)  这里设置的类型是点
            type: 'Point',
            // 设置当前点的坐标点
            coordinates: [centerCity.lng - 2 + Math.random() * 4, centerCity.lat - 2 + Math.random() * 4]
          },
          // 可以为每一个点配置一些数据信息
          properties: {
            sales: Math.random() * 100
          }
        }
      );
    }
    // 对sales大于 50 的data项进行过滤
    data = data.filter(item => item.properties.sales > 50)
    return data;
  }

  /**
   * 设置数据源
   * @param map
   * @param data
   */
  function setData(map, data) {
    // 创建 intensity 强度对象用于 优化每一个点的显示效果
    let intensity = new mapvgl.Intensity(
      {
        min: 0,
        max: 100,
        minSize: 5,
        maxSize: 30,
        // 加入一个区分颜色的渐变配置信息
        gradient: {
          0: 'rgb(25, 66, 102, 0.8)',
          0.3: 'rgb(145, 102, 129, 0.8)',
          0.7: 'rgb(210, 131, 137, 0.8)',
          1: 'rgb(248, 177, 149, 0.8)'
        }
      }
    )
    // 创建图层信息
    let pointLayer = new mapvgl.PointLayer(
      {
        size: function (data) {
          return intensity.getSize(parseInt(data.properties.sales))
        },
        color: function (data) {
          return intensity.getColor(parseInt(data.properties.sales))
        }
      }
    );
    // 根据 map 对象 生成图层管理器
    let view = new mapvgl.View(
      {
        map
      }
    );
    // 将图层添加到 view 图层管理器中
    view.addLayer(pointLayer)
    //为图层绑定数据源
    pointLayer.setData(data)
  }

</script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容