js+高德地图api实现地理定位

news/2024/10/24 2:34:31/

需求:使用高德地图进行签到
思路:使用高德地图获取当前定位,比对与目标定位点距离,根据距离值判断是否定位成功

  1. 创建api_key
    高德地图官方地址
    在这里插入图片描述

  2. 点击报到按钮,显示地图信息列表,若在报到范围内,可以点击报到按钮,否则按钮置灰。

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

  1. 思路:先创建地理围栏,再获取当前位置与地理围栏地址对比,若在允许的圆心范围内,则定位成功,否则失败
  2. 具体代码如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" type="text/css"><script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=bff97a5a5ba86b6d7d9a2b6f0ec49ed3"></script><script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script><script crossorigin="anonymous"integrity="sha512-XdUZ5nrNkVySQBnnM5vzDqHai823Spoq1W3pJoQwomQja+o4Nw0Ew1ppxo5bhF2vMug6sfibhKWcNJsG8Vj9tg=="src="https://lib.baomitu.com/vue/2.6.14/vue.min.js"></script><script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script><script type="text/javascript"src="https://webapi.amap.com/maps?v=2.0&key=bff97a5a5ba86b6d7d9a2b6f0ec49ed3&plugin=AMap.Geocoder"></script><title>Document</title><style>#container {margin: 10px auto;width: 90vw;height: 200px;}.sign-in-map {margin: auto;width: 90vw;height: 500px;}</style>
