首页 > 其他分享 >高德地图 JS API2.0(入门级使用教程)

高德地图 JS API2.0(入门级使用教程)

时间:2024-08-09 20:59:22浏览次数:18  
标签:map 地图 API2.0 JS API AMap 图层 高德

高德地图 JS API2.0 入门使用教程

准备工作

注册高德地图开发者账号

进入高德开放平台首页使用手机号注册,然后完成身份认证。

注册

创建应用

[应用管理] --> [创建新的应用]–>[填写应用名称以及应用类型] -->[添加],然后获取到安全密钥和 key 即可。

过程如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

阅读参考文档

JS API 安全密钥使用:JS API 安全密钥使用-基础-进阶教程-地图 JS API 2.0 | 高德地图API (amap.com)

地图JSAPI 2.0 参考手册:参考手册-地图 JS API 2.0 | 高德地图API (amap.com)

JS API 2.0 使用概述概述-地图 JS API 2.0|高德地图API (amap.com)

高德地图图层分布

在这里插入图片描述

创建地图实例

首先展示地图

  • 准备好一个html网页的框架

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta
          name="viewport"
          content="initial-scale=1.0, user-scalable=no, width=device-width"
        />
        <title>高德地图JS API</title>
        <style>
          html,
          body,
          #container {
            width: 100%;
            height: 100%;
          }
        </style>
      </head>
      <body>
        <div id="container"></div>
      </body>
    </html>
    
  • 加载 JS API

    <script type="text/javascript">
      window._AMapSecurityConfig = {
        securityJsCode: "「你申请的安全密钥」",
      };
    </script>
    <script src="https://webapi.amap.com/loader.js"></script>
    <script type="text/javascript">
      AMapLoader.load({
        key: "「你申请的应用key」", //申请好的Web端开发者key,调用 load 时必填
        version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
      })
        .then((AMap) => {
          //JS API 加载完成后获取AMap对象
        })
        .catch((e) => {
          console.error(e); //加载错误提示
        });
    </script>
    

    或者使用明文加载(如下),但是这种方式不适合在生产模式中使用

    <script type="text/javascript">
        window._AMapSecurityConfig = {
        securityJsCode: "「你申请的安全密钥」",
    };
    </script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=「你申请的应用key」"></script>
    
  • 地图初始化

    • 如果使用JS API Loader加载,这个就写在.then((AMap)=>{})
    • 这个写在另一个script文件中,同时要在前面两个 script文件加载之后,但是需要保证container容器已经挂载到 DOM 中。
    const map = new AMap.Map("container", {
      viewMode: '2D', //默认使用 2D 模式
      zoom: 11, //地图级别
      center: [116.397428, 39.90923], //地图中心点
    });
    
  • 添加主题样式

    以下为初始时设置,也可以使用 map.setMapStyle('amap://styles/whitesmoke')来动态的设置地图样式。

    map = new AMap.Map("container", {
      mapStyle: "amap://styles/fresh", //设置地图的显示样式
    });
    
  • 综合起来的效果

在这里插入图片描述

展示图层

JS API 支持官方图层、三方图层、数据图层等。

本文介绍如何在地图上添加官方图层:实时交通路况图层AMap.TileLayer.Traffic,以及对此图层的其他操作。

  • 创建图层并加载

    ​ Layers属性值是设置地图图层的数组,数组可以是图层中的一个或多个,即可以同时显示多个图层

    // 创建图层
    const layer = new AMap.createDefaultLayer({
      zooms: [3, 20], //可见级别
      visible: true, //是否可见
      opacity: 1, //透明度
      zIndex: 0, //叠加层级
    });
    
    // 加载图层
    const map = new AMap.Map("container", {
      viewMode: "2D", //默认使用 2D 模式
      zoom: 11, //地图级别
      center: [116.397428, 39.90923], //地图中心点
      layers: [layer], //layer为创建的默认图层
    });
    
    // 这里加载的图层是默认的图层,即使不写也会默认显示
    
  • 加载交通图层

    // 创建交通图层
    const traffic = new AMap.TileLayer.Traffic({
      autoRefresh: true, //是否自动刷新,默认为false
      interval: 180, //刷新间隔,默认180s
    });
    // 加载
    map.add(traffic); //通过add方法添加图层
    
  • 显示或者隐藏图层

    traffic.show(); //显示路况图层
    traffic.hide(); //隐藏路况图层
    

