一、GPS坐标转换百度坐标
直接通过百度接口获得他的百度坐标
BMap.Convertor.translate(gpsPoint,0,translateCallback);
二、百度坐标转换GPS坐标
这是一个比较难的坐标转换,因为百度经过了加密,并没有公开转换的方法,这里提供一种替代的方法:
百度坐标和GPS坐标转换在很近的距离时偏差非常接近。
假设你有百度坐标:x1=118.512741,y1=31.672570
把这个坐标当成GPS坐标,通过接口获得他的百度坐标:x2=118.52445071937,y2=31.676354334473
通过计算就可以得到GPS的坐标:
x = 2*x1-x2,y = 2*y1-y2
x=118.50103128063002
y=31.668785665527
html代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
#l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}
#r-result{height:100%;width:20%;float:left;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=9fb983ecd9b505f8fedcc9ab07c65e3e"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<title>GPS转百度</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
//GPS坐标
var xx = 118.512741;
var yy = 31.672570;
var gpsPoint = new BMap.Point(xx,yy);
//地图初始化
var bm = new BMap.Map("allmap");
bm.centerAndZoom(gpsPoint, 15);
bm.addControl(new BMap.NavigationControl());
//添加谷歌marker和label
var markergps = new BMap.Marker(gpsPoint);
bm.addOverlay(markergps); //添加GPS标注
var labelgps = new BMap.Label("我是GPS标注哦",{offset:new BMap.Size(20,-10)});
markergps.setLabel(labelgps); //添加GPS标注
//坐标转换完之后的回调函数
translateCallback = function (point){
var marker = new BMap.Marker(point);
bm.addOverlay(marker);
var label = new BMap.Label("我是百度标注哦",{offset:new BMap.Size(20,-10)});
marker.setLabel(label); //添加百度label
bm.setCenter(point);
alert("转化为百度坐标为:"+point.lng + "," + point.lat);
var x = 2*xx-point.lng;
var y = 2*yy-point.lat;
alert("百度坐标转化GPS为:"+x + "," + y+"此时GPS标注(xx,yy)当做百度坐标");
}
setTimeout(function(){
BMap.Convertor.translate(gpsPoint,0,translateCallback); //真实经纬度转成百度坐标
}, 2000);
</script>