从目前国内的地图服务商提供的地图来看,地图瓦片切图规则只少分为三种。其中Google Map、Bing地图、MapABC、QQ地图是一类,而百度地图、搜狗地图是使用的另一类,他们是在GCJ02 基础上又进行了自己的偏移 ,还有一类应该是mapbar的地图(还没有仔细去分析它的瓦片编号规则)。

经过分析 搜狗地图瓦片编号是以0,0开始编号,向东X正增加,向西X负增加,向北Y增加,向南Y负增加,而谷歌地图是从左上角开始编号,向东X增加,向南Y增加,这种计算很方便。
知道了这种对应规则后,我们就可以得到计算的方式,代码如下:

其实还是重写getURL
1. 我们在lib\OpenLayers\Layer目录下面新建一共SoGou.js
我们的目的是取得瓦片数据的url,所以只要找到搜狗地图的瓦片url就可以了
新建一共OpenLayers.Layer.SoGou类继承自OpenLayers.Layer.TileCache  ,重新定义getURL方法

/**
* 对自定义规则切割的图片进行拼装的类
*/
OpenLayers.Layer.SoGou = OpenLayers.Class(OpenLayers.Layer.TileCache, {initialize: function (name, url, options) {var tempoptions = OpenLayers.Util.extend({'format': 'image/png',isBaseLayer: true}, options);OpenLayers.Layer.TileCache.prototype.initialize.apply(this, [name, url, {},tempoptions]);this.extension = this.format.split('/')[1].toLowerCase();this.extension = (this.extension == 'jpg') ? 'jpeg' : this.extension;this.transitionEffect = "resize";this.buffer = 0;},/*** 按地图引擎切图规则实现的拼接方式*/getURL: function (bounds) {var tilez=this.map.zoom-1;var offsetX = Math.pow(2,tilez); var offsetY = offsetX - 1; var res = this.map.getResolution();var bbox = this.map.getMaxExtent();var size = this.tileSize;var bx = Math.round((bounds.left - bbox.left) / (res * size.w));var by = Math.round((bbox.top - bounds.top) / (res * size.h));var numX = bx - offsetX; var numY = (-by) + offsetY; tilez = tilez + 1; var zoomLevel = 729 - tilez;if (zoomLevel == 710) zoomLevel = 792;var blo = Math.floor(numX / 200); var bla = Math.floor(numY / 200); var blos,blas; if (blo < 0)  blos = "M" + ( - blo); else blos = "" + blo; if (bla < 0)  blas = "M" + ( - bla); else blas = "" + bla; var x = numX.toString().replace("-","M");  var y = numY.toString().replace("-","M"); var urlsNum = parseInt((bx + by) % this.url.length); var strURL = ""; strURL = this.url[urlsNum] + zoomLevel + "/" + blos + "/" + blas + "/" + x + "_" + y + ".GIF";return strURL;},clone: function (obj) {if (obj == null) {obj = new OpenLayers.Layer.SoGou(this.name, this.url, this.options);}obj = OpenLayers.Layer.TileCache.prototype.clone.apply(this, [obj]);return obj;},CLASS_NAME: "OpenLayers.Layer.SoGou"
});

请求的切片地址

var soGou=new OpenLayers.Layer.SoGou("SoGou地图",
                                [ "http://p0.go2map.com/seamless1/0/174/",  "http://p1.go2map.com/seamless1/0/174/",    "http://p2.go2map.com/seamless1/0/174/", "http://p3.go2map.com/seamless1/0/174/"],
                layerOptions
                                );

更多精彩内容 访问OpenLayers中文官方站

(http://www.openlayers.cn)

转载于:https://www.cnblogs.com/gisvip/archive/2012/11/05/2755849.html

OpenLayers加载搜狗地图相关推荐

  1. OpenLayers加载QQ地图(转)

    OpenLayers加载QQ地图 http://www.openlayers.cn/portal.php?mod=view&aid=4 2012-10-21 17:22| 发布者: admin ...

  2. vue openlayers 加载高德地图等 gcj02 的图层偏移问题

    vue openlayers 加载高德地图等 gcj02 的图层偏移问题 这个问题是在使用 openlayers 地图引擎加载高德地图或者是谷歌地图都会遇到的问题,所以说呢这篇博文稍微说一下解决办法. ...

  3. openlayers加载离线地图并实现深色地图

    问题背景       我们自己一直使用的openlayer+geoserver自己发布的地图,使用的是矢量地图.但是由于政府地图大都使用为天地图,所以需要将geoserver的矢量地图更改为天地图,并 ...

  4. 在 ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图。

    在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图. Adding sogou map or google map in ArcGIS Engine application WebmapL ...

  5. openlayers加载bing地图

    openlayers加载bing地图 注:需要bingmap网站提供的许可key,注册微软账号就有了,https://www.bingmapsportal.com/Application# 查看文章

  6. 在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图

    在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图. Adding sogou map or google map in ArcGIS Engine application WebmapL ...

  7. openlayers加载百度地图作为底图坐标偏移的解决办法

    openlayers加载天地图作为底图,在网上找了公开的服务资源,要做到百度地图与天地图之间切换,同样也从网上找到百度地图的服务资源但是在地图上坐标总是有偏差,最初的代码是这样的: var proje ...

  8. 005:vue+openlayers加载Mapbox地图示例

    第005个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载Mapbox地图. 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 示例效果 ...

  9. Openlayers加载离线地图Arcgis瓦片

    文章目录 一.介绍 二.快速入门 一.下载地图瓦片 二.OpenLayers加载离线Arcgis瓦片 一.介绍 OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类 ...

最新文章

  1. Paint滤镜效果实现
  2. Java设计模式之结构型:代理模式
  3. 蓝桥练习-算法训练 Collecting Luggage
  4. JMS学习(4):--Spring和ActiveMQ整合的完整实例
  5. android 串口调试工具_树莓派通用串口通信实验
  6. Blazor University (7)组件 — 双向绑定
  7. 不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式
  8. python数据分析师书籍_如何自学成为数据分析师
  9. 是谁在我的心里打了个结(二十一)托付
  10. Linux下执行程序出现 Text file busy 提示时的处理方式
  11. jieba 使用笔记
  12. eoj 3279 爱狗狗的两个dalao(dfs)
  13. 2022杭电多校4 G - Climb Stairs
  14. 衬线字体和无衬线字体
  15. DL实现semantic segmentation
  16. VR演示室设备使用说明
  17. CAD框选对象的两种方式、AUTOCAD——删除重复线段
  18. 看了《流浪地球2》海报,我想教你用PPT说浪漫情话!
  19. 计算机相关专业大学上海,上海哪几个大学计算机专业的系比较好
  20. 2022年门座式起重机司机考试模拟100题及模拟考试

热门文章

  1. 渲染到ui_虚幻4渲染编程(UI篇)【第二卷:程序化UI特效-[1]】
  2. au vst插件_失真效果音频插件
  3. python编程人脸识别工具_几行代码带你实现人脸识别。Python 就是这么简单
  4. MyBatis ofType和javaType区别
  5. 019_with语句
  6. linux日志汇总,Linux日志分析常用命令汇总(示例代码)
  7. java runtime environment 官网_Java Runtime Environment SE Development Kit
  8. Kotlin极简教程:第5章 集合类
  9. 第一章 GuassDB数据库介绍
  10. web项目html页面过多,详解webpack4多入口、多页面项目构建案例