vue3高德地图点击标点

简介: vue3高德地图点击标点


1.首先如果没有key的话需要在高德开发平台申请key。

2.安装

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

3.容器:

<template>
  <div>
    <div class="info">
      <h4>获取地图级别与中心点坐标</h4>
      <p>当前级别:<span id="map-zoom">11</span></p>
      <p>当前中心点:<span id="map-center">121.498586,31.239637</span></p>
    </div>
    <div class="input-card">
      <h4>鼠标左键获取经纬度:</h4>
      <div class="input-item">
        <input type="text" readonly="true" id="lnglat" />
      </div>
    </div>
    <div id="map"></div>
  </div>
</template> 

4.容器样式:

#map {
  margin: 50px auto;
  width: 800px;
  height: 500px;
}

5.在组件中引入所需的 API

import AMapLoader from '@amap/amap-jsapi-loader'; // 使用加载器加载JSAPI,可以避免异步加载、重复加载等常见错误加载错误
import { shallowRef } from '@vue/reactivity';
import { onMounted } from '@vue/runtime-core';

6.创建一个 Marker 实例。

let markerPoint = new AMap.Marker({
    position: [121.939253, 29.905078], // 基点坐标
    offset: new AMap.Pixel(-12, -32), // //标记点相对偏移量,可以固定其地址,不随着地图缩放而偏移
    draggable: false, //点标记对象是否可拖拽移动
    defaultCursor: 'pointer'
 });
 map.add(markerPoint); // 地图添加标记

7.定义样式:

// 方法一
var startIcon = new AMap.Icon({
  size: new AMap.Size(25, 34),// 图标尺寸
    image: '//a.amap.com/jsapi_demos/static/demo-center/icons/dir-marker.png',// 图标的取图地址
    imageSize: new AMap.Size(135, 40),// 图标所用图片大小
    imageOffset: new AMap.Pixel(-9, -3)// 图标取图偏移量
});
// 将 icon 传入 marker
var startMarker = new AMap.Marker({
  position: new AMap.LngLat(116.35,39.89),
    icon: startIcon,
    offset: new AMap.Pixel(-13, -30)
});
startMarker.setMap(map);//设置地图标记
// 方法二
let marker = new AMap.Marker({
  // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
    position: [116.406315, 39.908775],
    offset: new AMap.Pixel(-13, -30),//标记点相对偏移量,可以固定其地址,不随着地图缩放而偏移
    icon: new AMap.Icon({
      size: new AMap.Size(40, 50),  //图标的大小
        image: "https://webapi.amap.com/theme/v1.3/images/newpc/way_btn2.png",
        imageOffset: new AMap.Pixel(0, -60)
  })
});
map.add(marker);

显示地图层级与中心点信息:

function logMapinfo(){
  let zoom = map.getZoom(); //获取当前地图级别
  let center = map.getCenter(); //获取当前地图中心位置
    document.querySelector("#map-zoom").innerText = zoom;
    document.querySelector("#map-center").innerText = center.toString();
};
//绑定地图移动与缩放事件
map.on('moveend', logMapinfo);
map.on('zoomend', logMapinfo);

获取经纬度坐标:

//为地图注册click事件获取鼠标点击出的经纬度坐标
map.on('click', function(e) {
  document.getElementById("lnglat").value = e.lnglat.getLng() + ',' + e.lnglat.getLat()
});

整体代码:

<template>
  <div>
    <div class="info">
      <h4>获取地图级别与中心点坐标</h4>
      <p>当前级别:<span id="map-zoom">11</span></p>
      <p>当前中心点:<span id="map-center">121.498586,31.239637</span></p>
    </div>
    <div class="input-card">
      <h4>鼠标左键获取经纬度:</h4>
      <div class="input-item">
        <input type="text" readonly="true" id="lnglat" />
      </div>
    </div>
    <div id="map"></div>
  </div>
