高德地图API使用教程

news2024/12/30 1:32:35

高德地图API使用教程

  • 开发前准备
    • 获取key值和相关安全密钥
  • 简单使用
  • 需求开发
    • h5范围打卡-vue3
    • 地图选点-vue3

开发前准备

获取key值和相关安全密钥

  • 进入高德开放平台
    https://lbs.amap.com/
    在这里插入图片描述
  • 登录后,打开我的应用(无账号要先注册)
    在这里插入图片描述
  • 打开我的应用,创建新应用,填入创建的名称和选择应用类型
    在这里插入图片描述
    在这里插入图片描述
  • 按需填入自己的名称及服务平台,域名白名单可不填
    在这里插入图片描述
    在这里插入图片描述
  • 这就获取到了key值和相关安全密钥
    在这里插入图片描述
  • 回到首页后,点击开发支持,可查看教程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

简单使用

 window._AMapSecurityConfig = {
    securityJsCode: "e7949ee6421d41dcb86f0be390297524"
  };
  AMapLoader.load({
    key: "申请好的Web端开发者Key,首次调用 load 时必填", // 
    version: "2.0" // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  })
    .then(AMap => {
    })

需求开发

h5范围打卡-vue3

在这里插入图片描述

<script setup lang="ts" name="informationList">
import { showToast } from "vant";
import { ref, onMounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";

let circle = ref(null); //圆形存放
let btnStatus = ref<boolean>(false); // 活动签到按钮状态
const ClockLngLat = ["传入的经度", "传入的维度"];
let marker = ref(null); // 标点
let locationLngLat = ref([]); //自己当前定位


onMounted(() => {
  // 获取位置坐标
  drawCircle();
});
// 初始化打卡点
const drawCircle = () => {
  window._AMapSecurityConfig = {
    securityJsCode: "e7949ee6421d41dcb86f0be390297524" //申请的密钥,现在的版本必须加密钥咯~
  };
  AMapLoader.load({
    key: "83146d89a638bd73dd676e6771dd2139", // 申请好的Web端开发者Key,首次调用 load 时必填
    version: "1.4.15", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    // resizeEnable: true,
    plugins: [
      "AMap.Geolocation", //定位
      "AMap.Circle", //圆形
      "AMap.Marker", //标记点
      "AMap.GeometryUtil" //通用的函数库
    ] // 需要使用的的插件列表
  }).then(AMap => {
    //设置地图容器id
    const map = new AMap.Map("serviceSiteMap", {
      viewMode: "3D", //是否为3D地图模式
      zoom: 16, //初始化地图级别
      center: ClockLngLat //初始化地图中心点位置
    });
    //判断地图是否有圆形
    if (circle) {
      //清除地图所有圆形跟标记点
      map.remove(circle);
      map.remove(marker);
    }
    //绘制圆形
    circle = new AMap.Circle({
      center: ClockLngLat, // 圆心位置
      radius: 200, // 圆半径 米
      fillColor: "rgba(103,182,255)", //圆形填充颜色
      fillOpacity: 0.3, //透明度
      strokeColor: "#5898ff", //描边颜色
      strokeWeight: 1 // 描边宽度
    });
    //地图添加圆形
    map.add(circle);
    // 获取位置坐标
    const geolocation = new AMap.Geolocation({
      enableHighAccuracy: true, // 是否使用高精度定位,默认:true
      timeout: 5000 // 设置定位超时时间,默认:无穷大
    });
    geolocation.getCurrentPosition((status: string, result: any) => {
      if (status == "complete") {
        locationLngLat.value = [result.position.lng, result.position.lat];
        btnStatus.value = false;
        //本地位置点添加标记点
       const marker = new AMap.Marker({
          map: map, //要显示该marker的地图对象
          position: locationLngLat.value, // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
          icon: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png', //图标显示
          topWhenClick: true //鼠标点击时marker是否置顶,默认false
        });
        marker.setMap(map); //将点添加至图片
      } else {
        btnStatus.value = true;
        showToast("请确定是否已打开定位权限"); //注意!谷歌目前定位不行!!!!
      }
    });
  });
};
// 打卡事件
const isClockAdd = () => {
  AMapLoader.load({}).then(AMap => {
    // contains 判断 p 是否在 this.circle圆形 里面
    const isPoint = circle.contains(locationLngLat.value);
    const circleCen = circle.getCenter();
    if (isPoint) {
        //打卡成功后的逻辑
    } else {
      //AMap.GeometryUtil.distance 计算两点之间的距离   减去  圆形半径 500米
      var distance =
        Math.round(AMap.GeometryUtil.distance(locationLngLat.value, circleCen)) - 500;
      showToast("打卡失败,您距离打卡地点还有" + distance + "米");
    }
  });
};
</script>

<template>
  <div class="mapCheck">
    <van-nav-bar title="活动打卡" left-text="返回" left-arrow @click-left="router.go(-1)" />
    <div id="serviceSiteMap"></div>
    <van-button type="primary" class="btnMap" @click="isClockAdd" :disabled="btnStatus">{{ route?.params?.status=='1'? "活动签到":'活动签退' }}</van-button>
  </div>
</template>


<style scoped lang="less">
.mapCheck {
  overflow: hidden;
  #serviceSiteMap {
    padding: 0px;
    margin: 0px;
    width: 100%;
    height: 88vh;
  }
  .btnMap {
    width: 80%;
    height: 8vw;
    background: #057fdd;
    color: #fff;
    font-size: 15px;
    margin: auto;
    position: fixed;
    left: 10%;
    bottom: 60px;
    border-radius: 6px;
    z-index: 999999;
    opacity: 1;
  }
}
</style>

地图选点-vue3

在这里插入图片描述

  <div id="container"></div>
 ..
 const getMap = () => {
  window._AMapSecurityConfig = {
    securityJsCode: "e7949ee6421d41dcb86f0be390297524"
  };
  AMapLoader.load({
    key: "83146d89a638bd73dd676e6771dd2139", // 申请好的Web端开发者Key,首次调用 load 时必填
    version: "2.0" // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  })
    .then(AMap => {
      const map = new AMap.Map("container", {
        //设置地图容器id
        viewMode: "3D", //是否为3D地图模式
        zoom: 12, //初始化地图级别
        resizeEnable: true,
        center: [104.055467, 30.542967]
        // merchantDetails.value?.serviceSites[0].longitude,
        // merchantDetails.value?.serviceSites[0].dimension
        // ] //初始化地图中心点位置
      });
      map.on("click", function (e) {
        map.clearMap();
        regeoCode([e.lnglat.getLng(), e.lnglat.getLat()], AMap, map);
      });
    })
    .catch(e => {
      console.log(e);
    });
  //为地图注册click事件获取鼠标点击出的经纬度坐标
};
const regeoCode = (position: any, AMap, map) => {
  AMap.plugin("AMap.Geocoder", () => {
    const geocoder = new AMap.Geocoder({
      city: "010", //城市设为北京,默认:“全国”
      radius: 1000 //范围,默认:500
    });
    geocoder.getAddress(position, function (status, result) {
      if (status === "complete" && result.regeocode) {
        var address = result.regeocode.formattedAddress;
        const name = new AMap.Marker({
          // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
          position: position,
          content: `<div style="
             background-color: #2589ff;
             width: 150px;
             padding: 3px;
             border-radius: 5px;
             color: #fff;
             font-size: 14px;
             font-weight: 900;">${address}</div>`,
          offset: new AMap.Pixel(-40, 5)
        });
        const marker = new AMap.Marker({
          icon:
            "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
          position: position,
          offset: new AMap.Pixel(-26, -54)
        });
        name.setMap(map);
        marker.setMap(map);
        activityAddress.value = address;
        longitude.value=position[0]
        dimension.value=position[1]

        // document.getElementById('address').value = address;
      } else {
        console.log("根据经纬度查询地址失败");
      }
    });
  });
};
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3dsmax 蒙皮替换骨架

需求 本文描述部分来源于 TAZORN&#xff0c;最后附上Python实现 保留蒙皮信息&#xff0c;将骨骼替换成新的骨架模型M上的Skin目前指定的是骨架A&#xff0c;在蒙皮信息不变的情况 下更换成骨架B 替换的操作需要用到 SkinUtilities 工具 手动进行骨骼替换的方法 Snapshot原…

maven打包时显示无效jdk版本

1、配置当前项目所需的Jdk版本 2、与当前项目指定的jdk版本相同 3、与当前项目指定的jdk版本相同 4、与当前项目指定的jdk版本相同 5、指定主项目启动时的vm配置与当前项目所需版本相同

手写Spring:第18章-数据类型转换工厂设计实现

文章目录 一、目标&#xff1a;数据类型转换工厂二、设计&#xff1a;数据类型转换工厂三、实现&#xff1a;数据类型转换工厂3.1 工程结构3.2 数据类型转换工厂类图3.3 定义类型转换接口3.3.1 类型转换处理接口3.3.2 类型转换工厂3.3.3 通用类型转换接口3.3.4 类型转换注册接口…

共筑安全防线|与安全狗相约2023年国家网络安全宣传周

在《关于网络安全和信息化工作重要指示》里 “坚持筑牢国家网络安全屏障”被提及 网络安全的重要性再次被重申 实际上 在“十四五”数字经济发展规划及“二十大”上 网络安全也被多次强调 “网络安全”不再简单停留在字面意思上 它成为囊括 你我个人隐私安全、信息安全 …

Linux:LVS (NAT群集搭建)

模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关&#xff1a; 192.168.254.4 web2 服务器 ip 192.168.254.2 网关&#xff1a; 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…

方案:TSINGSEEE青犀AI智能分析网关森林防火智慧监管平台方案

一、方案背景 森林是地球上最重要的生态系统之一&#xff0c;对环境、气候、水循环和空气质量具有重要影响。森林火灾会造成巨大的经济损失&#xff0c;具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点&#xff0c;严重危及人民生命财产和森林资源安全&a…

video标签自动播放音视频并绘制波形图

html中的<video>标签可以用来播放常见的音视频格式&#xff0c;支持的格式包括:MP3、Ogg、WAV、AAC、MP4、WebM、AVI等&#xff0c;当然支持的格式也和浏览器和操作系统有关。这里以一个可以自动播放音视频并绘制波形图的页面为例说明一下<video>标签的用法。 vid…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧&#xff0c;具体内容包含NPM介绍、NPM命令、常用模块等内容&#xff0c;还包…

Android开发常见问题:字符串乱码问题

前言 最近的项目里遇到了字符串乱码的问题&#xff0c;记录一下研究心得。 正文 一、byte数组如何保存字符串 通常情况下&#xff0c;数据的传输和读取都是通过socket&#xff0c;读取socket需要使用byte数组&#xff0c;例如要写入一个字符串到socket中&#xff0c;我们需…

Redis-带你深入学习数据类型Hash【面试重点】

目录 1、基础知识 2、相关命令 2.1、hset、hget 2.2、hexists 2.3、hdel 2.4、hkeys、hvals、hgetall 2.5、hmget、hmset 2.6、hlen 2.7、hsetNX 2.8、Hincrby、Hincrbyfloat 3、应用场景-缓存 4、缓存方式对比 1、基础知识 redis中存储数据本身就是以键值对的形式…

华为OD机试 - 真正的密码 - 数据结构list(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路具体解题思路&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#…

智慧商城项目

智慧商城 - 授课大纲 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-adc2-444c-ad11-0e60f5693f66/doc-2221080 演示地址&#xff1a;http://cba.itlike.com/public/mweb/#/ 01. 项目功能演示 1.明确功能模块 启动准备好的代码&#xff0c;演示移动端面…

视频用二维码怎么分享?扫码看视频在线制作方法

怎么将本地的视频生成二维码呢&#xff1f;相信很多小伙伴经常会储存许多自己喜欢的视频&#xff0c;那么如果想要给多人分享时&#xff0c;一个个发送会比较麻烦&#xff0c;那么将视频生成二维码就是提高分享效率的一种方式。制作视频二维码的方法也很简单&#xff0c;使用二…

【python】PySide中QMessageBox设置中文按钮及使用

PyQt、PySide使用QMessageBox的时候会发现按钮都是英文的&#xff0c;对于中文的应用软件来说会降低使用体验。本文将以问答对话框为例&#xff0c;介绍如何设置中文按钮&#xff0c;以及如何使用。 实验环境 本文实验环境为&#xff1a;Windows 10&#xff0c;Python 3.8&am…

UI基础——UGUI源码架构

文章目录 如何阅读源码UGUI源码整体架构源码整体类图事件模块EventSystem类图点击事件时序图 参考&#xff1a; 如何阅读源码 阅读源码是提高编程能力和技术水平的重要途径之一。以下是一些有效的阅读源码的方法&#xff1a; 确定目标&#xff1a;&#xff08;1&#xff09;了…

Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析

文章目录 前言 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、文件管理、数据库管理、容器管理等下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理…

【C刷题训练营】第三讲(c语言入门训练)

前言: 大家好&#xff0c;我决定日后逐渐更新c刷题训练营的内容&#xff0c;或许能帮到入门c语言的初学者&#xff0c;如果文章有错误&#xff0c;非常欢迎你的指正&#xff01; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&…

如何做见效快的SEO推广?

答案是&#xff1a;见效快的推广可以选择谷歌SEO谷歌Ads双向运营。 关键词研究 对于任何SEO推广&#xff0c;一切始于准确的关键词研究。 使用专业工具 利用如SEMrush、Ahrefs等工具&#xff0c;找到与你业务相关&#xff0c;但竞争程度较低的关键词。 分析竞争对手 查看…

Mysql性能调优——1.深入理解Mysql索引数据结构和算法

本系列所说的Mysql性能调优&#xff0c;主要是针对开发者在实际环境中的sql调优&#xff0c;代码层面上的优化。不涉及到mysql底层代码的调优。 我们知道&#xff0c;一个mysql数据表&#xff0c;数据量小的时候&#xff0c;可能简单的查询耗时不会太久&#xff0c;性能也可以…

孤儿僵尸守护进程的简单理解

孤儿进程&#xff1a; 一个父进程退出&#xff0c;而它的一个或多个子进程还在运行&#xff0c;那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程&#xff1a; 答案是&#xff1a; kill 父…