2021-06-21

该博客介绍了如何在Vue项目中利用Mapbox.GL库加载本地Geoserver发布的建筑物矢量瓦片数据,展示了设置地图风格、添加源和图层、以及根据建筑物高度应用不同侧面图片的步骤。同时,文中提到了使用本地雪碧图来实现建筑物的视觉效果,并附带了实际运行的效果图。
摘要由CSDN通过智能技术生成

vue项目中使用mapbox.gl加载本地geoserver发布的建筑物数据

这是根据mapbox.gl官网示例,写的加载建筑的小demo

主要代码如下

	 if (!mapboxgl.supported()) {
        console.log("您的浏览器不支持WebGL,请升级到最新版本");
        return;
      }
      mapboxgl.accessToken = glToken;// 自己申请的token
      this.map = new mapboxgl.Map({
        container: "mapContainer",
        // style: "mapbox://styles/mapbox/light-v10",
        center: [113.54, 22.2],
        zoom: 18.5,
        // 倾斜角度
        pitch: 75,
        style: {
          version: 8,
          name: "Mapbox Streets",
          sources: {
            "mapbox-streets": {
              type: "vector",
              url: "mapbox://mapbox.mapbox-streets-v6",
            },
          },
          sprite: `${window.location.origin}/static/sprite/build`,// 这是用的本地的雪碧图
          // sprite: "mapbox://sprites/mapbox/streets-v8",
          glyphs: "mapbox://fonts/mapbox/{fontstack}/{range}.pbf",
          layers: [
            {
              id: "water",
              source: "mapbox-streets",
              "source-layer": "water",
              type: "fill",
              paint: {
                "fill-color": "#00ffff",
              },
            },
          ],
        },
      });

*sprite: ${window.location.origin}/static/sprite/build 地图的style这里的sprite用的是加载的本地的雪碧图,主要是测试下后面根据不同高度的建筑物侧面加不同的图片,看网上说mapbox官网上加载这个会生成@2x.json、@2x.png的,所以后面加载本地雪碧图时就按照这个来写的
在这里插入图片描述

在这里插入图片描述

this.map.addSource("source_build", {
        type: "vector",
        scheme: "tms",
        tiles: [
          // 这是本地用geoserver发布的建筑物的矢量瓦片服务
          "http://localhost:8080/geoserver/gwc/service/tms/1.0.0/aomen%3Aaomen@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf",
        ],
      });
      this.map.addLayer({
        id: "3d-buildings",
        source: "source_build",
        // source-layer中aomen是发布的图层的名称 
        "source-layer": "aomen",
        // 这个fill-extrusion类型用来加载建筑物的
        type: "fill-extrusion",
        minzoom: 15,
        paint: {
          // Floor是矢量数据里的字段名代表建筑物高度
          "fill-extrusion-height": [
            "interpolate",
            ["linear"],
            ["zoom"],
            15,
            0,
            15.05,
            ["get", "Floor"],
          ],
          // 建筑物侧面贴图
          "fill-extrusion-pattern": [
            "step",
            ["get", "Floor"],
            "l2",
            5,
            "l1",
            9,
            "r2",
          ],
          "fill-extrusion-opacity": 0.8,
        },
      });
      // 建筑物顶部
      this.map.addLayer({
        id: "buildings-top",
        source: "source_build",
        "source-layer": "aomen",
        type: "fill-extrusion",
        minzoom: 15,
        paint: {
          "fill-extrusion-color": "#52aff8",
          "fill-extrusion-height": [
            "interpolate",
            ["linear"],
            ["zoom"],
            15,
            0,
            15.05,
            ["get", "Floor"],
          ],
          "fill-extrusion-base": [
            "interpolate",
            ["linear"],
            ["zoom"],
            15,
            0,
            15.05,
            ["get", "Floor"],
          ],
          "fill-extrusion-opacity": 1,
        },
      });

fill-extrusion-pattern 添加图片这后面l2,l1,r2取得前面加载的xx@2x.json文件里对应的字段名

效果图(有点丑哈哈):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值