地图发布-矢量数据转换为栅格数据
通过卫星或者航天飞机等, 可以直接拍摄地球表面的栅格数据,称之为航片(Aerial Photography). 因为这是地球表面的直接影像, 所以可信度极高, 但是代价也很大, 时效性也比较差,也不利于直接的用于空间分析.
通过对航片的抽象,或者直接的采集矢量数据, 可以生成不同格式的矢量数据.
我们在这里说的地图发布,指的是从矢量数据转换为栅格数据.
一般来说, 为了进行转换, 我们需要定义比例尺, 每个比例尺定义一级的图片.
在每个比例尺下, 我们使用一定的规模的矢量数据, 分层管理, 每层的数据定义相关的显示样式. 一般来说,一个数据层可以对应多个,甚至全部的比例尺. 那么从数据层的角度来说, 在每一级的比例尺上, 只是显示要素的多寡不同,显示样式不同而已.
那么在一层的数据上, 究竟有哪些要素某个特定的比例尺上显示, 以怎样的方式显示呢?
- 在特定的比例尺上, 要素显示与否参见特定比例尺的地图发布内容-地图发布流程4.
- 至于显示方式, 基本上是每级比例尺的显示方式都一样; 至于具体的显示方式, 参考相关的规范定义即可.
矢量数据支持无极缩放,也即可以在任意比例尺下显示.那么在某个时刻特定的比例尺下, 哪些要素要显示?
我们先看两个极端,在极大比例尺下,大量的要素显示在一个极小局域内,如果所有的要素都显示,那么会密密麻麻,没有价值,也严重影响效率.那么很有必要过滤一些要素,在这个时候我们也需要按照一定的策略淘汰一些要素.有两种策略:
- 随机淘汰,速度很快
- 按照配图的要求进行淘汰
随机淘汰的机制很简单,实现起来也非常容易.默认生成的显示符号使用的就是这种策略.
我们这里重点的讲的是2:按照配图的要求进行淘汰.
按照我们配图的要求, 我们需要首先制定比例尺的等级.比如说制定2级:1:10000,1:5000.
当我们制定比例尺的时候, 意味着什么呢? 或者说, 1:10000和1:5000的地图在显示上有什么不同?至少有两点:
- 显示的要素数量不同, 1:5000可能会比1:10000的地图显示更多的要素
- 显示的符号配置不同,例如1:5000显示的河流的宽度要比1:10000显示的河流的宽度要宽.
显示要素数量的不同,意味着有些要素要淘汰.可以根据我们前面定义的淘汰策略.只有一点需要注意,点型数据要把矢量外包和注记外包和在一起计算.
那么在其他比例尺下, 如何控制要素的显示,例如1:7500.很显然, 我们应该遵循以下的原则:
- 当比例尺是给定的比例尺的时候,采用当前定义比例尺的符号,例如1:10000和1:5000比例尺
- 当前的比例尺和给定比例尺越接近,其显示符号也应该越接近.
定义两个比例尺,是把比例尺划分为三个范围.例如比例尺1:10000和1:5000比例尺划分的范围是:(+∞,10000), [10000,5000),[5000,0)(总的比例尺范围是(+∞,0)).我们觉得采用下面的比例尺范围是比较合理的(+∞,7500)采用10000比例尺,[7500,0)采用5000比例尺.我们会把这个过程抽象为一个算法.
我们看到,这里的比例尺和显示符号关联在一起,而这正是标准接口的一部分.
我们的结论:
- 矢量数据转换为栅格数据,我们需要定义一定数目的比例尺
- 每级比例尺原则上关联一个显示符号,当然所有的比例尺也可以关联同一种显示符号
- 每一级比例尺需要淘汰某些要素的显示,淘汰策略有相应的原则
- 比例尺和显示符号一般是关联在一起的
余留的问题是:
- 淘汰策略是一种算法,这个算法可以每次都实行一次,然后缓冲起来备用. 那么这个缓冲具体是怎样实行的?
- 显示符号比例尺抽象的算法