添加控件

在这里插入图片描述

  1. JS API 的控件可以以 插件的方式 引入的

推荐异步加载方式,在需要的地方引入。通过AMap.plugin方法按需引入控件,在plugin回调之后使用控件功能。

  • 添加控件

    //异步加载控件
    AMap.plugin('AMap.ToolBar',function(){ 
      var toolbar = new AMap.ToolBar(); //缩放工具条实例化
      map.addControl(toolbar); //添加控件
    });
    
  • 控件的显示和隐藏

    toolbar.show(); //缩放工具展示
    toolbar.hide(); //缩放工具隐藏
    
  1. JS API 的控件也可以使用同步预加载的方式

    <script src="//webapi.amap.com/maps?v=2.0&key=申请的key值&&plugin=AMap.控件1,AMap.控件2,AMap.控件3,AMap.控件4"></script>
    

    引入之后然后以创建对象的形式进行创建:

    var controlBar = new AMap.ControlBar({
        visible: false,
        position: {
            top: '10px',
            right: '10px'	// 控件停靠位置 { top: 5; left: 5; right: 5; bottom: 5 } 或者 'LT': 左上角, 'RT': 右上角, 'LB': 左下角, 'RB': 右下角
        }
    });
    map.addControl(controlBar);
    

添加点标记

在这里插入图片描述

  • 自定义 Marker

    //点标记显示内容
    const markerContent = `<div class="custom-content-marker">
    <img src="//a.amap.com/jsapi_demos/static/demo-center/icons/dir-via-marker.png">
    <div class="close-btn" οnclick="clearMarker()">X</div>
    </div>`
    
    

    ​ 自定义样式内容

    .custom-content-marker {
      position: relative;
      width: 25px;
      height: 34px;
    }
    
    .custom-content-marker img {
      width: 100%;
      height: 100%;
    }
    
    .custom-content-marker .close-btn {
      position: absolute;
      top: -6px;
      right: -8px;
      width: 15px;
      height: 15px;
      font-size: 12px;
      background: #ccc;
      border-radius: 50%;
      color: #fff;
      text-align: center;
      line-height: 15px;
      box-shadow: -1px 1px 1px rgba(10, 10, 10, .2);
    }
    
    .custom-content-marker .close-btn:hover{
      background: #666;
    }
    
  • 创建 Marker 对象

    // 创建marker对象
    const position = new AMap.LngLat(116.397428, 39.90923); //Marker 经纬度
    const marker = new AMap.Marker({
      position: position,
      content: markerContent, //将 html 传给 content
      offset: new AMap.Pixel(-13, -30), //以 icon 的 [center bottom] 为原点
    });
    // 添加marker
    map.add(marker);
    

    注意:

    offset: new AMap.Pixel(-13, -30),之所以为(-13,-30),因为需要让上图以 [center bottom] 的方式扎在对应的经纬度上,上图是宽26px,高34px(去掉下部阴影为30px),因此需要对自定内容做个offset的偏移(-13,-30)

  • Marker 绑定事件

    function clearMarker() {
      map.remove(marker); //清除 marker
    }
    document.querySelector(".close-btn").onclick = clearMarker; //绑定点击事件
    

添加多边形

AMap.Polygon对象为用户提供在地图图面绘制多边形的能力。可以为多边形设置填充颜色fillColor、描边颜色strokeColor轮廓线样式等属性。与之前的 CanvasSVG路径的绘制方法一致。

  • 绘制路径

    const pathArr = [
      [
        [
          [121.7789, 31.3102],
          [121.7279, 31.3548],
          [121.5723, 31.4361],
          [121.5093, 31.4898],
          [121.5624, 31.4864],
          [121.5856, 31.4547],
          [121.7694, 31.3907],
          [121.796, 31.3456],
          [121.7789, 31.3102],
        ],
      ],
    ];
    const polygon = new AMap.Polygon({
      path: pathArr, //多边形路径
      fillColor: "#ccebc5", //多边形填充颜色
      strokeOpacity: 1, //线条透明度
      fillOpacity: 0.5, //填充透明度
      strokeColor: "#2b8cbe", //线条颜色
      strokeWeight: 1, //线条宽度
      strokeStyle: "dashed", //线样式
      strokeDasharray: [5, 5], //轮廓的虚线和间隙的样式
    });
    
    // 添加到地图
    map.add(polygon);
    

