Style.json详解

在mapbox-gl地图开发过程中,style无疑是最重要的结构。它是数据驱动地图的核心,地图依据此绘制加载;同时它也是地图诊断问题的核心,地图上图层出不来,图标没加载,文字标识不存在,无不基于此作为最终解决手段

加载简单地图

地图加载最简单的结构如下,我们核心的style是一个json对象,我们初始化时设置给地图,并且在添加,删除,更新图层时,都是在操作此对象

    this.mapStyle = require('./static/map.json');
    this.map = new mapboxgl.Map({
      accessToken: this.accessToken,
      container: this.$refs.map,
      interactive: true,
      style:
        this.mapStyle || "mapbox://styles/haxzie/ck7h838qb0bik1iofe0k2i3f2",
      center: [this.viewState.longitude, this.viewState.latitude],
      zoom: this.viewState.zoom,
      pitch: this.viewState.pitch,
      bearing: this.viewState.bearing,
    });

获取style

map.getStyle()

style详解

在这里插入图片描述

  1. version 没什么特殊意义,可能时js v8引擎
  2. sprite:所有的地图图标从此加载,此url往往对应url.json+url.png
  3. glyphs:地图上所有标注所依赖的文字,都要制作成这种格式,按需加载 sources:地图上所有数据数据源,只与数据相关,与渲染无关
  4. layers:地图上实际图层,关乎渲染的一切,包括图标,标注,图层的顺序【数组顺序】,颜色等,这个要经常查阅文档

数据源 sources

在这里插入图片描述
数据源分为三类 vector,raster以及geojson,可以以目的默认为两类
1.死数据:基本不会更改的,不动态生成的vector,raster
2.活数据:通过接口可组装的,一般用geojson,其中的data可以指定setData(data),data是一个元素几何featureCollection

layer

有了数据源,我们就可以说明如何绘制数据了
常见的有以下几种
1.circle:圆点
2.symbol :图标(加标注)
3.line:线
4.fill :多边形
5.fill-extrusion :多边形拉起
6.raster:相当与绘制图片
7.hillshade:绘制地形

背景颜色

{
      "id": "background",
      "type": "background",
      "paint": {
        "background-color": "#fff",
        "background-opacity": 1
      }
    }

fill,多边形

  {
      "id": "greenground",
      "type": "fill",
      "source": "greenground",
      "source-layer": "greenground",
      "layout": {
        "visibility": "visible"
      },
      "paint": {
        "fill-color": "#b6e59e"
      }
    },

line

  {
      "id": "provincialhighway",
      "type": "line",
      "source": "provincialhighway",
      "source-layer": "provincialhighway",
      "layout": {
        "visibility": "visible"
      },
      "paint": {
        "line-color": "#F2934A",
        "line-opacity": 1,
        "line-width": 4
      }
    }

symbol

 {
      "id": "checkwell",
      "type": "symbol",
      "minzoom": 15,
      "source": "checkwell",
      "source-layer": "checkwell",
      "layout": {
        "icon-image": "bg-checkwell_n",
        "icon-size": 1.5
      }
    }

raster

  {
      "id": "tdt",
      "type": "raster",
      "source": "tdt",
      "paint": {
        "raster-opacity": 0.5
      }
    }

fill-extrusion

{
	'id': '3d-buildings',
	'source': 'composite',
	'source-layer': 'building',
	'filter': ['==', 'extrude', 'true'],
	'type': 'fill-extrusion',
	'minzoom': 15,
	'paint': {
		'fill-extrusion-color': '#aaa',
		'fill-extrusion-height': [
			"interpolate", ["linear"],
			["zoom"],
			15, 0,
			15.05, ["get", "height"]
		],
		'fill-extrusion-base': [
			"interpolate", ["linear"],
			["zoom"],
			15, 0,
			15.05, ["get", "min_height"]
		],
		'fill-extrusion-opacity': .6
	}

以上时最常用的几种绘制说明,还有很多属性需要查询文档

使用style来诊断

说一下一种常规问题,比如说一个点图层加上去了,但是图标出不来;
1.map.getStyle()获取到完整json
2.style.sprite查询网络请求中是否请求了style.sprite+‘.png’/‘.json’;如果没有,则sprite缺失导致,否则需要进一步看
3.style.source获取对应数据源style.source.myptlayer,如果时geojson类型的可以查看其data属性,如果里面featureCollection对象的features为空说明没有数据,否则下一步;
4.style.layers查找到定义的图层名,查看其icon是否设置,查看其是否开启layout{visibility:‘visible’};如果为none,则不可见;否则需要把icon的值到2所请求的sprite.json中查找;
以上就是一般诊断过程

mapbox-gl精髓的部分=>表达式

比如说一个线图层,我希望某个属性红色,某个属性白色,默认黑色,其中roadType需要在数据的properties里面有

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        roadType:1
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            67.1484375,
            59.88893689676585
          ],
          [
            146.6015625,
            61.938950426660604
          ]
        ]
      }
    }
  ]
}
  {
      "id": "provincialhighway",
      "type": "line",
      "source": "provincialhighway",
      "source-layer": "provincialhighway",
      "layout": {
        "visibility": "visible"
      },
      "paint": {
        "line-color":["get","roadType",
        1,"#f00",
        2,"#fff",
        "#000"
		],
        "line-opacity": 1,
        "line-width": 4
      }
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
npm package.json是一个用于描述和配置npm包的文件。它是一个包含了项目的元数据和依赖关系的JSON文件。在package.json中,你可以指定项目的名称、版本、作者、许可证等信息,同时还可以列出项目所依赖的其他npm包及其版本要求。 要创建一个新的package.json文件,你可以在终端中进入项目的根目录,并执行以下命令: ``` npm init ``` 这将引导你完成创建package.json文件的过程,你需要回答一些关于项目的问题,比如项目名称、版本、作者等。 另外,如果你想使用淘宝镜像来加快npm包的安装速度,你可以通过以下方法来设置npm镜像registry为淘宝镜像: ``` npm config set registry https://registry.npm.taobao.org ``` 这将把npm的默认registry设置为淘宝镜像,以后使用npm安装包时会从淘宝镜像源获取。 希望这些信息能够帮助到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [npm与package.json详解](https://blog.csdn.net/xingmei_ok/article/details/90299089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [npm与package.json](https://blog.csdn.net/jnshu_it/article/details/85228962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值