高德地图 Web JS API示例学习笔记(7)——图层(三方标准图层、自由数据图层)

三方标准图层

卫星图+掩模

组合使用简易行政区图-世界、卫星图、以及掩模功能,实现了只显示每个区域的地形图的效果。

district = new AMap.DistrictSearch(opts);
    district.search('中国', function (status, result) {
      var bounds = result.districtList[0].boundaries;
      var mask = []
      for (var i = 0; i < bounds.length; i += 1) {
        mask.push([bounds[i]])
      }
      var disCountry = new AMap.DistrictLayer.World({
        // 调整图层的显示层级
        zIndex: 0,
        // 禁止掩膜,掩膜功能对其无效
        rejectMapMask: true
      })
    })

掩膜功能与前文相似,不同之处,此示例在世界地图中禁止了掩膜功能。
在这里插入图片描述

WMTS

在这里插入图片描述
在这里插入图片描述

  1. 使用TileLayer.WMTS加载OGC标准的WMTS地图,仅支持EPSG3857坐标系统的WMTS图层。
  2. 本示例中,加载河北的WMS图层没有样式,需要在发布该图层的Server中配置相应的样式,本数据由GeoServer发布,需要使用uDig或者geotolls来配置相应的sld样式文件
var wms = new AMap.TileLayer.WMTS({
        url: 'https://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_Density/MapServer/WMTS/',
        blend: false,
        tileSize: 256,
        params: {
            Layer: '0',
            Version: '1.0.0',
            Format: 'image/png',
            TileMatrixSet: 'EPSG:3857'
        }
    });
    wms.setMap(map);

    // 加载geoserver发布的本地数据
    var wms2 = new AMap.TileLayer.WMS({
      url: 'http://localhost:8787/geoserver/webgis/wms',
      blend: false,
      tileSize: 512,
      params: { 'LAYERS': 'webgis:hebeifinance', VERSION: '1.1.1' }
    })
    wms2.setMap(map)

自有数据图层

图片图层

使用ImageLayer加载图片图层,可用于景区导览图等场景。

var imageLayer = new AMap.ImageLayer({
        url: 'http://amappc.cn-hangzhou.oss-pub.aliyun-inc.com/lbs/static/img/dongwuyuan.jpg',
        bounds: new AMap.Bounds(
            [116.327911, 39.939229],
            [116.342659, 39.946275]
        ),
        zooms: [15, 18]
    });
    var map = new AMap.Map('container', {
        resizeEnable: true,
        center: [116.33719, 39.942384],
        zoom: 15,
        layers: [
            new AMap.TileLayer(),
            imageLayer
        ]
    });

视频图层

使用VideoLayer创建视频图层,适用于需要在地图上放置视频的场景

 var bounds = new AMap.Bounds([93, -9], [147, 32]);
    var VideoLayer = new AMap.VideoLayer({
        autoplay: true,
        loop: true,
        zIndex: 130,
        //可提供不同格式以达到多浏览器兼容
        url: [
            'https://a.amap.com/jsapi_demos/static/video/cloud.m4v',
            'https://a.amap.com/jsapi_demos/static/video/cloud.mov'
        ],
        bounds: bounds,
        zooms: [3, 18],
        opacity: 0.7
    });
    VideoLayer.setMap(map);

Canvas图层

使用CanvasLayer在地图上添加canvas图层。

var canvas = document.createElement('canvas');
    canvas.width = canvas.height = 200;

    var context = canvas.getContext('2d')
    context.fillStyle = 'rgb(0,100,255)';
    context.strokeStyle = 'white';
    context.globalAlpha = 1;
    context.lineWidth = 2;

    var radious = 0;
    var draw = function () {
      context.clearRect(0, 0, 200, 200)
      context.globalAlpha = (context.globalAlpha - 0.01 + 1) % 1;
      radious = (radious + 1) % 100;

      context.beginPath();
      context.arc(100, 100, radious, 0, 2 * Math.PI);
      context.fill();
      context.stroke();

      //2D视图时可以省略
      CanvasLayer.reFresh();
	  //控制动画
      AMap.Util.requestAnimFrame(draw);
    };

    var CanvasLayer = new AMap.CanvasLayer({
      canvas: canvas,
      bounds: new AMap.Bounds(
        [116.3, 39.9],
        [116.34, 39.94]
      ),
      zooms: [3, 18],
    });

    CanvasLayer.setMap(map);
    draw();

canvas可做动画,绘制特别的图形

热力图

使用Heatmap添加热力图到地图上,适用于做热力、数据分析等场景。

