目的:
--:展示游戏玩家彼此之间的距离,防止棋牌游戏中用户作弊
经过:
1:在微信公众号,配置对应的JS域名,IP地址白名单
2:在JS页面中,调用微信的JS-SDK,来使用微信的getLocation接口,实时获取玩家的 longitude,latitude经纬度。
3:在页面中使用高德地图的JS-API,将经纬坐标点转换为实时的地理位置。
http://lbs.amap.com/api/javascript-api/summary
代码如下:引入高德的JS-API:
使用其中的geocoder类,获得经纬度和地理位置之间的转换。
/**根据经纬度--逆向获取玩家地址详情**/
function getUserAddress(pointAry, backFun,thisObj,returnFun) {
// function regeocoder() {
//逆地理编码
var geocoder = new AMap.Geocoder({
radius: 1000,
extensions: "base"
});
geocoder.getAddress(pointAry, (status, result) => {
if (status === 'complete' && result.info === 'OK')
{
var address = result.regeocode.formattedAddress; //返回地址描述
if (backFun) {
backFun.apply(thisObj,[address,returnFun]);
}
} else {
alert("获得地址失败")
}
});
}
3.1:成功获取到加载的地理位置
4:通过2个经纬点,计算2个经纬度点之间的距离。---千米
https://www.cnblogs.com/softfair/p/distance_of_two_latitude_and_longitude_points.html
问题记录:
--:如图1,报错:Permission denied--》权限不足
原因:jsApiList里若没配置openLocation和getLocation的接口权限
--:如图2,获取数据超时:
原因:在使用getLocation接口的时候,用户没有开启:GPS---导致请求超时。
--:在微信权限注入成功之后,分享好友,朋友圈,调用微信先关接口失败,无法加载配置的分享信息,分享后仍然是非定制的信息。
原因之一:
检查公众平台的接口权限,发现分享接口未获得权限。
拓展:
GPS: Global Position System
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
--:新的问题、困难。意味新的收获和进步!证明自己能力的步骤
--:明白陌生代码的实际意义。才能通过它进行分析和推理,继续使用它,来解决遇到的问题,...拓展.
--:关于回调函数的使用,apply,call