使用Openlayers调用天地图在线服务数据
国家测绘局2010年10月21日正式发布中国公众版国家地理信息公共服务平台“天地图”,作为中国境内数据资源最全的地理信息服务网站,“天地图”将为公众提供权威、可信、统一的地理信息资源。
“天地图”公开开放了地图数据服务接口,第三方使用者可以直接通过互联网获取地图数据,无需授权认证,在公众服务信息公开方面可以说是一次非常大的进步。
“天地图”的在线服务数据近10TB,以下是“天地图”提供的在线地理信息数据资源:
数据类型
数据源
级别
服务地址
线划地图
全球1:100万地理底图
2-10级
http://tile0.tianditu.com/services/A0512_EMap
http://tile0.tianditu.com/services/AB0512_Anno
全国1:25万公开版数字地形图
11-12级
http://tile0.tianditu.com/services/B0627_EMap1112
全国车载导航
13-18级
http://tile0.tianditu.com/services/siwei0608
卫星影像
全球250米卫星影像 (MODIS)
2-7级
http://tile0.tianditu.com/services/sbsm0210
全国15米卫星影像 (ETM)
8-10级
全国2.5米卫星影像 (P5)
11-14级
http://tile0.tianditu.com/services/e11
http://tile0.tianditu.com/services/e12
http://tile0.tianditu.com/services/e13
http://tile0.tianditu.com/services/eastdawnall
地级城市0.6米卫星影像
(QuickBird、WorldView I、WorldView II)
15-18级
http://tile0.tianditu.com/services/sbsm1518
数字高程模型
全球90X90米数字高程模型
http://tile0.tianditu.com/services/J07098
地名地址
全球1:100万地名地址
http://search.tianditu.com/wfs
全国1:25万地名地址
全国车载导航地名地址
除地名地址数据使用OGC WFS协议发布外,其他数据全部采用基于OGC WMS-C协议的分级瓦片形式发布,工作原理类似于谷歌地图和OSM(OpenStreetMap)。
类似谷歌地图,“天地图”为互联网开发人员提供了二次开发API(武大吉奥开发的GeoGlobe二维地图API)。
通过分析GeoGlobe API代码,发现它源自Openlayers,大部分代码除了把Openlayers换成GeoSurf外,没有任何变化。不知道Openlayers项目组就此作何感想。
正因为如此,我们可以参考OpenLayers.Layer.TileCache和OpenLayers.Layer.XYZ类,编写一个专用于读取“天地图”的TDTLayer类,使Openlayers能够直接访问“天地图”的在线地图数据。
“天地图”采用256×256像素,png格式的地图瓦片文件,读取单个文件需要四个参数:T、X、Y、L
T=瓦片(Tile)名称,X=瓦片横向编码,Y=瓦片纵向编码,L=瓦片级别
这个是一个完整的请求示例:http://tile0.tianditu.com/DataServer?T=AB0512_Anno&X=50&Y=12&L=6
“天地图”地理信息数据资源列表将地图瓦片分为16级(L=2-18),其中L=2级比例尺最小,对应全球地图。
L=2级只有8个瓦片文件,分别是:
X= 0 1 2 3 0 1 2 3
Y= 0 0 0 0 1 1 1 1
L=3级有32个瓦片文件,分别是:
X= 0-7
Y= 0-3
L=4级有128个瓦片文件,分别是:
X= 0-15
Y= 0-7
其余各级以此类推,每级的瓦片文件数比前一级增加4倍,其中线划地图10级以上,卫星地图8级以上只提供中国境内的数据,没有覆盖全球。
查看GeoGlobe API主代码GeoSurfJSAPI.js文件(相当于Openlayers.js),可以了解X(x_num)、Y(y_num)、L(level)的生成方法,伪代码如下:
level=getLevelForResolution(map.getResolution()); //计算瓦片级别
coef=TopTileSize.w/Math.pow(2,level); //中间系数
x_num=this.pyramid.topTileFromX<this.pyramid.topTileToX?Math.round((bounds.left-this.pyramid.topTileFromX)/coef):Math.round((this.pyramid.topTileFromX-bounds.right)/coef);
y_num=this.pyramid.topTileFromY<this.pyramid.topTileToY?Math.round((bounds.bottom-this.pyramid.topTileFromY)/coef):Math.round((this.pyramid.topTileFromY-bounds.top)/coef);
根据当前分辨率计算地图瓦片级别
function getLevelForResolution(res){
var ratio=map.getMaxResolution()/res;
if(ratio<1)return 0;
for(var level=0;ratio/2>=1;)
{level++;ratio/=2;}
return level;
}
经过简单测试,“天地图”和谷歌地图在数据上差别不大,二次开发方面借助于强大的Openlayers地图客户端引擎不会弱于Google Map API,唯独在速度上与谷歌地图存在较大差距,特别是地图放大到13级-18级时,延迟变得非常明显,有时甚至无法显示。
使用Firebug跟踪运行发现,大约1/3的地图瓦片请求超时,导致客户端读取失败。
“天地图”目前还处于测试阶段,希望相关单位继续改进和提升服务器端性能,快速稳定的响应大量客户端发出的并发请求。
测试中发现,“天地图”开放的地图数据服务接口从tile0.tianditu.com一直到tile7.tianditu.com。依次ping 这8个服务接口,tile1到tile7的响应速度相对较快。修改客户端js代码,将瓦片地图请求平均发送给tile0到tile7 八个服务接口,可以有效加快地图显示速度。“天地图”提供的GeoSurfJSAPI.js中已经包含相关代码,通过给Layer的mirrorUrl属性赋值,可以均衡读取指定的多个服务接口,代码如下:
var layer3 = new GeoSurf.Layer.GlobeTile("siwei0608", "http://tile6.tianditu.com/services/siwei0608", {
transitionEffect: "resize",
topLevel: 13,
bottomLevel: 18,
maxExtent: new GeoSurf.Bounds(100, 27, 110, 34),
mirrorUrls: [
"http://tile1.tianditu.com/services/siwei0608",
"http://tile2.tianditu.com/services/siwei0608",
"http://tile3.tianditu.com/services/siwei0608",
"http://tile4.tianditu.com/services/siwei0608",
"http://tile5.tianditu.com/services/siwei0608",
"http://tile6.tianditu.com/services/siwei0608"
]
});
客户端使用上述读取策略后,即便放大到17-18级,整幅地图也能够完全显示,速度有明显的提升。
http://www.blogjava.net/siriusfx/archive/2010/12/06/339818.html
分享到:
相关推荐
在本文中,我们将探讨如何利用OpenLayers库来调用天地图的在线服务数据。天地图是由国家测绘局推出的中国地理信息公共服务平台,提供丰富的地图、地形等基础地理信息服务。其公开的服务接口允许开发者无需授权即可...
OpenLayers是一个开源JavaScript库,用于创建交互式的地图应用,而百度地图是中国领先的在线地图服务提供商,提供丰富的地图数据和API。 要实现OpenLayers调用百度地图,我们需要做以下几步: 1. **理解OpenLayers...
在ArcCatalog中,你可以选择要发布的服务,并在设置选项中勾选“WMS服务”,这样就会生成一个可供OpenLayers使用的WMS Web Access路径。 一旦服务发布并配置了WMS,你可以通过ArcCatalog查看该服务的详细信息,包括...
OpenLayers 是一个强大的开源JavaScript库,用于在网页上创建...通过这个示例,你可以了解到如何使用OpenLayers与天地图结合,构建一个基本的在线地图应用。学习和理解这段代码将有助于你进一步开发更复杂的GIS项目。
本文将深入探讨如何使用OpenLayers 5加载天地图影像,这是一个中国本土的、提供丰富地理信息的在线地图服务。 首先,了解基本概念。天地图是中国测绘科学研究院开发的地理信息系统,它提供了多种地图服务,包括影像...
总之,"openlayers5加载天地图.zip"是一个帮助开发者学习和实践如何使用OpenLayers 5与天地图服务集成的资源。通过这个例子,你可以深入理解OpenLayers的图层管理和地图交互机制,为创建自己的GIS应用打下坚实的基础...
天地图是由中国国家基础地理信息中心提供的免费在线地图服务,包含丰富的地理信息,如行政区划、道路、水系、建筑物等。它提供WMS和WMTS服务接口,使得开发者可以方便地在自己的应用中集成天地图。 三、加载天地图...
OpenLayers是一个开源的JavaScript库,它允许开发者在网页中嵌入地图,支持多种地图服务,包括WMS、WMTS等,并可与各种数据源集成。它的强大功能包括地图图层管理、缩放、平移、标记、测量等,使得地图应用的开发变...
总之,OpenLayers 3调用离线谷歌切片地图涉及对地图容器的设置、OpenLayers库的使用、图层源的定义以及图片数据的组织。通过学习这个示例,你可以掌握如何在没有网络连接的情况下创建交互式地图应用。
此外,对于天地图的使用,还需要遵守其服务条款,确保合法合规地使用其提供的地理信息数据。 总之,将天地图集成到OpenLayers应用中,不仅丰富了地图内容,也为用户提供了更多选择。通过理解和掌握这些步骤,开发者...
总的来说,这个压缩包提供了一个基础的示例,展示了如何使用OpenLayers在线调用天地图服务。开发者可以基于此进行二次开发,构建更加复杂和个性化的Web地图应用。通过学习和理解这些文件,你可以掌握如何在自己的...
摘要:本文将指导读者如何使用 ArcGIS Server 和 OpenLayers 实现 WMS 调用,详细讲解了从创建 WMS 服务到使用 OpenLayers 调用 WMS 的过程,并提供了实践步骤和代码示例。 一、 ArcGIS Server 和 WMS 服务 ArcGIS...
总结来说,本文介绍了使用JavaScript工具库(如OpenLayers、Leaflet)调用天地图WMTS服务的基础知识,包括创建地图实例、设置WMTS图层以及叠加自定义瓦片图层的方法。开发者可以根据具体需求,灵活运用这些技术来...
它支持多种地图服务,如WMS、WMTS等,允许用户通过简单的API调用将地图数据展示在网页上。在本项目中,Openlayers3被用来绘制和操作水利地图,提供缩放、平移、图层控制等功能,使用户能够直观地查看水利设施分布、...
本文将详细探讨如何使用OpenLayers加载WMS服务,以及这一过程中的关键概念和技术。 ### OpenLayers简介 OpenLayers 提供了一个丰富的API,用于处理各种地图操作,如图层管理、标记添加、图层叠加、地理坐标转换等。...
2. 初始化地图对象:接着,使用OpenLayers创建地图实例,指定地图容器、投影类型(通常使用 EPSG:3857,也称为 Web Mercator)和初始视图。 ```javascript var map = new ol.Map({ target: 'map', view: new ol....
离线地图的实现主要依赖于将在线地图数据预先下载并存储在本地,然后通过OpenLayers来读取和渲染这些存储的数据。在这个DEMO中,我们重点关注两个关键点:地图瓦片的组织和OpenLayers的配置。 1. **地图瓦片的组织*...
GeoServer作为地图服务器,能够接收地理空间数据,如Shapefile(shp格式),并对这些数据进行处理和发布,使它们可以通过Web服务(如WMS或WFS)供其他应用使用。在本案例中,“map_shp”包含全国省界和县道的数据,...
总结来说,这个"openlayers发布离线地图DEMO"展示了如何使用OpenLayers库加载本地存储的瓦片数据,创建一个无需网络连接就能显示的地图应用。这对于那些需要在无网络环境或带宽有限的场合使用地图的应用场景非常有用...
`serverType: 'supermap'`告诉OpenLayers 3我们正在使用SuperMap的WMS服务,这样它可以适应服务的特性和行为。 为了实现地图底图的切换,我们可以创建多个WMS层,每个层对应一个不同的底图。然后,我们可以利用...