前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id=12974

效果图如下:

 

 

#

#### 使用方法

```使用方法

<!--

// 腾讯地图key注册地址(针对H5端,manifest.json中web配置,配置定位与地图 若是微信小程序只需配置微信小程序权限配置):

https://lbs.qq.com/dev/console/application/mine

-->

<!-- scale缩放级别,取值范围为3-20 longitude:地图中心精度 latitude:地图中心纬度 markers:覆盖物 show-location:是否显示定位-->

<map class="mapV" :latitude="infoDict.lat"

:longitude="infoDict.lon" scale='6' :markers="covers" show-location=false>

</map>

<!--

page.json配置以下

// 权限设置

"permission": {

"scope.userLocation": {

"desc": "您的位置信息将用于该活动签到"

}

}

-->

```

#### HTML代码部分

```html

<template>

<view class="content">

<scroll-view class="scrollV" scroll-y="true">

<view class="inputView">

<text class="leftTitle">活动内容</text>

</view>

<view class="inputView">

{{"去清远古龙峡漂流"}}

</view>

<view class="inputView">

<text class="leftTitle">签到须知</text>

</view>

<view class="inputView">

{{'距离活动地10km内可签到成功'}}

</view>

<!--

// 腾讯地图key注册地址(针对H5端,manifest.json中web配置,配置定位与地图 若是微信小程序只需配置微信小程序权限配置):

https://lbs.qq.com/dev/console/application/mine

-->

<!-- scale缩放级别,取值范围为3-20 longitude:地图中心精度 latitude:地图中心纬度 markers:覆盖物 show-location:是否显示定位-->

<map class="mapV" :latitude="infoDict.lat" :longitude="infoDict.lon" scale='6' :markers="covers"

show-location=false>

</map>

</scroll-view>

<view class="btnview" @tap="goSignIn">{{'签到' + distanceStr}}</view>

</view>

</template>

```

#### JS代码 (引入组件 填充数据)

```javascript

<script>

import Vue from 'vue'

export default {

data() {

return {

// 覆盖物

covers: [],

// 目标经纬度信息

infoDict: {

'lon': '113.17',

'lat': '23.8'

},

// 我的定位经纬度信息

myPinInfo: {},

// 默认距离为负数

distance: -9999,

distanceStr: ''

}

},

onShow() {

// 获取当前位置

this.getlocation();

},

methods: {

getlocation() {

let myThis = this;

console.log('获取位置开始');

uni.getLocation({

type: 'gcj02',

success: function(res) {

myThis.myPinInfo = res;

console.log('当前位置的经度:' + res.longitude);

console.log('当前位置的纬度:' + res.latitude);

myThis.covers = [{

latitude: myThis.infoDict.lat,

longitude: myThis.infoDict.lon,

width: 30,

height: 30,

id: 20000,

iconPath: '../../static/activity_pin.png'

},

{

latitude: myThis.myPinInfo.latitude,

longitude: myThis.myPinInfo.longitude,

width: 30,

height: 30,

id: 20001,

iconPath: '../../static/people_pin.png'

}

];

myThis.distance = myThis.getDistance(myThis.infoDict.lat, myThis.infoDict.lon, myThis

.myPinInfo.latitude, myThis.myPinInfo.longitude)

myThis.distanceStr = '(当前距离' + myThis.distance + '米)';

}

});

},

// 计算两点距离

getDistance(lat1, lng1, lat2, lng2) {

let EARTH_RADIUS = 6378.137;

let radLat1 = this.rad(lat1);

let radLat2 = this.rad(lat2);

let a = radLat1 - radLat2;

let b = this.rad(lng1) - this.rad(lng2);

let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +

Math.cos(radLat1) * Math.cos(radLat2) *

Math.pow(Math.sin(b / 2), 2)));

s = s * EARTH_RADIUS;

//s = Math.round(s * 10000d) / 10000d;

s = Math.round(s * 10000) / 10000;

s = s * 1000; //乘以1000是换算成米

return s;

},

// 弧度计算

rad(d) {

return d * Math.PI / 180.0;

},

// 立即签到

goSignIn(e) {

if (this.distance > 10000) {

uni.showModal({

title: '温馨提示',

content: '您的当前位置距离活动目的地太远, 无法签到',

showCancel: false

})

return;

} else if (this.distance < 0) {

uni.showModal({

title: '温馨提示',

content: '您的定位权限未打开, 请点击小程序右上角···菜单按钮, 然后点击设置,打开定位权限',

showCancel: false

})

return

}

},

}

}

</script>

```

#### CSS