在这里插入图片描述

  • Polygon 添加事件,提升交互效果

    //鼠标移入更改样式
    polygon.on("mouseover", () => {
      polygon.setOptions({
        fillOpacity: 0.7, //多边形填充透明度
        fillColor: "#7bccc4",
      });
    });
    //鼠标移出恢复样式
    polygon.on("mouseout", () => {
      polygon.setOptions({
        fillOpacity: 0.5,
        fillColor: "#ccebc5",
      });
    });
    
  • 效果图

在这里插入图片描述

  • 使用到的方法
参数/方法说明类型参数值描述默认值
fillColor多边形填充颜色String使用16进制颜色代码赋值‘#00B2D5’
strokeWeight轮廓线宽度Number-2
strokeColor线条颜色String使用16进制颜色代码赋值‘#00D3FC’
fillOpacity多边形填充透明度,取值范围Number取值范围[0,1],0表示完全透明,1表示不透明。0.5
strokeOpacity轮廓线透明度Number取值范围[0,1],0表示完全透明,1表示不透明0.9
strokeStyle轮廓线样式String实线:“solid” 虚线:“dashed”“solid”
strokeDasharray勾勒形状轮廓的虚线和间隙的样式,在strokeStyle为dashed时有效,在 ie9+浏览器有效Array详见 参考手册-
setOptions()修改多边形属性的方法,如样式风格,包括组成多边形轮廓线的节点、轮廓线样式等。Function--

搜索地点

通过AMap.plugin方法按需引入插件,在plugin回调之后使用插件功能。

AMap.plugin(["AMap.PlaceSearch"], function () {
  const placeSearch = new AMap.PlaceSearch({
    pageSize: 5, //单页显示结果条数
    pageIndex: 1, //页码
    city: "010", //兴趣点城市
    citylimit: true, //是否强制限制在设置的城市内搜索
    map: map, //展现结果的地图实例
    panel: "my-panel", //参数值为你页面定义容器的 id 值<div id="my-panel"></div>,结果列表将在此容器中进行展示。
    autoFitView: true, //是否自动调整地图视野使绘制的 Marker 点都处于视口的可见范围
  });
  placeSearch.search("北京大学"); //使用插件搜索关键字并查看结果
});

在这里插入图片描述

使用到的方法:

参数/方法说明类型参数值描述默认值
pageSize单页显示结果条数Number0 - 10020
pageIndex页码Number>=11
city兴趣点城市String城市名(中文或中文全拼)、citycode、adcode‘全国’
citylimit是否强制限制在设置的城市内搜索Booleantrue | falsefalse
map展现结果的地图实例。当指定此参数后,搜索结果的标注、线路等均会自动添加到此地图上AMap.Map--
panel结果列表的 HTML 容器id或容器元素,提供此参数后,结果列表将在此容器中进行展示。String |HTMLElement|Boolean属性值为Boolean类型时,可选值只可为false-
autoFitView用于控制在搜索结束后,是否自动调整地图视野使绘制的 Marker 点都处于视口的可见范围Booleantrue | false-
search()根据输入关键字提示匹配信息,支持中文、拼音Function-

驾车路线规划

驾车路线规划需要使用AMap.Driving插件。

JS API 的路线规划种类有:驾车AMap.Driving、公交AMap.Transfer、步行AMap.Walking、骑乘AMap.Riding和货车AMap.TruckDriving等。

在这里插入图片描述

  • 通过起始点的名称进行规划

    // 驾车导航
    const points = [
        { keyword: '清华大学', city: '北京' }, //起始点坐标
        { keyword: '北京体育大学', city: '北京' } //终点坐标
    ]
    
    //引入和创建驾车规划插件
    AMap.plugin(["AMap.Driving"], function () {
      const driving = new AMap.Driving({
        map: map,	// 地图对象
        panel: "my-panel", //参数值为你页面定义容器的 id 值<div id="my-panel"></div>
      });
      //获取起终点规划线路
      driving.search(points, function (status, result) {
        if (status === "complete") {
          //status:complete 表示查询成功,no_data 为查询无结果,error 代表查询错误
          //查询成功时,result 即为对应的驾车导航信息
          console.log(result);
        } else {
          console.log("获取驾车数据失败:" + result);
        }
      });
    });
    
  • 使用经纬度进行规划

    const startLngLat = [116.379028, 39.865042] //起始点坐标
    const endLngLat = [116.427281, 39.903719] //终点坐标
    
    //引入和创建驾车规划插件
    AMap.plugin(["AMap.Driving"], function () {
      const driving = new AMap.Driving({
        map: map,	// 地图对象
        panel: "my-panel", //参数值为你页面定义容器的 id 值<div id="my-panel"></div>
      });
      //获取起终点规划线路
      driving.search(startLngLat, endLngLat, function (status, result) {
        if (status === "complete") {
          //status:complete 表示查询成功,no_data 为查询无结果,error 代表查询错误
          //查询成功时,result 即为对应的驾车导航信息
          console.log(result);
        } else {
          console.log("获取驾车数据失败:" + result);
        }
      });
    });
    

