首先要明確一點,微信位置接口獲取的坐標默認是wgs84類型,明確了坐標類型才好進行轉換
以下是微信公眾平台上獲取的信息:
從這個微信JS-SDK說明文檔就可以看到坐標類型,繼而去找百度提供的接口,看是否有直接可以用的,
在百度的坐標轉換API中有這么一說:
從以上截圖的部分可以看出,只要使用 http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;114.21892734521,29.575429778924&from=1&to=5&ak=你的密鑰
百度提供的這個接口就可以完全多種坐標到百度坐標的轉換,參數根據截圖中的說明(或者自己找百度api)配置即可,當然了,在api可以看到有使用次數限制,但一般來說是夠的,如果特殊情況下不夠的話就多申請幾個,輪流使用,順便附帶上具體使用代碼
1 wx.config({ 2 debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 3 appId: '${appId}', // 必填,企業號的唯一標識,此處填寫企業號corpid 4 timestamp: '${timeStamp}', // 必填,生成簽名的時間戳 5 nonceStr: '${nonceStr}', // 必填,生成簽名的隨機串 6 signature: '${signature}',// 必填,簽名,見附錄1 7 jsApiList: [ 8 'checkJsApi', 9 'getLocation' 10 ] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 11 }); 12 13 wx.checkJsApi({ 14 jsApiList: [ 15 'getLocation' 16 ] , 17 success : function (res) { 18 //alert(JSON.stringify("js check res:" + res)); 19 //alert(JSON.stringify(res.checkResult.getLocation)); 20 if (res.checkResult.getLocation == false) { 21 alert('你的微信版本太低,不支持微信JS接口,請升級到最新的微信版本!'); 22 return; 23 } 24 } 25 }); 26 27 wx.ready(function () { 28 wx.getLocation({ 29 success : function (res) { 30 //alert("getlocation res:" + res); 31 var latitude = res.latitude;// 緯度,浮點數,范圍為90 ~ -90 32 //lat = res.latitude; 33 34 var longitude = res.longitude;// 經度,浮點數,范圍為180 ~ -180。 35 var x = res.longitude; 36 var y = res.latitude; 37 console.log("location is lng=" + x + " lat=" + y); 38 //changCoordinate(x, y); 39 //alert("location1 is lng=" + lng + " lat=" + lat); 40 var url = "http://api.map.baidu.com/geoconv/v1/?coords=" + x + "," + y + "&from=1&to=5&ak=oLtCrdQBk9xf7Tb543NBGXPGnBQIkXRe"; 41 $.get(url, function(data) { 42 if(data.status === 0) { 43 lng = data.result[0].x; 44 lat = data.result[0].y; 45 console.log("location is lng=" + lng + " lat=" + lat); 46 //alert("location2 is lng=" + lng + " lat=" + lat); 47 } 48 }, 'jsonp'); 49 50 var speed = res.speed;// 速度,以米/每秒計 51 var accuracy = res.accuracy;// 位置精度 52 }, 53 cancel : function (res) { 54 alert('用戶拒絕授權獲取地理位置'); 55 } 56 }); 57 });
上述js主要是在springBoot框架下開發微信公眾號的頁面中使用,說明一點:如果需要在頁面一打開的時候就獲取地理位置,則將接口調用寫到wx.ready中(如圖中所示),而如果是要在點擊事件再來調用,則自己改咯
另外說一下js通過參數計算的方式來轉換坐標
首先高德地圖轉百度地圖的js參數計算方式在之前的一篇文章中
其次,wgs84坐標轉百度坐標,在網上找了一些計算方式,未經過驗證,僅記錄,后續有空了再來驗證
方法一:
var ggPoint=[];
//循環獲取轉換前的坐標
for (var j = 0; j < result.length; j++) {
var poi = new BMap.Point(result[j].Longitude, result[j].Latitude);//獲取轉換前的坐標
ggPoint.push(poi);//循環寫入經緯度到ggPoint這個數組
}
var bdpoi = GpsToBaiduPoints(ggPoint);//GpsToBaiduPoints調用的一個js
//循環寫入轉換后的坐標
for (var j = 0; j < bdpoi.length; j++) {
var poi = bdpoi[j];// new BMap.Point(bdpoi[j].Longitude, bdpoi[j].Latitude);
var myIcons = new BMap.Icon("/images/zdlcsgreen.png", new BMap.Size(12, 12));//這個在地圖上顯示的圖片可以自己設置
var marker = new BMap.Marker(poi, { icon: myIcons });
var label = new BMap.Label(“轉換后”, { offset: new BMap.Size(20, -10) });
map.addOverlay(marker);
marker.setLabel(label);
}
方法二(看着有點詭異,IE6是什么鬼):