OpenLayers学习--加载指定等级指定范围的高德地图数据

本文介绍了如何在OpenLayers中加载指定等级和范围的高德地图数据。由于OpenLayers默认机制与需求不符,需要解决分辨率匹配和最大范围设定问题。通过构造高德地图数据源图层并指定服务器地址与分辨率,实现了按需加载地图切片。
摘要由CSDN通过智能技术生成

在使用高德地图数据的时候,我们通常不需要加载世界地图,只需要指定项目片区地图数据即可;同样,我们也不需要所有等级的数据,只需要指定等级数据即可。

按照《OpenLayers学习--Layer体系(一)》中的方法,直接使用XYZ图层类来加载,显然无法实现该功能。主要原因有以下两点:
1.没有指定地图的分辨率

OpenLayers的机制就是,当你没有给Layer指定分辨率,也没有给Map指定分辨率,则直接将地图的最大范围的左上角点作为切图原点,并且按照18级来计算切图分辨率,分辨率是以1/2向下递减。

以900913投影为例,maxExtent为(至于不知道为什么是这个值的,请自己百度其原理):

maxExtent: new OpenLayers.Bounds(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892)
那么第0级的分辨率为:
(maxExtent.right - maxExtent.left)/256;
即:res[0] = 156543.033928040625。

由此:res[z] = res[0]/Math.pow(2,z);

而对于XYZ图层,说白了就是计算切片的行列号,直接构造网址,将图片填充到图层的DIV里面。

由此明白,假设只是给Map中指定resolutions来限定地图的显示等级,会导致Map中的Z 之和实际Z对应的resolution不匹配,导致构造出来的网址不正确。


2.没有指定地图的最大范围

假设强行给Map指定一个maxExtent,上面说过,没有给分辨率的时候Layer的分辨率的计算是直接使用Map的Extent来计算,这样显然会导致我

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值