MS RFC 5:MapServer Horizon重新投影改进

日期

2005年9月16日

作者

弗兰克·沃默丹

联系

Pobox.com上的Warmerdam

状态

采用

版本

MAPServer 4.8

目的

要为MapServer bug 411提供实用的解决方案,请使用Ortho投影剪裁问题:

途径

msprojectshape()函数将被修改,以支持形状的重投影,其中一些(而不是全部)顶点由于某些问题(如落在地平线上)无法转换。一个迭代的方法将被用来保存一个简化的几何学近似部分,可以转换。

点特征

  • 点功能将按现在的方式处理。转换是否成功。那些无法转换的将被丢弃。

线特征

  • 如果一个字符串中有多个不连续的部分进行转换,则该字符串可能被拆分为多个字符串。

  • 通过沿最后一个成功点和第一个失败点之间的直线段变换点来计算内插(地平线)点。我们将使用二进制搜索算法来查找公差距离内的最近点。

  • 仍将删除未成功转换顶点的字符串。

区域特征

  • 每个环都将被区别对待,而不考虑其他环。这意味着无法保证卡入后内环将完全留在外环内。特别是,当地平线穿过该区域的一个区域和一个孔时,孔边很可能会接触到,甚至与外部区域的边缘重叠一点。一般来说,在MapServer上下文中,这不太重要,因为使用了一种简单的扫描线栅格化(基于缠绕编号)技术。所以多边形的“正确性”并不重要。

  • 当要应用剪裁时,使用类似于线的技术来插值边顶点。

  • 对于多边形,将有两个(或可能是4、6、8…)插值地平线点。这些将与直线段连接。对于跨越视界大部分的非常大的多边形(即几十度的视界弧),这将导致视界圆的一部分被剪掉。或者,可以使用迭代方法来解决这个曲率问题(不计入本提案中)。

公差

MAPServer需要决定在进行迭代的地平线确定时要获得什么样的详细信息。公差将固定为当前地图渲染中像素大小的一半。在正常的地图绘制中,这意味着最终的绘制是有效精确的。

但是,将公差传递到msprojectshape()需要大量的工作,因为msprojectshape()函数通常不知道有关映射或当前呈现信息的任何信息。为了将此信息传递给msprojectshape(),我将添加一个转换选项结构,其中包含将传递给msprojectshape()的此信息(可能还有其他控制转换的标志)。如果为空,将使用特定的默认值。

需要更新msprojectshape()的所有适当使用,以反映此更改,并提前设置转换选项信息。还将提供layerobj级处理选项来控制(覆盖)默认转换选项。

告诫

  1. msprojectshape()可能从地理信息系统的角度生成稍微无效的多边形,但对于渲染来说不太重要。

  2. “区域地平线边缘”的直线段将导致非常大的多边形(即苏联)地平线的可见“剪裁”。

  3. 这种更改太具有破坏性,无法返回到稳定的4.6.x版本,因此它只能作为基于CVS的MapServer构建(即4.7)的一部分提供,直到4.8版本发布,可能是在12月或1月。

映射文件含义

Mapfile 将不会有任何更改。

MapScript含义

不会对mapscript进行任何更改。

向后兼容性问题

一些先前删除了不完全重新投影的功能的映射现在将生成剪裁的功能。我不认为这会导致明显的问题,除了轻微的变化(改善!)外表上。

人员配备和时间表

新功能将在2005年10月15日之前实现,并及时包含在MapServer 4.8中。它将由Frank Warmerdam在TMC Technologies的慷慨资助下实施。