1,打卡簽到 —— 500米範圍限制 a,getLocation 獲取gcj02 == 騰訊系坐標,可以直接用來打開騰訊地圖 (獲取wgs84則需轉換) b,百度坐標轉騰訊坐標,引入鏈接配置 <script charset="utf-8" src="http://map.qq.com/api/js? ...
1,打卡簽到 —— 500米範圍限制
a,getLocation 獲取gcj02 == 騰訊系坐標,可以直接用來打開騰訊地圖 (獲取wgs84則需轉換)
b,百度坐標轉騰訊坐標,引入鏈接配置
<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp&libraries=convertor"></script><!-- 百度坐標轉化為騰訊系坐標 -->
qq.maps.convertor.translate(new qq.maps.LatLng(vm.list.activityPlacePoilat,vm.list.activityPlacePoilng), 3, function(res){
var latlng = res[0];
var latitudeFromPC = latlng.lat;
var longitudeFromPC = latlng.lng;
})
具體參數內容,詳情:https://lbs.qq.com/javascript_v2/doc/convertor.html ;
c,轉換原理的理解
WGS-84:是國際標準,GPS坐標(Google Earth使用、或者GPS模塊)(GPS全球衛星定位系統使用的坐標系)
GCJ-02:中國坐標偏移標準,Google Map、高德、騰訊使用(由WGS84坐標系經加密後的坐標系)
BD-09:百度坐標偏移標準,Baidu Map使用(在GCJ02坐標系基礎上再次加密。其中bd09ll表示百度經緯度坐標,bd09mc表示百度墨卡托米制坐標)
d,500米經緯度差 大約 500÷1000÷40000×360=0.0045度 復驗百度坐標地圖觀察
2、騰訊地圖api——逆解析
a) 獲取guj02坐標系 b) 申請key,請求轉換 如下:
var data={
location : locationGCJ02.latitude + ',' + locationGCJ02.longitude,
/*換成自己申請的key*/
key:"6EBBZ-S5SW6-FZ5SV-MBBXH-5TZPE-X4BN7",
get_poi:0
};
var url="https://apis.map.qq.com/ws/geocoder/v1/?";
data.output="jsonp";
$.ajax({
type:"get",
dataType:'jsonp',
data:data,
jsonp:"callback",
jsonpCallback:"QQmap",
url:url,
success:function(res){
if(res.status==0){
var toStr = JSON.stringify(res);
alert(toStr);
}
},
error : function(err){alert("服務端錯誤,請刷新瀏覽器後重試")}
});
參考:https://www.cnblogs.com/benefitworld/p/5328420.html
https://lbs.qq.com/webservice_v1/guide-gcoder.html
3,騰訊地圖api——計算兩個坐標系,非直線距離
distanceMap:function(){
var that=this ,
data={
from : that.urgDate.locationForm.lat+','+that.urgDate.locationForm.lng ,
to : getLocationStr.locationGCJ02.latitude + ',' + getLocationStr.locationGCJ02.longitude,
key: window.common.mapKey.qqMapKey ,
} ,
url="https://apis.map.qq.com/ws/distance/v1/?";
data.output="jsonp";
$.ajax({
url:url,
type:"get",
dataType:'jsonp',
data:data,
jsonp:"callback",
jsonpCallback:"QQmap",
success:function(res){
if(res.status==0){
try{
var toStr = JSON.stringify(res);
//alert(toStr);
that.urgDate.myDistance = res.result.elements[0].distance;
}catch(e){
console.log("坐標系距離計算錯誤");
}
}
},
error : function(err){console.log("坐標系距離計算網路鏈接失敗");}
});
},
參考:https://lbs.qq.com/webservice_v1/guide-distance.html
4,坐標間直線距離,計算公式:
distanceMap:function(lat1, lng1, lat2, lng2){
function toRad(d) { return d * Math.PI / 180; }
var dis = 0;
var radLat1 = toRad(lat1);
var radLat2 = toRad(lat2);
var deltaLat = radLat1 - radLat2;
var deltaLng = toRad(lng1) - toRad(lng2);
var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
return dis * 6378137;
}