mapboxgl加载天地图

mapboxgl加载天地图

新建文件并初始化

  • 删掉 mapboxgl.Map对象
<!DOCTYPE html>

<html lang="en">

  

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <script src='https://api.mapbox.***/mapbox-gl-js/v3.1.0/mapbox-gl.js'></script>

    <link href='https://api.mapbox.***/mapbox-gl-js/v3.1.0/mapbox-gl.css' rel='stylesheet' />

    <style>

        body {

            margin: 0;

            padding: 0;

        }

  

        #map {

            position: absolute;

            top: 0;

            bottom: 0;

            width: 100%;

        }

    </style>

</head>

  

<body>

    <div id='map'></div> <!-- 地图容器 -->

  
  

    <script>

        mapboxgl.a***essToken = "your token";

  
  
  

  
    </script>

</body>

  

</html>

实现思路

  • 先构造了一个空的style,这样map对象里就不含任何数据源和图层,也就是一张空白的地图。
  • 然后定义了一个addRasterTileLayer函数,用以构建栅格瓦片数据源和图层并添加到地图中。
  • 最后再用天地图的瓦片url构造了一个背景图层和一个背景标注图层。

构造空style

  • 声明mapboxgl.Map对象时,构造了一个空的style,这样map对象里就不含任何数据源和图层
        const map = new mapboxgl.Map({

            container: 'map',

            style: {//为map构造一个空的style

                "version": 8,

                "sources": {},

                "layers": [],

            },

            center: [116.405419, 39.923568],

  

            projection: "globe", // 显示地球

            zoom: 11

        });

设置天地图地图瓦片url

  • 填写天地图token
  • 填写天地图地图服务url
        //天地图的token

        const tiandituToken = 'd12deb9576426df9aff82075b754790a';

        /*

        * 天地图提供了多种背景地图和标注供选择,

        * 只要从http://lbs.tianditu.gov.***/server/MapService.html找到对应的url即可

        * 这里使用了了矢量地图和注记

        * */

        //矢量底图

        const vecwUrl = 'https://t0.tianditu.gov.***/vec_w/wmts?' +       'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&' +'TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=' + tiandituToken;

        //矢量注记

        const cvawUrl = 'https://t3.tianditu.gov.***/cva_w/wmts?' +        'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&' +'TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=' + tiandituToken;

声明addRasterTileLayer函数

  • 向地图中添加一个栅格瓦片图层

        /**

         * 向地图中添加一个栅格瓦片图层

         * @param map

         * @param url 瓦片url

         * @param sourceId 数据源id,保证唯一性即可

         * @param layerId 图层id,保证唯一性即可

         */

        function addRasterTileLayer(map, url, sourceId, layerId) { //添加栅格瓦片图层

            map.addSource(sourceId, { //添加数据源

                type: 'raster', //数据源类型

                tiles: [url],//瓦片url

                tileSize: 256

            });

            map.addLayer({

                id: layerId,

                type: 'raster', //图层类型

                source: sourceId

            });

        }

加载地图

  • map对象加载完成后触发
        map.on('load', function () { //地图加载完成后触发

            //选择加载矢量底图及其标注

            addRasterTileLayer(map, vecwUrl, 'vecw', 'vecw') //添加矢量底图

            addRasterTileLayer(map, cvawUrl, 'cvaw', 'cvaw') //添加矢量注记

        })

效果

完整代码

<!DOCTYPE html>

<html lang="en">

  

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <script src='https://api.mapbox.***/mapbox-gl-js/v3.1.0/mapbox-gl.js'></script>

    <link href='https://api.mapbox.***/mapbox-gl-js/v3.1.0/mapbox-gl.css' rel='stylesheet' />

    <style>

        body {

            margin: 0;

            padding: 0;

        }

  

        #map {

            position: absolute;

            top: 0;

            bottom: 0;

            width: 100%;

        }

    </style>

</head>

  

<body>

    <div id='map'></div> <!-- 地图容器 -->

  
  

    <script>

        mapboxgl.a***essToken = "token";

  
  
  

        const map = new mapboxgl.Map({

            container: 'map',

            style: {//为map构造一个空的style

                "version": 8,

                "sources": {},

                "layers": [],

            },

            center: [116.405419, 39.923568],

  

            projection: "globe", // 显示地球

            zoom: 11

        });

  

        //天地图的token

        const tiandituToken = 'd12deb9576426df9aff82075b754790a';

        /*

        * 天地图提供了多种背景地图和标注供选择,

        * 只要从http://lbs.tianditu.gov.***/server/MapService.html找到对应的url即可

        * 这里使用了了矢量地图和注记

        * */

        //矢量底图

        const vecwUrl = 'https://t0.tianditu.gov.***/vec_w/wmts?' +

            'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&' +

            'TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=' + tiandituToken;

        //矢量注记

        const cvawUrl = 'https://t3.tianditu.gov.***/cva_w/wmts?' +

            'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&' +

            'TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=' + tiandituToken;

  

        /**

         * 向地图中添加一个栅格瓦片图层

         * @param map

         * @param url 瓦片url

         * @param sourceId 数据源id,保证唯一性即可

         * @param layerId 图层id,保证唯一性即可

         */

        function addRasterTileLayer(map, url, sourceId, layerId) { //添加栅格瓦片图层

            map.addSource(sourceId, { //添加数据源

                type: 'raster', //数据源类型

                tiles: [url],//瓦片url

                tileSize: 256

            });

            map.addLayer({

                id: layerId,

                type: 'raster', //图层类型

                source: sourceId

            });

        }

  

        map.on('load', function () { //map对象加载完成后触发

            //选择加载矢量底图及其标注

            addRasterTileLayer(map, vecwUrl, 'vecw', 'vecw') //添加矢量底图

            addRasterTileLayer(map, cvawUrl, 'cvaw', 'cvaw') //添加矢量注记

        })

  
  
  

    </script>

</body>

  

</html>

B站:【Mapbox加载天地图】 https://www.bilibili.***/video/BV1VT421e7WD/?share_source=copy_web&vd_source=24206258d49211ba255fbcea1f9b4d1e

公众号: OctS

  

转载请说明出处内容投诉
CSS教程网 » mapboxgl加载天地图

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买