|   经过一段时间的准备,OpenLayers中文官方站终于和大家见面了。 本站本着分享学习的原则, 为初学者提供交流学习的平台。 同时也希望高手们不吝惜自己的智慧,与大家共同分享自己的经验和代码等 好吧 开始正题。     数据对于GIS来说,是至关重要的,所以首页我们要解决数据的问题 google地图一直在中国不是很稳定,所以要充分利用本土资源了。 加载地图是在不修改源码为原则, 一共分为QQ地图,世纪高通地图,阿里云地图,51地图,搜狗地图,百度地图   下面是第一个  加载QQ地图 大家都知道 QQ地图是属于高德系地图,和google有着同样的偏移量,所以是可以完全重合的,Web墨卡托投影   1. 我们在lib\OpenLayers\Layer目录下面新建一共QQMap.js 我们的目的是取得瓦片数据的url,所以只要找到QQ地图的瓦片url就可以了 新建一共OpenLayers.Layer.QQMap类继承自OpenLayers.Layer.TileCache  ,重新定义getURL方法   具体代码如下
 
[代码]js代码:
| 04 | OpenLayers.Layer.QQMap = OpenLayers.Class(OpenLayers.Layer.TileCache, { |  
| 06 |     initialize: function(name, url, options) { |  
| 07 |         vartempoptions = OpenLayers.Util.extend({ |  
| 08 |             'format': 'image/png', |  
| 11 |         OpenLayers.Layer.TileCache.prototype.initialize.apply(this, [name, url, {}, |  
| 13 |         this.extension = this.format.split('/')[1].toLowerCase(); |  
| 14 |         this.extension = (this.extension == 'jpg') ? 'jpeg': this.extension; |  
| 15 |         this.transitionEffect = "resize"; |  
| 21 |     getURL: function(bounds) { |  
| 22 |         varres = this.map.getResolution(); |  
| 23 |         varbbox = this.map.getMaxExtent(); |  
| 24 |         varsize = this.tileSize; |  
| 25 |         vartileZ = this.map.zoom; |  
| 27 |         vartileX = Math.round((bounds.left - bbox.left) / (res * size.w)); |  
| 29 |         vartileY = Math.round((bbox.top - bounds.top) / (res * size.h)); |  
| 30 |         varscope =newArray(0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 7, 0, 7, 0, 15, 0, 15, 0, 31, 0, 31, 0, 63, 4, 59, 0, 127, 12, 115, 0, 225, 28, 227, 356, 455, 150, 259, 720, 899, 320, 469, 1440, 1799, 650, 929, 2880, 3589, 1200, 2069, 5760, 7179, 2550, 3709, 11520, 14349, 5100, 7999, 23060, 28689, 10710, 15429, 46120, 57369, 20290, 29849, 89990, 124729, 41430, 60689, 184228, 229827, 84169, 128886); |  
| 36 |          varimgformat=this.sateTiles ? ".jpg": ".png" |  
| 37 |           if(tileX >= i && tileX <= j && tileY >= l && tileY <= scope) { |  
| 38 |                     tileY = Math.pow(2, tileZ) - 1 - tileY; |  
| 39 |                     vartileNo =  tileZ + "/"+ Math.floor(tileX / 16) + "/"+  Math.floor(tileY / 16)+ "/"+ tileX + "_"+ tileY + imgformat; |  
| 43 |         if(OpenLayers.Util.isArray(Surl)) |  
| 44 |             Surl = this.selectUrl(tileNo, Surl); |  
| 48 |     clone: function(obj) { |  
| 50 |             obj = newOpenLayers.Layer.QQMap(this.name, this.url, this.options); |  
| 52 |         obj = OpenLayers.Layer.TileCache.prototype.clone.apply(this, [obj]); |  
| 55 |     CLASS_NAME: "OpenLayers.Layer.QQMap" |  2.  在lib文件夹下的OpenLayers.js 中加载js文件的函数中添加"OpenLayers/Layer/QQMap.js"      注意最后一个是没有“,”的   3.  在地图中加载QQ图层
 
[代码]js代码:
| 1 | varqq=newOpenLayers.Layer.QQMap("QQ地图", |  
| 2 | [http://p0.map.soso.com/maptilesv2/, |  
| 3 | http://p1.map.soso.com/maptilesv2/, |  
| 4 | http://p2.map.soso.com/maptilesv2/,  |  
| 5 | "http://p3.map.soso.com/maptilesv2/"], | {sateTiles: false}  就是判断是否加载的卫星图 
[代码]js代码:
| 01 | varqqsatellite=newOpenLayers.Layer.QQMap("QQ卫星图", |  
| 02 |     [http://p0.map.soso.com/sateTiles/, |  
| 03 |     http://p1.map.soso.com/sateTiles/, |  
| 04 |     http://p2.map.soso.com/sateTiles/, |  
| 05 |     "http://p3.map.soso.com/sateTiles/"], |  
| 08 | varqqsatellitetran=newOpenLayers.Layer.QQMap("QQ卫星图标注", |  
| 09 | [http://p0.map.soso.com/sateTranTiles/,  |  
| 10 | http://p1.map.soso.com/sateTranTiles/,  |  
| 11 | http://p2.map.soso.com/sateTranTiles/,  |  
| 12 | "http://p3.map.soso.com/sateTranTiles/"], |  
 本程序仅是测试所用,如想商用请联系相关单位。本站不对版权负责。。。                 |