标签:map,地图,API2.0,JS,API,AMap,图层,高德
From: https://blog.csdn.net/m0_73777400/article/details/141068690

相关文章

  • JS中原型相关的十个知识点总结
    JavaScript中的原型(Prototype)是理解对象和继承机制的核心概念。以下是我对JavaScript原型相关知识点的总结和详细讲解:1.原型对象(PrototypeObject)在JavaScript中,每个对象都有一个关联的对象,这个关联的对象称为“原型”。当你尝试访问一个对象的属性时,如果该对象本身......
  • CORS与JSONP漏洞原理及其复现
    文章目录CORS跨域共享介绍同源策略配置产生条件复现自动化爆破工具JSONP跨域回调介绍复现自动审查工具安装教程使用教程在现代Web开发中,跨域资源共享(CORS)和JSONP是两种重要的跨域通信技术。CORS通过设置HTTP头来控制资源共享,而JSONP则利用了本文将深入探讨......
  • 万户OA ezOFFICE graph_include.jsp接口SQL注入漏洞复现 [附POC]
    文章目录万户OAezOFFICEgraph_include.jsp接口SQL注入漏洞复现[附POC]0x01前言0x02漏洞描述0x03影响版本0x04漏洞环境0x05漏洞复现1.访问漏洞环境2.构造POC3.复现0x06修复建议万户OAezOFFICEgraph_include.jsp接口SQL注入漏洞复现[附P......
  • SpreadJS 个人学习及项目遇到的一些问题的总结
    最近公司有SpreadJS的部分,刚接触挺迷茫的,因为这个文档有点不清晰,有些属性啥的,看到跟没看一样,他没有那种效果图例说明,属性说的就很简单,看了大半天感觉没看出来啥,等开始做的时候就各种问题,感谢有同事替我们负重前行,趟过了很多的坑,这导致比预期入手好很多,目前只是算简单的上手,所以就......
  • 记某项目的vue.config.js的配置,主要是获取git版本信息,并写入新创建的json文件
    /**@format*/constmoment=require("moment");constFileManagerPlugin=require("filemanager-webpack-plugin");constGreatePlugin=require("generate-asset-webpack-plugin");constshell=require("shelljs");le......
  • vue2 bpmnjs流程图
    原作者gitee地址:gitclonehttps://gitee.com/cjy2353/best-vue-bpmnjs.git"bpmn-js":"^17.9.2","vue":"^2.6.11",node-v"v14.17.6"使用:`importBpmnfrom'com/Bpmn'components:{Bpmn,},`bpmn组件如下:......
  • @JsonAnyGetter 注解
    @JsonAnyGetter注解在Jackson中,@JsonAnyGetter注解用于指示Jackson在序列化过程中取得对象动态属性的方法。它的作用是将动态属性以键值对的形式包含在序列化结果中。1.1@JsonAnyGetter注解的要求使用@JsonAnyGetter注解的方法必须满足以下要求:方法必须是公共的方......
  • jsencrypt.min.js
       /*!Forlicenseinformationpleaseseejsencrypt.min.js.LICENSE.txt*/!function(t,e){"object"==typeofexports&&"object"==typeofmodule?module.exports=e():"function"==typeofdefine&&define.amd?define([]......
  • Nodejs事件循环小记
    执行原理当Node.js启动时,会先初始化EventLoop,然后执行提供的输入脚本(主模块同步代码),过程中可能会产生异步API调用、定时器或调用process.nextTick(),然后开始处理事件循环。Node.js的EventLoop分为6个阶段,会按照顺序反复执行,每当进入某一个阶段的时候,都会从对应......
  • java读取JSON文件并解析
    importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.codehaus.jettison.json.JSONObject;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;......