你在小程序中怎么计算两个经纬度的距离?
时间:2022-07-25
本文章向大家介绍你在小程序中怎么计算两个经纬度的距离?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
你还在为小程序中地址逆向解析发愁吗?
你还在为小程序中路线规划,地点搜索发愁吗?
好消息!好消息!
腾讯地图官方开始对小程序中位置应用提供支持了!!!(得有一段时间了,最近才发现)
赞呀,再也不用写有关位置的接口让小程序调用了!
目录
1. 没有官方支持时的调用
2. 有了官方支持时的调用
1
没有官方支持时的调用
在没有官方支持时,小程序中的位置获取,可以采用腾讯地图,高德地图,百度地图都可以,但是你需要先通过小程序的wx.getLocation 获取当前的经纬度,然后再借助第三方地图提供的webservice API ,自己在后端实现一个根据经纬度获取当前位置的接口,然后供小程序调用。
图1 腾讯地图的webservice api 接口
要想获得两个经纬度点时,你可以手动自己写一个获取经纬度距离的函数,代码如下:
// 方法定义 lat,lng
function GetDistance( lat1, lng1, lat2, lng2){
var radLat1 = lat1*Math.PI / 180.0;
var radLat2 = lat2*Math.PI / 180.0;
var a = radLat1 - radLat2;
var b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
var 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 *6378.137 ;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
// 调用 return的距离单位为km
console.log(GetDistance(22.54605355,114.02597366,22.620315,114.144802));
也可自己调用第三方地图的webservice API 实现自己的服务接口,如图2 腾讯地图webservice API 计算两个经纬度的距离。
如图2 腾讯地图webservice API 计算两个经纬度的距离
2
有了官方支持时的调用
最近需要做小程序的地址解析和计算距离,查看
腾讯地图开放平台时,发现平台已经支持小程序中的使用了,如图3。
图 3 腾讯位置服务支持在小程序中使用
而且调用非常简单:只需要引入他的一个JS 文件,就可以使用了,如图4腾讯位置在小程序中的应用。
图4 腾讯位置服务在小程序中的应用
具体调用实例如下:
var QQMapWX = require('../../mapsdk/qqmap-wx-jssdk.js');
var qqmapsdk;
const app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
lat_dest:'目标纬度',
lng_dest:'目标经度',
location_info:{},
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
qqmapsdk = new QQMapWX({
key: '自己申请一个腾讯位置服务的key'
});
},
bindLocationInput:function(e){
var that = this;
// 逆向解析
qqmapsdk.reverseGeocoder({
location: '', //获取表单传入的位置坐标,不填默认当前位置,示例为string格式
//get_poi: 1, //是否返回周边POI列表:1.返回;0不返回(默认),非必须参数
success: function(res) {//成功后的回调
if(res.status==0){
let locationInfo = {}
locationInfo.province = res.result.address_component.province;
locationInfo.city = res.result.address_component.city;
locationInfo.district = res.result.address_component.district;
locationInfo.location_name = locationInfo.province+locationInfo.city+locationInfo.district+res.result.formatted_addresses.recommend;
console.log(locationInfo.lat_dest+','+locationInfo.lng_dest);
that.setData({location_info:locationInfo});
// 计算位置
qqmapsdk.calculateDistance({
from: '', //若起点有数据则采用起点坐标,若为空默认当前地址
to: that.data.lat_dest+','+that.data.lng_dest, //终点坐标
success: function(res) {//成功后的回调
var distance = res.result.elements[0].distance;
console.log('distance==',distance);
},
fail: function(error) {
console.error(error);
},
complete: function(res) {
console.log(res);
}
});
that.setData({report_info:locationInfo});
}else{
return app.Tips({title:'请重试!'});
}
},
fail: function (res) {
return app.Tips({title:'请重试!'});
},
complete: function (res) {
// console.log(res);
}
});
},
})
3
总结
具体使用中,建议多看文档。
END
- 虾说区块链-55-《精通比特币》笔记十
- SignalR QuickStart
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- Captcha插件后门分析和修复
- log4net.SignalR - 日志即时发送客户端页面
- 科学家担心的智能爆炸,真会有这一天吗?
- RSA 2018:从大会议题看2018年网络安全趋势
- Silverlight:Mouse Avoiding 躲避鼠标效果
- CTreeCtrl 控件使用总结
- 在ASP.NET MVC 4中使用Kendo UI Grid
- 每周四更面试题:True+True=?
- iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- NET中验证控件表达式汇总
- 动态执行超过4000个字符的SQL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CVE-2020-1313漏洞分析与利用PoC
- Linux用户登录日志查询 # 1 utmp、wtmp、btmp文件
- 浏览器同域名请求的最大并发数限制
- HTTP Strict Transport Security实战详解
- 深夜学算法之SkipList:让链表飞
- 自研安全工具之网页全链接爬取
- 实战远程文件同步(Remote File Sync)
- nginx cache的玩法
- PHP共享内存详解 前言
- 为了--force-pivoting参数,我问候了sqlmap开发者
- flexible array柔性数组、不定长的数据结构Struct详解
- 如何优雅打印nginx header和body
- Go的CSP并发模型实现:M, P, G
- Golang依赖管理工具:glide从入门到精通使用
- Redis的Multi的内幕真相