且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

【前端搞地图】教你如何绘制一张填色专题地图

更新时间:2022-08-12 21:50:54

????【前端搞地图】系列第四弹来啦,今天给大家带来的是如何制作一张填色专题地图。在前两篇文章中我们大致讲解了Mapbox基础使用以及如何去设计一张高度可自定义的地图,还没有学会的小伙伴可以查看前两篇文章,自己动手实操下,这里就不对基础做过多的介绍了。【前端搞地图】教你如何绘制一张填色专题地图

制作思路

制作填色专题地图,目前有两种思路:

  • 直接在Mapbox Studio上传数据,根据属性值调整配色;
  • 添加fill图层,使用Mapbox Expression调整配色。

准备数据

其实在Mapbox的地图中,我们可以在Studio中上传国家省份城市等多边形数据,然后在Style中引用这个数据图层,也可以使用自带的商业边界数据。同时GL JS SDK支持根据瓦片中的数据进行配色的的功能,在 Mapbox 中我们把它叫做Expression

数据的获取可以推荐一个网站:http://datav.aliyun.com/tools/atlas/index.html#&lat=33.521903996156105&lng=104.29849999999999&zoom=4

支持省市区GeoJson的数据下载:【前端搞地图】教你如何绘制一张填色专题地图【前端搞地图】教你如何绘制一张填色专题地图可以点击 右侧 下载按钮直接下载json文件,当然下载下来还远远不够,需要自定义添加可视化属性,这里建议把数据保存到数据库中,方便后期动态添加;这里增加 ConfirmedRecoveryDeaths数据, 因为本次只对省级数据进行了可视化,所以只需在数据库中按省份进行分组查询即可得到每个省份的以上数据,接着就是常规操作,为GeoJSON properties添加这几个属性就 OK,示例:

"properties": {
      "childNum": 17,
      "size": "1700",
      "name": "河南省",
      "id": "41",
      "cp": [
             113.0668,
             33.8818
             ],
       "confirmed": 1276,
       "deaths": 24,
       "recovery": 1270
 }

思路1实现

需要把之前编辑好的数据保存为本地文件,上传 Mapbox Studio; Mapbox Studio 的基本使用这里就不做过多讲解了,不会使用的小伙伴可以查看之前几篇文章做了解。这里直接创建一个新的样式地图,样式看自己喜好选择【前端搞地图】教你如何绘制一张填色专题地图【前端搞地图】教你如何绘制一张填色专题地图【前端搞地图】教你如何绘制一张填色专题地图

【前端搞地图】教你如何绘制一张填色专题地图选择后应该页面应该会展示出一个中国地图的样式,具体展示还要根据自己选择的数据有关系

【前端搞地图】教你如何绘制一张填色专题地图【前端搞地图】教你如何绘制一张填色专题地图【前端搞地图】教你如何绘制一张填色专题地图接着将其发布,然后在自己的Mapbox应用里引用为底图就可以了。

上面这个方法固然可以实现效果,但是动态变化难以实现,例如,我想能够快速切换显示的属性,如果仍使用第一种方法,就只好发布三个图层,然后切换显示,这样效率不高。

思路2实现

在前端使用程序添加GeoJSON图层,在后端根据查询条件生成GeoJSON数据,需要数据时访问后端接口即可。前端代码如下:

map.addSource("fillSourceID", {
        type: "geojson",
        data: "./GeoJson.json"  // 自己的json文件
      });
      map.addLayer({
        id: "fillID",
        type: "fill" /* fill类型一般用来表示一个面,一般较大 */,
        source: "fillSourceID",
        paint: {
          "fill-color": {
            property: "confirmed", // this will be your density property form you geojson
            stops: [
              [0, "#ffd0a6"],
              [10, "#ffd0a6"],
              [100, "#ffaa7f"],
              [500, "#ff704e"],
              [1000, "#f04040"],
              [10000, "#b50a09"]
            ]
          },
          "fill-opacity": 1 /* 透明度 */
        }
      });

使用该种方式,程序员可以***控制展示的属性、展示的颜色配置展示数据时间周期等,程序的可扩展性得到了很大的增强。最终效果时实现:【前端搞地图】教你如何绘制一张填色专题地图