地图发布-矢量数据转换为栅格数据

来源:互联网 发布:做游戏的程序员 编辑:程序博客网 时间:2024/05/22 17:40

地图发布-矢量数据转换为栅格数据

通过卫星或者航天飞机等, 可以直接拍摄地球表面的栅格数据,称之为航片(Aerial Photography). 因为这是地球表面的直接影像, 所以可信度极高, 但是代价也很大, 时效性也比较差,也不利于直接的用于空间分析.

通过对航片的抽象,或者直接的采集矢量数据, 可以生成不同格式的矢量数据.

我们在这里说的地图发布,指的是从矢量数据转换为栅格数据.

一般来说, 为了进行转换, 我们需要定义比例尺, 每个比例尺定义一级的图片.

在每个比例尺下, 我们使用一定的规模的矢量数据, 分层管理, 每层的数据定义相关的显示样式. 一般来说,一个数据层可以对应多个,甚至全部的比例尺. 那么从数据层的角度来说, 在每一级的比例尺上, 只是显示要素的多寡不同,显示样式不同而已.

那么在一层的数据上, 究竟有哪些要素某个特定的比例尺上显示, 以怎样的方式显示呢?

  1. 在特定的比例尺上, 要素显示与否参见特定比例尺的地图发布内容-地图发布流程4.
  2. 至于显示方式, 基本上是每级比例尺的显示方式都一样; 至于具体的显示方式, 参考相关的规范定义即可.

矢量数据支持无极缩放,也即可以在任意比例尺下显示.那么在某个时刻特定的比例尺下, 哪些要素要显示?

我们先看两个极端,在极大比例尺下,大量的要素显示在一个极小局域内,如果所有的要素都显示,那么会密密麻麻,没有价值,也严重影响效率.那么很有必要过滤一些要素,在这个时候我们也需要按照一定的策略淘汰一些要素.有两种策略:

  1. 随机淘汰,速度很快
  2. 按照配图的要求进行淘汰

随机淘汰的机制很简单,实现起来也非常容易.默认生成的显示符号使用的就是这种策略.

我们这里重点的讲的是2:按照配图的要求进行淘汰.

按照我们配图的要求, 我们需要首先制定比例尺的等级.比如说制定2级:1:10000,1:5000.

当我们制定比例尺的时候, 意味着什么呢? 或者说, 1:10000和1:5000的地图在显示上有什么不同?至少有两点:

  1. 显示的要素数量不同, 1:5000可能会比1:10000的地图显示更多的要素
  2. 显示的符号配置不同,例如1:5000显示的河流的宽度要比1:10000显示的河流的宽度要宽.

显示要素数量的不同,意味着有些要素要淘汰.可以根据我们前面定义的淘汰策略.只有一点需要注意,点型数据要把矢量外包和注记外包和在一起计算.

那么在其他比例尺下, 如何控制要素的显示,例如1:7500.很显然, 我们应该遵循以下的原则:

  1. 当比例尺是给定的比例尺的时候,采用当前定义比例尺的符号,例如1:10000和1:5000比例尺
  2. 当前的比例尺和给定比例尺越接近,其显示符号也应该越接近.

定义两个比例尺,是把比例尺划分为三个范围.例如比例尺1:10000和1:5000比例尺划分的范围是:(+∞,10000), [10000,5000),[5000,0)(总的比例尺范围是(+∞,0)).我们觉得采用下面的比例尺范围是比较合理的(+∞,7500)采用10000比例尺,[7500,0)采用5000比例尺.我们会把这个过程抽象为一个算法.

我们看到,这里的比例尺和显示符号关联在一起,而这正是标准接口的一部分.

我们的结论:

  1. 矢量数据转换为栅格数据,我们需要定义一定数目的比例尺
  2. 每级比例尺原则上关联一个显示符号,当然所有的比例尺也可以关联同一种显示符号
  3. 每一级比例尺需要淘汰某些要素的显示,淘汰策略有相应的原则
  4. 比例尺和显示符号一般是关联在一起的

余留的问题是:

  1. 淘汰策略是一种算法,这个算法可以每次都实行一次,然后缓冲起来备用. 那么这个缓冲具体是怎样实行的?
  2. 显示符号比例尺抽象的算法