项目中需要用到经纬度(北纬N40°55′42.81″ 东经E106°25′50.30″形式)。目前只有百度坐标,所以需要将百度坐标转换为GPS坐标,再计算得出经纬度。
百度API并没有提供转GPS坐标的接口。因此,找到网站GPSspg API。完成API订阅,获得oid和key。(每天2000次免费),备份
这里在页面中使用js跨域请求返回jsonp格式数据。
一般写法:
$.getJSON("http://api.gpsspg.com/convert/latlng/?jsoncallback=?", //这里注意下,jsoncallback可以替换任意字符(除其他参数名外,如oid、callback等) { oid: "", //到GPSspg注册获得 key: "", //到GPSspg注册获得 from: "2", to: "0", latlng: "31.0026777169,108.7051969740", output:"jsonp", callback:"jsoncallback" //必须配置,且值为回调函数的名字② } );回调函数
//请求gpsspg网站的回调函数 function jsoncallback(data) { //回调函数② console.log(data); //打印出来的data值,如下 //jsoncallback&&jsoncallback({"status":"200","result":[{"lat":30.99881860,"lng":108.69433701}],"match":[1]}) //返回值中的字符串“jsoncallback&&jsoncallback”是回调函数的名字 }
完整代码:
<!DOCTYPE html> <html> <head> <style>img{ height: 100px; float: left; }</style> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div id="images"> </div> <script> /* 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4,向下取整 js: Math.floor(7/2) */ /* 取绝对值 js:Math.abs(-20); */ /*参数lat_lng 可以传递 lat或者lng中的一个*/ function baiduToGPS(lat_lng){ var abs_lat_lng = Math.abs(lat_lng); //a_ 意为all,含有整数和小数部分。 //o_ 意为only,只有小数部分 var du = parseInt(abs_lat_lng); //度(不含小数部分) var o_du = lat_lng - du; //度(只有小数部分) var a_fen = o_du * 60; //分(含有整数和小数部分) var fen = parseInt(a_fen); //分(不含小数部分) var o_fen = a_fen - fen; //分(只有小数部分) var a_miao = o_fen * 60; //秒(含有整数和小数部分) var miao = a_miao.toFixed(2); //秒(取两位小数) var value = du + '°' + fen + '′' + miao + '″'; console.log(value); return value; } //请求gpsspg网站的回调函数 function jsoncallback(data) { console.log('转换状态:'+data.status); //jsoncallback&&jsoncallback({"status":"200","result":[{"lat":30.99881860,"lng":108.69433701}],"match":[1]}) console.log('GPS坐标:'+data.result[0].lat+','+data.result[0].lng); var lat = data.result[0].lat; var lng = data.result[0].lng; var lat_value = baiduToGPS(lat); var lng_value = baiduToGPS(lng); var gps = ''; if(lat >= 0){ gps = gps + '北纬N'+lat_value; }else{ gps = gps + '南纬S'+lat_value; } gps = gps + ','; if(lng >= 0){ gps = gps + '东经E'+lng_value; }else{ gps = gps + '西经W'+lng_value; } console.log(gps); } //第一种方式 getJSON形式 $.getJSON("http://api.gpsspg.com/convert/latlng/?jsoncallback=?", { oid: "", key: "", from: "2", to: "0", latlng: "31.0026777169,108.7051969740", output:"jsonp", callback:"jsoncallback" } ); //第二种方式 ajax形式 /* $.ajax({ async:false, url: 'http://api.gpsspg.com/convert/latlng/', type: "GET", dataType: 'jsonp', //必须有的配置 jsonp:"jsonpcallback", //必须有的配置 data: { oid: "", key: "", from: "2", to: "0", latlng: "31.0026777169,108.7051969740", output:"jsonp", //callback:"jsoncallback" //指定函数名或匿名函数都可以 callback:function(data) { console.log(data); } }, timeout: 5000 }); */ </script> </body> </html>