一、矢量图层的加载及显示 (shp)

:::warning 接下来,我们以临安行政区域图层切片(面图层,图层切片名称为 linanAI:region)为例进行说明。

  1. const wmtsUrl = 'http://192.168.0.17:8080/geoserver/gwc/service/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=linanAI:region&TILEMATRIXSET=EPSG:900913&TILEMATRIX=EPSG:900913:{z}&TILECOL={x}&TILEROW={y}&FORMAT=application/vnd.mapbox-vector-tile'
  2. // 为了和addLayer中字段source-layer的值保持一致,建议sourceName取同一个值region
  3. let sourceName = 'region'
  4. map.addSource(sourceName, {
  5. type: 'vector',
  6. tiles: [wmtsUrl],
  7. })
  • 通过 TMS 协议加载(推荐)
  1. const tmsUrl = 'http://192.168.0.17:8080/geoserver/gwc/service/tms/1.0.0/linanAI:region@EPSG:900913@pbf/{z}/{x}/{y}.pbf'
  2. // 为了和map.addLayer中字段source-layer的值保持一致,建议sourceName取同一个值region
  3. let sourceName = 'region'
  4. map.addSource(sourceName, {
  5. scheme: 'tms', // 加载TMS协议的切片地址,必须指明scheme字段为tms
  6. type: 'vector',
  7. tiles: [tmsUrl],
  8. })

添加图层

  1. // 添加临安范围填充面图层
  2. let options = {
  3. id: `city-area-layer`,
  4. source: `region`, // 取map.addSource中的sourceName
  5. 'source-layer': `region`, // 该值必须为图层切片名(linanAI:region)中的region
  6. type: 'fill',
  7. paint: {
  8. 'fill-color': 'rgba(28,75,93, 0.8)',
  9. },
  10. }
  11. map.addLayer(options)
  12. // 添加临安行政边界线图层
  13. let lineOption = {
  14. id: `city-line-layer`,
  15. source: `region`, // 取map.addSource中的sourceName
  16. 'source-layer': `region`, // 该值必须为图层切片名(linanAI:region)中的region
  17. type: 'line',
  18. layout: {
  19. 'line-cap': 'round',
  20. 'line-join': 'round',
  21. },
  22. paint: {
  23. 'line-color': '#6AF9F8',
  24. 'line-width': 2,
  25. },
  26. }
  27. map.addLayer(lineOption)

最终展示效果

Mapbox 中图层的使用 - 图1

二、栅格图层的加载及显示 (tiff)

:::warning 图层内容:临安区卫星底图
图层地址:http://192.168.0.17:8080/geoserver/gwc/service/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=linanAI:linanditu_WGS84&TILEMATRIXSET=EPSG:900913&TILEMATRIX=EPSG:900913:{z}&TILECOL={x}&TILEROW={y}&FORMAT=image/png :::

加载数据源和图层

Note:栅格图层切片一般都是通过 WMTS 协议 进行加载

  • 方式一:切片数据源和图层分开加载
  1. const wmtsUrl = 'http://192.168.0.17:8080/geoserver/gwc/service/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=linanAI:linanditu_WGS84&TILEMATRIXSET=EPSG:900913&TILEMATRIX=EPSG:900913:{z}&TILECOL={x}&TILEROW={y}&FORMAT=image/png'
  2. // 加载切片数据源
  3. map.addSource('linanditu_WGS84', {
  4. type: 'raster', // 切片地图使用png,所以这里设置为raster
  5. tiles: [wmtsUrl],
  6. })
  7. // 加载图层
  8. map.addLayer({
  9. id: 'linan_satellite',
  10. type: 'raster', // 这里要用raster,因为切片得到的是图片
  11. source: `linanditu_WGS84`,
  12. tileSize: 256,
  13. })
  • 方式二:切片数据源和图层同时加载(推荐)
  1. map.addLayer({
  2. id: 'linan_satellite',
  3. type: 'raster', // 这里要用raster,因为切片得到的是图片
  4. source: {
  5. type: 'raster', // 切片地图使用png,所以这里设置为raster
  6. tiles: [
  7. 'http://192.168.0.17:8080/geoserver/gwc/service/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=linanAI:linanditu_WGS84&TILEMATRIXSET=EPSG:900913&TILEMATRIX=EPSG:900913:{z}&TILECOL={x}&TILEROW={y}&FORMAT=image/png',
  8. ],
  9. },
  10. tileSize: 256,
  11. })

最终展示效果

Mapbox 中图层的使用 - 图2