</template> 
<script setup>
import AMapLoader from '@amap/amap-jsapi-loader'; // 使用加载器加载JSAPI,可以避免异步加载、重复加载等常见错误加载错误
import { shallowRef } from '@vue/reactivity';
import { onMounted } from '@vue/runtime-core';
const map = shallowRef(null); // 初始化地图
function initMap() {
  AMapLoader.load({
    key: 'e6cf30fd79d7b556ee881ddd0281e8d0', // 申请好的Web端开发者Key,首次调用 load 时必填
    version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    plugins: [
      'AMap.Scale', //工具条,控制地图的缩放、平移等
      'AMap.ToolBar', //比例尺,显示当前地图中心的比例尺
      'AMap.Geolocation', //定位,提供了获取用户当前准确位置、所在城市的方法
      'AMap.HawkEye', //鹰眼,显示缩略图
    ], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
  })
    .then((AMap) => {
      let map = new AMap.Map('map', {
        //设置地图容器id
        zoom: 15, //初始化地图层级
        viewMode: '3D', //是否为3D地图模式
        center: [113.98331263696, 35.288301920621], //初始化地图中心点位置
        dragEnable: true, //禁止鼠标拖拽
        scrollWheel: true, //鼠标滚轮放大缩小
        doubleClickZoom: true, //双击放大缩小
        keyboardEnable: true, //键盘控制放大缩小移动旋转
      });
      map.setDefaultCursor('pointer'); //使用CSS默认样式定义地图上的鼠标样式(default/pointer/move/crosshair)
      map.addControl(new AMap.Scale()); //异步同时加载多个插件
      map.addControl(new AMap.ToolBar());
      map.addControl(new AMap.Geolocation());
      let HawkEye = new AMap.HawkEye({
        position: 'LT', //控件停靠位置(LT/RT/LB/RB)
      });
      map.addControl(HawkEye);
      map.add(
        new AMap.Marker({
          position: map.getCenter(),
        })
      );
      // map.add(marker); // 地图添加标记
      AMapLoader.load({
        //可多次调用load
        plugins: ['AMap.MapType'],
      })
        .then((AMap) => {
          map.addControl(new AMap.MapType());
        })
        .catch((e) => {
          console.error(e);
        });
      // 显示地图层级与中心点信息
      function logMapinfo() {
        let zoom = map.getZoom(); //获取当前地图级别
        let center = map.getCenter(); //获取当前地图中心位置
      }
      //绑定地图移动与缩放事件
      map.on('moveend', logMapinfo);
      map.on('zoomend', logMapinfo);
      //为地图注册click事件获取鼠标点击出的经纬度坐标
      map.on('click', function (e) {
        document.getElementById('lnglat').value = e.lnglat.getLng() + ',' + e.lnglat.getLat();
      });
      let infoWindow = new AMap.InfoWindow({
        //创建信息窗体
        isCustom: false, //使用自定义窗体
        anchor: 'top-right', //信息窗体的三角所在位置
        content: `<h4>信息窗体</h4>`, //信息窗体的内容可以是任意html片段
        offset: new AMap.Pixel(16, -45),
      });
      infoWindow.open(map, [121.939253, 29.905078]); //填写想要窗体信息指示的坐标
    })
    .catch((e) => {
      console.log(e);
    });
}
// 调用地图初始化函数:onMounted 函数会在 DOM 初始化完成后调用,建议在 mounted 函数中调用地图初始化方法
onMounted(() => {
  initMap();
});
</script>
<style>
#map {
  margin: 50px auto;
  width: 100%;
  height: 500px;
}
</style>
相关文章
|
13天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
116 64
|
13天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
1月前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
64 7
|
1月前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
71 3
|
1月前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
52 1
|
1月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
56 1
|
1月前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
JavaScript 定位技术 API
Vue中如何使用高德地图
Vue中如何使用高德地图
671 0
Vue中如何使用高德地图
|
20天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
34 1
vue学习第四章
|
20天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
28 1
vue学习第九章(v-model)