```CSS

<style>

.content {

display: flex;

flex-direction: column;

height: 100%;

}

.scrollV {

width: 100vw;

}

.mapV {

width: calc(100vw);

height: 320px;

margin-top: 14px;

}

.leftTitle {

width: 284px;

height: 44px;

line-height: 44px;

font-size: 14px;

color: #333333;

}

.inputView {

flex-direction: row;

display: flex;

height: auto;

align-items: center;

margin-left: 13px;

width: calc(100vw - 30px);

padding: 2px 0px;

font-size: 13px;

color: #666666;

}

.btnview {

display: flex;

justify-content: center;

align-items: center;

color: #ffffff;

width: 100%;

height: 50px;

margin-top: 20px;

}

</style>

```

前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡的更多相关文章

  1. php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)

    <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...

  2. 前端vue使用高德地图

    首先,注册Key 1.注册开发者账号,成为高德开放平台开发者 2.登陆之后,在进入「应用管理」 页面「创建新应用」 3.为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 ...

  3. 【第三方SDK】百度地图实现最简单的定位功能(无地图界面)

    在近期的项目中,须要实现无地图界面的定位功能,定位用户所在的城市.因此,本篇文章,主要介绍怎样使用百度地图SDK实现无导航界面的定位功能. 1.申请百度开发人员账户 2.创建应用,获取key 例如以下 ...

  4. Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...

  5. 如何利用【百度地图API】进行定位?非GPS定位

    原文:如何利用[百度地图API]进行定位?非GPS定位 如果你可以上网,如果你有火狐浏览器,那么恭喜你.你能很容易使用以下代码进行定位! ------------------------------- ...

  6. 百度地图API-搜索地址、定位、点击获取经纬度并标注

    百度地图api:http://developer.baidu.com/map/jsdemo.htm api申请ak:http://lbsyun.baidu.com/ 一.搜索地址.定位.点击获取经纬度 ...

  7. android的百度地图开发(二) 定位

    参考:http://blog.csdn.net/mr_wzc/article/details/51590485 第一步,初始化LocationClient类 //获取地图控件引用 mMapView = ...

  8. (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...

  9. 前端学习 -- Html&Css -- 相对定位 绝对定位 固定定位

    相对定位 - 定位指的就是将指定的元素摆放到页面的任意位置,通过定位可以任意的摆放元素. - 通过position属性来设置元素的定位. -可选值: static:默认值,元素没有开启定位: rela ...

  10. 地图之CLLocationManager的使用 定位功能使用

    1.iOS8曾经使用CLLocationManager 1.导入头文件 <CoreLocation/CoreLocation.h> 2.创建位置管理者 CLLocationManager ...

随机推荐

  1. Kubernetes(k8s)集群安装JupyterHub以及Lab

    背景 JupyterHub 为用户组带来了笔记本的强大功能.它使用户能够访问计算环境和资源,而不会给用户带来安装和维护任务的负担.用户--包括学生.研究人员和数据科学家--可以在他们自己的工作空间中完 ...

  2. ASP.NET Core如何知道一个请求执行了哪些中间件?

    第一步,添加Nuget包引用 需要添加两个Nuget包分别是:Microsoft.AspNetCore.MiddlewareAnalysis和Microsoft.Extensions.Diagnost ...

  3. Vue 环境准备

    近期接触了下前端项目,记录下学习过程. 近几年前端发展的迅猛,各种框架层出不穷,vue react angular ,各种第三方组件 原来会点js,jQuery 前后端一个人全搞定了,现在前后端分离, ...

  4. Docker入门实践笔记-Dockerfile

    镜像是一个打包文件,其中包含了应用程序及其运行所依赖的环境,例如文件系统.环境变量.配置参数等等 联合文件系统 容器镜像内部并不是一个平坦的结构,而是由许多的镜像层组成,每层都是只读不可修改修改的一组 ...

  5. STIL 格式pattern介绍

    相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...

  6. Linux期末佛脚指南

    Linux的期末佛脚复习 常用文件操作命令 touch (创建文件) cat (查看文件内容) head (查看文件开头) tail (查看文件结尾) cp (复制文件) mv (移动文件) ls ( ...

  7. pytest的几种执行方式

    1 pytest xxxx 2 python -m pytest xxxx python -m pytest --html=./report/rep2.html test_env_pytest_ini ...

  8. CUDA 的随机数算法 API

    参考自 Nvidia cuRand 官方 API 文档 一.具体使用场景 如下是是在 dropout 优化中手写的 uniform_random 的 Kernel: #include <cuda ...

  9. Linux(centos7.9)搭建ldap服务器

    一.LDAP是什么 后期更新,目前只搭建了服务器 二.linux搭建LDAP服务器 以下服务器信息为该文档安装Radius服务环境 服务器信息:CentOS7  内核版本:3.10.0-1160.el ...

  10. 2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。

    2023-03-15:屏幕录制并且显示视频,不要用命令.代码用go语言编写. 答案2023-03-15: 使用moonfdd/ffmpeg-go和moonfdd/sdl2-go库来实现屏幕录制并显示视 ...