最近在做openlayers添加百度地图的扩展类,经过轮番的尝试,终于将其接入了,但是发现偏差比较大,有根据百度的坐标进行了比对,将切片原点进行了调整,发现OK了。打开百度地图,可以看出切片的路径如:http://online1.map.bdimg.com/tile/?qt=tile&x=742&y=248&z=12&styles=pl&udt=20141113,在发现百度地图的切片规则也是和google一样,采用TMS进行切片的,因此剩下的工作就是去查找切片和行列层级号的命名规则。代码如下:
getURL: function (bounds) { var tilez=this.map.zoom-1; var res = this.map.getResolution(); var bbox = this.map.getMaxExtent(); var size = this.tileSize; var bx = Math.round((bounds.left - this.tileOrigin.lon) / (res * size.w)); var by = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * size.h)); tilez = tilez + 1; var x = bx.toString().replace("-","M"); var y = by.toString().replace("-","M"); var urlsNum = parseInt((bx + by) % this.url.length); var strURL = ""; strURL = this.url[urlsNum] + '?qt=tile&x='+x+'&y='+y+'&z='+tilez+'&styles=pl&udt=20140807'; return strURL; }
在代码中:主要是this.tileOrigin这个参数影响切片的位置,这个就是切片原点,若将其设置为[0,0],发现和百度坐标偏差较远,经过查看,得知将其设置为:[43.88955327932,12.590178885765]这样就可以和百度地图完全对应上了。对接百度地图就OK了。