读天地图数据 下载本文

内容发布更新时间 : 2024/6/24 3:19:54星期一 下面是文章的全部内容请认真阅读。

使用Openlayers调用天地图在线服务数据 国家测绘局2010年10月21日正式发布中国公众版国家地理信息公共服务平台“天地图”,作为中国境内数据资源最全的地理信息服务网站,“天地图”将为公众提供权威、可信、统一的地理信息资源。 “天地图”公开开放了地图数据服务接口,第三方使用者可以直接通过互联网获取地图数据,无需授权认证,在公众服务信息公开方面可以说是一次非常大的进步。 “天地图”的在线服务数据近10TB,以下是“天地图”提供的在线地理信息数据资源: 数据类型 线划地图 数据源 全球1:100万地理底图 级别 2-10级 服务地址 http://tile0.tianditu.com/services/A0512_EMap http://tile0.tianditu.com/services/AB0512_Anno http://tile0.tianditu.com/services/B0627_EMap1112 卫星影像 全国1:25万公开版数字11-12地形图 级 全国车载导航 13-18http://tile0.tianditu.com/services/siwei0608 级 全球250米卫星影像 2-7级 (MODIS) http://tile0.tianditu.com/services/sbsm0210 全国15米卫星影像 8-10(ETM) 级 http://tile0.tianditu.com/services/e11 全国2.5米卫星影像 11-14(P5) 级 地级城市0.6米卫星影像 (QuickBird、WorldView I、WorldView II) 全球90X90米数字高程模型 全球1:100万地名地址 全国1:25万地名地址 全国车载导航地名地址 http://tile0.tianditu.com/services/e12 http://tile0.tianditu.com/services/e13 http://tile0.tianditu.com/services/eastdawnall 15-18级 http://tile0.tianditu.com/services/sbsm1518 数字高程模型 地名地址 http://tile0.tianditu.com/services/J07098 http://search.tianditu.com/wfs 除地名地址数据使用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

y_num=this.pyramid.topTileFromY

根据当前分辨率计算地图瓦片级别

functiongetLevelForResolution(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,唯独在速度上与