您现在的位置是:首页 > 技术教程 正文

在vue3项目中使用新版高德地图

admin 阅读: 2024-03-31
后台-插件-广告管理-内容页头部广告(手机)

高德开发平台 : 高德开放平台 | 高德地图API (amap.com)

1. 首先你要注册好账号登录

2. 获取key和密钥 

 

自2021年12月02日升级,升级之后所申请的 key 必须配备安全密钥 jscode 一起使用

NPM方式安装和使用(基础版):

        按 NPM 方式安装使用 Loader :

npm i @amap/amap-jsapi-loader --save

        在页面中通过NPM 方式安装的使用 :

  1. <script setup>
  2. import AMapLoader from '@amap/amap-jsapi-loader';
  3. /*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用shallowRef进行非深度监听,
  4. 因为在Vue3中所使用的Proxy拦截操作会改变JSAPI原生对象,所以此处需要区别Vue2使用方式对地图对象进行非深度监听,
  5. 否则会出现问题,建议JSAPI相关对象采用非响应式的普通对象来存储)*/
  6. import { shallowRef } from '@vue/reactivity';
  7. import {ref} from "vue";
  8. // const map = shallowRef(null);
  9. const path = ref([]);
  10. const current_position = ref([]);
  11. function initMap() {
  12. window._AMapSecurityConfig = {
  13. securityJsCode: '8e920f73eb2e6880a92ea6662eefc476',
  14. }
  15. AMapLoader.load({
  16. key:"e4e3d44a98350790a1493450032bbec5", // 申请好的Web端开发者Key,首次调用 load 时必填
  17. version:"2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  18. plugins:[''], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
  19. }).then((AMap)=>{
  20. const map = new AMap.Map("container",{ //设置地图容器id
  21. viewMode:"3D", //是否为3D地图模式
  22. zoom:13, //初始化地图级别
  23. center:[113.808299,34.791787], //初始化地图中心点位置
  24. });
  25. }).catch(e=>{
  26. console.log(e);
  27. })
  28. }
  29. initMap()
  30. script>
  31. <style>
  32. #container{
  33. padding:0px;
  34. margin: 0px;
  35. width: 100%;
  36. height: 800px;
  37. }
  38. style>

完整代码:

  1. <script setup>
  2. import AMapLoader from '@amap/amap-jsapi-loader';
  3. /*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用shallowRef进行非深度监听,
  4. 因为在Vue3中所使用的Proxy拦截操作会改变JSAPI原生对象,所以此处需要区别Vue2使用方式对地图对象进行非深度监听,
  5. 否则会出现问题,建议JSAPI相关对象采用非响应式的普通对象来存储)*/
  6. import { shallowRef } from '@vue/reactivity';
  7. import {ref} from "vue";
  8. // const map = shallowRef(null);
  9. const path = ref([]);
  10. const current_position = ref([]);
  11. function initMap() {
  12. window._AMapSecurityConfig = {
  13. securityJsCode: '8e920f73eb2e6880a92ea6662eefc476',
  14. }
  15. AMapLoader.load({
  16. key:"e4e3d44a98350790a1493450032bbec5", // 申请好的Web端开发者Key,首次调用 load 时必填
  17. version:"2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  18. // plugins:[''], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
  19. }).then((AMap)=>{
  20. const map = new AMap.Map("container",{ //设置地图容器id
  21. viewMode:"3D", //是否为3D地图模式
  22. zoom:13, //初始化地图级别
  23. center:[113.808299,34.791787], //初始化地图中心点位置
  24. });
  25. // 添加插件
  26. AMap.plugin(["AMap.ToolBar", "AMap.Scale", "AMap.HawkEye","AMap.Geolocation","AMap.MapType","AMap.MouseTool"], function () {
  27. //异步同时加载多个插件
  28. // 添加地图插件
  29. map.addControl(new AMap.ToolBar()); // 工具条控件;范围选择控件
  30. map.addControl(new AMap.Scale()); // 显示当前地图中心的比例尺
  31. map.addControl(new AMap.HawkEye()); // 显示缩略图
  32. map.addControl(new AMap.Geolocation()); // 定位当前位置
  33. map.addControl(new AMap.MapType()); // 实现默认图层与卫星图,实时交通图层之间切换
  34. // 以下是鼠标工具插件
  35. const mouseTool = new AMap.MouseTool(map);
  36. // mouseTool.rule();// 用户手动绘制折线图,测量距离
  37. mouseTool.measureArea(); // 测量面积
  38. });
  39. // 单击
  40. map.on('click',(e) => {
  41. // lng ==> 经度值 lat => 维度值
  42. current_position.value = [e.lnglat.lng,e.lnglat.lat];
  43. path.value.push([e.lnglat.lng,e.lnglat.lat]);
  44. // addMarker();
  45. // addPolyLine();
  46. })
  47. // 实例化点标记
  48. // 第一种(封成函数来触发)
  49. function addMarker() {
  50. const marker = new AMap.Marker({
  51. icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
  52. position: current_position.value, // 这里我们通过上面的点击获取经纬度坐标,实时添加标记
  53. // 通过设置 offset 来添加偏移量
  54. offset: new AMap.Pixel(-26, -54),
  55. });
  56. marker.setMap(map);
  57. }
  58. // 第二种 直接写死 position 的经纬度值
  59. /*const marker = new AMap.Marker({
  60. icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
  61. position: [113.808299,34.791787],
  62. // 通过设置 offset 来添加偏移量
  63. offset: new AMap.Pixel(-26, -54),
  64. });
  65. marker.setMap(map);*/
  66. // 折线
  67. function addPolyLine() {
  68. const polyline = new AMap.Polyline({
  69. path: path.value,
  70. isOutline: true,
  71. outlineColor: "#ffeeff",
  72. borderWeight: 1,
  73. strokeColor: "#3366FF",
  74. strokeOpacity: 0.6,
  75. strokeWeight: 5,
  76. // 折线样式还支持 'dashed'
  77. strokeStyle: "solid",
  78. // strokeStyle是dashed时有效
  79. // strokeDasharray: [10, 5],
  80. lineJoin: "round",
  81. lineCap: "round",
  82. zIndex: 50,
  83. });
  84. map.add([polyline]);
  85. }
  86. }).catch(e=>{
  87. console.log(e);
  88. })
  89. }
  90. initMap()
  91. script>
  92. <style>
  93. #container{
  94. padding:0px;
  95. margin: 0px;
  96. width: 100%;
  97. height: 800px;
  98. }
  99. style>

地图插件效果图:

实例化点标记 :

        第一种方式效果:

         第二种方式效果:

 矢量图 --> 折线:

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