OpenLayers加载搜狗地图

news/2024/10/18 5:56:25/

从目前国内的地图服务商提供的地图来看,地图瓦片切图规则只少分为三种。其中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


http://www.ppmy.cn/news/543054.html

相关文章

搜狗地图2016-Android-社招笔试题(包含Java基础部分)

下面是搜狗地图的社招笔试题&#xff0c;由于条件有限&#xff0c;全是手机拍的&#xff0c;请将就着看。另请忽略上面的答案&#xff0c;不一定准确。 大伙可在下方讨论答案&#xff0c;上方答案仅供参考&#xff0c;不一定准确。

搜狗地图谋求转型,瞄准即将爆发的车联网

在美国著名赌城拉斯维加斯举办的CES2016(全球消费电子展览)已经落幕。本届展览会上&#xff0c;智能电动汽车和无人飞机等取代往年的智能手机、电视成为绝对的热门。尤其是智能汽车方面&#xff0c;全球10大汽车厂商有7家在本届CES展上亮相&#xff0c;此外还有一些车机厂商或车…

android 搜狗地图包名,搜狗导航(com.sogou.map.android.sogounav) - 4.2.5 - 应用 - 酷安

权限信息 读取电池使用统计信息 完全的网络访问权限 大致位置(基于网络) 精确位置(基于GPS和网络) 查看网络连接 修改或删除您的USB存储设备中的内容 读取您的USB存储设备中的内容 读取手机状态和身份 控制振动 连接WLAN网络和断开连接 查看WLAN连接 android.permi…

GIS(五)——完成js版搜狗地图基本交互搜索功能

最近在做的有关于北京海淀智慧旅游的一个项目&#xff0c;既然是旅游项目&#xff0c;那么涉及到地图的操作也就是必然的事情了。前几篇文章&#xff0c;主要是分享了在地图上标记多个景点及其景点信息的技术。其实跟项目中还是有一些不一样的。项目中要求实时显示景点的信息&a…

GIS(四)——为js版搜狗地图添加边界+Marker和Brand的最终美化版

2019独角兽企业重金招聘Python工程师标准>>> 在《GIS&#xff08;三&#xff09;——优化js版搜狗地图的brand标牌样式》中&#xff0c;分享了一下Brand样式的修改。现在把这几次Marker和Brand的修改统一再美化一下&#xff0c;算作一个终极优化版吧。 这次优化的主…

PHP计算GPS路书,搜狗地图推出路书功能 免费而智能的GPS

首先在浏览器中打开搜狗地图(map.sogou.com)&#xff0c;然后点击右上角的"地图路书"&#xff0c;进入搜狗路书界面&#xff1a; 下图显示了搜狗路书的主界面(http&#xff1a;//map.sogou.com/lushu)&#xff0c;在右侧登录窗口中我们用自己的搜狐通行证帐号登录搜狗…

Android开发之百度地图(soso地图,搜狗地图,阿里云地图)转高德地图经纬度的方法

//将百度地图经纬度转换为高德地图经纬度CoordinateConverter converter new CoordinateConverter(this);// CoordType.BAIDU 待转换坐标类型converter.from(CoordinateConverter.CoordType.BAIDU);//阿里云地图转高德converter.from(CoordinateConverter.CoordType.ALIYUN);/…

android 搜狗地图包名,搜狗地图(免费语音导航)

权限信息 读取您的USB存储设备中的内容 android.permission.REQUEST_INSTALL_PACKAComGES android.permission.RECEIVE_USER_PRESENT 完全的网络访问权限 android.permission.ACCESS_BACKGROUND_LOCATION 大致位置(基于网络) 精确位置(基于GPS和网络) 查看网络连接 修…