读天地图数据

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

除地名地址数据使用OGC WFS协议发布外,其他数据全部采用基于OGC WMS-C协议的分级瓦片形式发布,工作原理类似于谷歌地图和OSM(OpenStreetMap)。

类似谷歌地图,“天地图”为互联网开发人员提供了二次开发API(武大吉奥开发的GeoGlobe 二维地图API)。

通过分析GeoGlobe API代码,发现它源自Openlayers,大部分代码除了把Openlayers换成GeoSurf外,没有任何变化。不知道Openlayers项目组就此作何感想。

正因为如此,我们可以参考yer.TileCache和yer.XYZ类,编写一个专用于读取“天地图”的TDTLayer类,使Openlayers能够直接访问“天地图”的在线地图数据。

“天地图”采用256×256像素,png格式的地图瓦片文件,读取单个文件需要四个参数:T、X、Y、L

T=瓦片(Tile)名称,X=瓦片横向编码,Y=瓦片纵向编码,L=瓦片级别

这个是一个完整的请求示例:

/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

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

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的地图瓦片请求超时,导致客户端读取失败。

“天地图”目前还处于测试阶段,希望相关单位继续改进和提升服务器端性能,快速稳定的响应大量客户端发出的并发请求。

测试中发现,“天地图”开放的地图数据服务接口从一直到。依次ping 这8个服务接口,tile1到tile7的响应速度相对较快。修改客户端js代码,将瓦片地图请求平均发送给tile0到tile7 八个服务接口,可以有效加快地图显示速度。“天地图”提供的GeoSurfJSAPI.js中已经包含相关代码,通过给Layer的mirrorUrl属性赋值,可以均衡读取指定的多个服务接口,代码如下:

var layer3 = new yer.GlobeTile("siwei0608", "/services/siwei0608", {

transitionEffect: "resize",

topLevel: 13,

bottomLevel: 18,

maxExtent: new GeoSurf.Bounds(100, 27, 110, 34),

mirrorUrls: [

"/services/siwei0608",

"/services/siwei0608",

"/services/siwei0608",

"/services/siwei0608",

"/services/siwei0608",

"/services/siwei0608"

]

});

客户端使用上述读取策略后,即便放大到17-18级,整幅地图也能够完全显示,速度有明显的提升。

相关文档
最新文档