前端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. AcWing 1353. 滑雪场设计

    原题链接 思路 本题如果以贪心的思路来理解,则会遇到如果根据贪心算法变更后的最高峰和最低峰会发生改变,产生后效性,导致贪心算法无效,再考虑到本题目数据量不大,山峰数量在1k以内,山峰高度在100之内, ...

  2. blender资源库 【自用】

    1 https://www.threedscans.com A Website with a lot of photo-scanned sculptures which are free to use ...

  3. ARM 详解

    一.ARM 的发展史 ARM 的发展历史可以追溯到 1978 年,当年克里斯·库里(Chris Currry)所任职的公司遭遇财务危机,发展每况愈下,库里在和创始人深入沟通后,决定离职.当时的库里对微 ...

  4. 二进制安装Kubernetes(k8s) v1.22.10 IPv4/IPv6双栈

    二进制安装Kubernetes(k8s) v1.22.10 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可能第一时间更 ...

  5. 简单的cs修改器

    目录 各个函数解析 main() GetPid() 无限子弹 无限血 无限金币 Patch() 无僵直 稳定射击 Depatch1 手枪连发 Depatch 源代码部分 各个函数解析 这是我根据b站上 ...

  6. LeeCode 二叉树问题(二)

    二叉树的构建 LeeCode 106: 从中序遍历与后续遍历序列构造二叉树 题目描述 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, posto ...

  7. python从shp文件中读取经纬度数据

    python从shp文件中读取经纬度数据 没有接触过GIS的人来说shp文件很陌生而且很难打开查看,好在python可以从中提取出自己想要的数据 pyshp库的安装 python的pyshp库可以实现 ...

  8. X配置文件xorg.conf分析

    X配置文件xorg.conf分析 转载于:http://blog.csdn.NET/comcat/archive/2007/04/02/1549658.aspx 作者:壮志凌云的csdn博客 X的配置 ...

  9. js 获取窗口/容器内部滚动位置

    前端 (document.getElementsByClassName("container")[0]).scrollTop -- 容器内部滚动条位置 (document.getE ...

  10. 深度学习-07(图像分类、常用数据集、利用CNN实现图像分类、图像分类优化)

    文章目录 深度学习-07(PaddlePaddle图像分类) 图像分类概述 概述 什么是图像分类 图像分类粒度 图像分类发展历程 图像分类问题的挑战 常用数据集介绍 MNIST数据集 CIFAR10数 ...