之前有接触过一个项目,大致要求是有一系列GPS坐标(有时间顺序),要求在百度地图上标记出这些点,画出轨迹图。
首先有一点要明确,百度地图上的GPS坐标(百度坐标)是对原始GPS坐标经过一些计算后得到的,所以我们如果想要在百度地图上正确描绘我们所需要的点,我们必须先将手上的GPS坐标转换成百度地图的坐标,再通过new BMap.Point(lng,lat)去添加标记点。转换成百度坐标需要用到BMap.Convertor.translate(gpsPoint,0,translateCallback)函数,需要引用<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>。
由于坐标转换translate函数执行是一个异步的过程,我们无法控制它的执行顺序,所以在对一系列坐标同时进行处理时,无法按照我们想要的顺序在回调函数中对数据进行处理,这里必须对translate函数做一些改进,其实一个标志位就足够了。下面贴出改进后的convertor.js代码。
(function(){ //闭包
function load_script(xyUrl, callback){
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = xyUrl;
//借鉴了jQuery的script跨域方法
script.onload = script.onreadystatechange = function(){
if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){
callback && callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if ( head && script.parentNode ) {
head.removeChild( script );
}
}
};
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
head.insertBefore( script, head.firstChild );
}
function translate(point,type,callback,X){
var callbackName = 'cbk_' + Math.round(M