</head><body><div class="sign-in-map"><div id="container"></div><div class="sign-info"><h4 id="status"></h4><hr><p id="result"></p><div id="address"></div><hr></div></div><script>var vm = new Vue({el: '#checkWrap',data: {loadData: null,hadAppData: true,checkList: {unCheckList: null,hasCheckList: null,},userCardList: null,cardLayShow: false,checkedIndex: '',defaultCard: null,localCardId: '',recordIndex: 0,//记录当前tabusername: "",// map datamarker: null,map: null,polygon: null,nowPosition: false,position: "",geocoder: null,},mounted: function () {console.log('3.定位');this.initMap();},created: function () {console.log('1.创建地理围栏');this.setMap()console.log('2.获取地理围栏地址');this.getPosition();},methods: {setMap() {// 创建地理围栏axios.post("https://restapi.amap.com/v4/geofence/meta?key=a164c07704fc424e8ce33050bedcf1ef", {"name": "西湖","center": "120.121281,30.222718","radius": "1000","enable": "true","valid_time": "2029-12-31","repeat": "Mon,Tues,Wed,Thur,Fri,Sat,Sun","time": "00:00,11:59;13:00,20:59","desc": "西湖","alert_condition": "enter;leave"}).then((res) => {console.log("创建地理围栏");console.log(res)}).catch((error) => {console.log(error)})},initMap() {let that = this;this.map = new AMap.Map('container', {resizeEnable: true});AMap.plugin('AMap.Geolocation', function () {var geolocation = new AMap.Geolocation({enableHighAccuracy: true,//是否使用高精度定位,默认:truetimeout: 10000,          //超过10秒后停止定位,默认:5sposition: 'RB',    //定位按钮的停靠位置buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)zoomToAccuracy: true,   //定位成功后是否自动调整地图视野到定位点});that.map.addControl(geolocation);geolocation.getCurrentPosition(function (status, result) {console.log("当前位置定位结果");console.log(result);let lng = result.position.lng;let lat = result.position.lat;let time = parseInt((new Date().getTime()) / 1000);that.postion = lng + ',' + lat + ',' + time;console.log("反显地址1");that.getPositionByLonLats(lng, lat);console.log("反显地址2");that.positionCompare(that.postion, status, result);});});},getPosition() {axios.get("https://restapi.amap.com/v4/geofence/meta?key=a164c07704fc424e8ce33050bedcf1ef&gid=ef38d1dc-38ca-4612-8ff0-795ffdbaaf40").then((res) => {console.log("请求围栏地址区域");console.log(res)}).catch((err) => {console.log(err)})},positionCompare(position, status, result) {let that = this;axios.get("https://restapi.amap.com/v4/geofence/status?key=a164c07704fc424e8ce33050bedcf1ef&diu=356334102726551&locations=" + position).then((res) => {console.log("比对当前位置与围栏位置");console.log(res);if (status == 'complete') {if (res.data.data.nearest_fence_distance) {console.log("距离太远,报到失败")that.onError(result)} else {console.log("报到成功");that.onComplete(result)}} else {console.log("定位失败")that.onError(result)}}).catch((err) => {console.log(err);})},//解析定位结果onComplete(data) {document.getElementById('status').innerHTML = '签到成功'var str = [];str.push('定位结果:' + data.position);str.push('定位类别:' + data.location_type);if (data.accuracy) {str.push('精度:' + data.accuracy + ' 米');}//如为IP精确定位结果则没有精度信息str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));document.getElementById('result').innerHTML = str.join('<br>');},//解析定位错误信息onError(data) {document.getElementById('status').innerHTML = '签到失败'// document.getElementById('result').innerHTML = '失败原因排查信息:' + data.message + '</br>返回信息:' + data.originMessage;// console.log(data)},// 反显地址getPositionByLonLats(lng, lat) {console.log("经度:" + lng + "纬度" + lat);var lnglat = [lng, lat];// 地图上所标点的坐标this.geocoder = new AMap.Geocoder();this.geocoder.getAddress(lnglat, function (status, result) {console.log(result);if (status === 'complete' && result.regeocode) {var address = result.regeocode.formattedAddress;console.log(address);// document.getElementById('address').value = address;} else {log.error('根据经纬度查询地址失败')}});}}})</script><script></script>
</body></html>

http://www.ppmy.cn/news/659583.html

相关文章

剑指 Offer 51: 数组中的逆序对

这道题归根结底就是一个归并问题&#xff0c;逆序对本质上就是比较大小&#xff0c;如果两边作为一个整体比较过那么就可以排序合并&#xff08;因为这个过程每一步都计算了count的值&#xff0c;所以合并起来是可以的&#xff09;。 下面的k应该是mid1&#xff08;从中间的右…

高德地图实现昼夜、卫星图切换

简介 高德地图 JS API 是一套 JavaScript 语言开发的的地图应用编程接口&#xff0c;移动端、PC端一体化设计&#xff0c;一套 API 兼容众多系统平台。 教程 效果图 极夜蓝&#xff0c;参考 卫星图&#xff0c;参考 实现 新建mapAk.js文件 export const amapAk () &g…

GPS、谷歌、百度、高德坐标相互转换

GPS、谷歌、百度、高德坐标相互转换 一、在进行地图开发过程中&#xff0c;我们一般能接触到以下三种类型的地图坐标系&#xff1a; 1.WGS&#xff0d;84原始坐标系&#xff0c;一般用国际GPS纪录仪记录下来的经纬度&#xff0c;通过GPS定位拿到的原始经纬度&#xff0c;Goog…

高德地图通过经纬度获取地区城市

php curl 请求接口 /*** 模拟post进行url请求 * param string $url * param array $postData */ function https_request($url, $data null) {$curl curl_init();//初始化curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_TIMEOUT, 30);//允许 cURL 函数执…

高德地图的逆地理编码 | 将经纬度坐标转化为对应的地理位置

官网 地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API 官方解释&#xff1a;地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口&#xff0c;提供结构化地址与经纬度之间的相互转化的能力。 通读易懂也就是将经纬度坐标转化为对应的地理位置信息…

高德地图获取手机定位以及经纬度组件

父组件代码&#xff1a; html代码 <div><get-position :position.sync"currentPosition" :place.sync"currentPlace"/> </div>import GetPosition from "../../components/GetPosition" //引入GetPosition组件 export defau…

uniapp 打包app用不了腾讯地图|高德地图

原因1:好像app只支持高德|百度地图 好像app只支持高德|百度地图的,申请一个高德地图的key就可 SHA1&#xff1a; 1.dcolud开发平台地址:开发者中心 2.查看SHA1&#xff08;点击应用名称进入&#xff09; 3.查看证书 包名: key: 原因2:配置权限及设置key 1.配置key 2.配置权…

高德地图获取可视区域内四角坐标(东北,东南,西南,西北)

高德地图获取可视区域内四角坐标&#xff08;东北&#xff0c;东南&#xff0c;西南&#xff0c;西北&#xff09; 场景&#xff1a;当需要实现查询某坐标区域内的所有共享单车&#xff0c;那么常规操作就是把所选区域内的左上和右下两点经纬度给到后端。获取方法如下&#xff…