var heatmap;
    map.plugin(["AMap.Heatmap"], function () {
      //初始化heatmap对象
      heatmap = new AMap.Heatmap(map, {
        radius: 25, //给定半径
        opacity: [0, 0.8]
        /*,
        gradient:{
            0.5: 'blue',
            0.65: 'rgb(117,211,248)',
            0.7: 'rgb(0, 255, 0)',
            0.9: '#ffea00',
            1.0: 'red'
        }
         */
      });
      //设置数据集:该数据为北京部分“公园”数据
      heatmap.setDataSet({
        data: heatmapData,
        max: 100
      });
    });

样例数据:
在这里插入图片描述

自定义图层-Canvas

使用CustomLayer创建自定义图层,以Canvas作为绘制方式。

function getData(callback) {
      AMap.plugin('AMap.DistrictSearch', function () {
        var search = new AMap.DistrictSearch();
        search.search('中国', function (status, data) {
          if (status === 'complete') {
            var positions = []
            var provinces = data['districtList'][0]['districtList']
            for (var i = 0; i < provinces.length; i += 1) {
              // 存储各省中心点和半径
              positions.push({
                center: provinces[i].center,
                radius: Math.max(2, Math.floor(Math.random() * 10))
              })
            }
            callback(positions)
          }
        });
      });
    }
    function addLayer(positions) {
      AMap.plugin('AMap.CustomLayer', function () {
        var canvas = document.createElement('canvas');
        var customLayer = new AMap.CustomLayer(canvas, {
          zooms: [3, 10],
          alwaysRender: true,//缩放过程中是否重绘,复杂绘制建议设为false
          zIndex: 120
        });
        var onRender = function () {
          var retina = AMap.Browser.retina;
          var size = map.getSize();//resize
          var width = size.width;
          var height = size.height;
          canvas.style.width = width + 'px'
          canvas.style.height = height + 'px'
          if (retina) {//高清适配
            width *= 2;
            height *= 2;
          }
          canvas.width = width;
          canvas.height = height;//清除画布
          var ctx = canvas.getContext("2d");
          ctx.fillStyle = '#08f';
          ctx.strokeStyle = '#fff';
          ctx.beginPath();
          // 遍历各省数据画圆
          for (var i = 0; i < positions.length; i += 1) {
            var center = positions[i].center;
            var pos = map.lngLatToContainer(center);
            var r = positions[i].radius;
            if (retina) {
              pos = pos.multiplyBy(2);
              r *= 2
            }
            ctx.moveTo(pos.x + r, pos.y)
            ctx.arc(pos.x, pos.y, r, 0, 2 * Math.PI);
          }
          ctx.lineWidth = retina ? 6 : 3
          ctx.closePath();
          ctx.stroke();
          ctx.fill();
        }
        customLayer.render = onRender;
        customLayer.setMap(map);
      });
    }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高德地图 Web API 提供了 `AMap.TileLayer` 类来实现地图图层的切换。你可以通过创建 `AMap.TileLayer` 实例来切换不同的地图类型,如标准地图或卫星地图。 以下是一个简单的示例,演示如何在高德地图 Web API 中切换标准地图和卫星地图: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>高德地图 Web API - 切换标准地图和卫星地图</title> <style type="text/css"> #mapContainer { width: 100%; height: 600px; } </style> </head> <body> <div id="mapContainer"></div> <script src="https://webapi.amap.com/maps?v=1.4.15&key=你申请的高德地图API Key"></script> <script> var map = new AMap.Map('mapContainer', { zoom: 10, center: [116.397428, 39.90923] }); // 创建标准地图图层 var tileLayer = new AMap.TileLayer(); // 创建卫星地图图层 var satelliteLayer = new AMap.TileLayer.Satellite(); // 添加切换控件 map.addControl(new AMap.MapType({ defaultType: 0, // 默认显示标准地图 showRoad: true, // 是否显示路网图层 mapTypes: [tileLayer, satelliteLayer] // 显示的地图类型数组 })); </script> </body> </html> ``` 在上面的示例中,我们首先创建了一个 `AMap.Map` 实例,并设置了地图的缩放级别和中心点。然后,我们创建了一个标准地图图层一个卫星地图图层,并将它们添加到了地图上。 最后,我们通过创建一个 `AMap.MapType` 实例并将其添加到地图上来添加切换控件。`AMap.MapType` 的 `defaultType` 属性指定了默认显示的地图类型,`showRoad` 属性指定了是否显示路网图层,`mapTypes` 属性指定了可供切换的地图类型数组。 这样,你就可以在高德地图 Web API 中轻松切换标准地图和卫星地图了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值