MS RFC 55:提高输出分辨率的控制¶
- 日期
2009/03/09
- 作者
丹尼尔·莫里塞特
- 联系方式
在mapgears.com的dmorissette
- 最后编辑
2009/10/06
- 状态
通过(2009/03/16)并实施。
- 版本
MAPServer 5.6
概述¶
MapServer通常用于生成与当前在Web界面中显示的地图对应的可打印地图。
打印的地图通常需要高于屏幕通常使用的默认每英寸72像素的分辨率(例如150或300 dpi)。通常,打印是通过设置map.resolution并为相同的映射范围请求较大的图像来完成的。将map.resolution设置为更高的值可确保对更大图像的图层minscaledenom/maxscaledenom进行正确评估,但有一件事丢失了:符号(线条宽度、符号和字体大小等)未经调整以反映分辨率的变化,结果是,符号看起来比在屏幕上看到的要小。恩。
这个RFC提出了一种机制来解决这个问题,当分辨率改变时自动缩放符号,这样地图就可以保持对每个分辨率的相同观察。
技术解决方案¶
如果未设置72,则将在mapobj中添加一个新的可选defresolution关键字,该关键字的默认值为72。解译是在 Mapfile 中为其定义所有符号大小的引用或默认分辨率。
在渲染时,如果分辨率设置为不同于解译的值,则层定义中的符号将根据分辨率/解译对应的系数进行调整。更具体地说,这是通过将layer->scaleFactor值乘以msPrepareImage()中的分辨率/除霜率来完成的。
以下渲染参数将受到影响:
尺寸(符号和标签)
宽度(线)
从现在起,以前没有受到缩放影响的以下渲染参数也将被固定为遵循缩放:
偏移(直线、点、多边形)
图案(线条)
间隙(线)
大纲宽度(标签)
阴影大小,背景阴影大小(标签)
标签周围的缓冲区(碰撞)
minfeaturesize, mindistance (标签)
线条样式的outline width的情况有点不同:它忽略了scaleFactor,这样无论大小单位使用什么,都可以获得固定的轮廓宽度,但我们希望它遵循分辨率/除霜系数。在这种情况下,线条绘制代码需要有一个对传递给msdrawlinesymbol()的mapobj的引用,以便它可以访问分辨率和解算参数并执行正确的操作。
对于PixMap符号,只有在设置了大小时才会缩放。如果没有设置大小,则不会发生缩放。
使用实例¶
例1:
假设我们有一个 Mapfile ,我们用它生成一个400x400像素的图像,在网络上使用,同时将解译和分辨率设置为72。
MAP
...
RESOLUTION 72
DEFRESOLUTION 72
SIZE 400 400
...
END
为了产生300dpi图像用于打印,应用程序代码应请求1667 x 1667像素(400*300/72=1667)的图像,并将分辨率设置为300。MapServer将自动缩放所有符号大小,比例为300/72=4.1667。
在大多数应用程序中,用于打印的大小和分辨率的新值可能会作为URL参数传递或通过mapscript设置,但在本例中,以mapfile语法表示,我们将使用以下mapobj设置进行打印:
MAP
...
RESOLUTION 300
DEFRESOLUTION 72
SIZE 1667 1667
...
END
例2:
应用程序正在使用为map.resolution=96和mapserver 5.x开发的mapfile。为了利用新功能,应该在mapfile中设置defresolution=96,并且在渲染时,设置resolution=300将导致所有符号都按300/96=3.125的系数缩放。
向后兼容性问题¶
将分辨率设置为72以外的值的现有应用程序或 Mapfile without 设置除霜将以符号比例结束。在大多数情况下,这种行为变化更可能被视为一种特性,而不是一个bug,但如果这是一个现有应用程序的问题,那么修复方法就是简单地向 Mapfile 添加一个解组,该解组与定义所有 Mapfile 类和样式的分辨率相匹配。
上面列出的渲染参数如果在过去没有遵循缩放,将被固定为遵循缩放。
文件注释¶
除了记录新功能之外,还应在MapServer文档中的某个地方添加一条注释,说明在此更改之后,只有当分辨率设置为默认72或等于“解组”设置时,大小值才会反映有效大小(根据“大小单位”设置,默认为ms_像素)。
文件冲击¶
mapserver.h:mapobj中的新解冻成员
mapfile.c、maplexer.l等:new defresolution mapfile关键字
mapdraw.c:根据MSPrepareImage()中的需要调整scaleFactor
mapscript/php3/php_mapscript.c:公开新的除霜成员
票据ID¶
投票历史¶
于2009/03/16通过,由Danielm、Howardb、Stevew、Tamass、Periclesn和Assefay提供+1。