MS RFC 85:矢量轮廓绘制(连接类型轮廓)¶
- 日期
2012/09/18
- 作者
艾伦布德罗
- 联系方式
地图齿轮网的Aboudreault
- 状态
采用
- 版本
MAPServer 6.4
1。概述¶
这是一个建议,添加从栅格源在MapServer中动态计算和渲染轮廓层的能力。该数据源是一组栅格数据,表示数字高程模型(DEM)。有关DEMS的更多信息,请访问:http://en.wikipedia.org/wiki/digital_elevation_model
现在已经可以使用标准矢量层渲染轮廓,但这需要使用gdal_轮廓进行额外的处理步骤,以便从栅格源预生成轮廓。另外,这也意味着gdal_轮廓文件管理等的一些开销。
2。建议的解决方案¶
这个RFC建议在MapServer中添加一个新的层类型:ConnectionType Contour。新的类型是混合层,它有一个栅格数据源作为输入,矢量特征作为输出。最初,只支持这些向量特征的线表示。
由于内部层的类型为Vector,因此将支持查询并对向量(而不是原始栅格源)进行操作。将来,我们可能会看到需要添加查询栅格源的查询模式,但这不包括在这个工作阶段中。
要渲染轮廓层,需要使用以下选项在 Mapfile 中定义一个层:
将图层类型设置为线条。
将ConnectionType设置为Contour。
将数据设置为包含高程带的栅格文件。
使用处理“带区”指定要用作高程的带区,与常规栅格相同。
指定一个或多个类和样式以呈现线条特征。
处理设置:
这些选项应在层级别指定:
等值线间隔:等值线之间的高程间隔
轮廓级别:要提取的一个或多个“固定级别”的逗号分隔列表
轮廓项目:为要放置高程的项目(属性)提供名称。(可选)
如果要使用与比例相关的轮廓间距,还可以在轮廓间距或轮廓级别值中提供显式的最小/最大比例度。这是通过在值或值列表中添加可选的“miscaledenom,maxscaledenom:”前缀来完成的。请参见下面的示例。
简单层定义示例:
LAYER NAME "my_contour_layer"
TYPE LINE
STATUS DEFAULT
CONNECTIONTYPE CONTOUR
DATA /mnt/data/raster/grib/dem.grib
PROCESSING "BANDS=1"
PROCESSING "CONTOUR_ITEM=elevation"
PROCESSING "CONTOUR_INTERVAL=10"
CLASS
STYLE
WIDTH 2
COLOR 255 0 0
END
END
具有比例相关轮廓范围的图层定义示例:
LAYER NAME "my_contour_layer"
TYPE LINE
STATUS DEFAULT
CONNECTIONTYPE CONTOUR
DATA /mnt/data/raster/grib/dem.grib
PROCESSING "BANDS=1"
PROCESSING "CONTOUR_ITEM=elevation"
PROCESSING "CONTOUR_INTERVAL=0,25000:5" # interval of 5 for scales of 25000 or less
PROCESSING "CONTOUR_INTERVAL=25000,500000:10" # interval of 10 for scales in the 25000 to 500000 range
PROCESSING "CONTOUR_LEVELS=500000,0:10,25,50,100" # explicit list of levels for scales of 500000 and up
LABELITEM "elevation"
CLASS
STYLE
WIDTH 2
COLOR 255 0 0
END
LABEL
...
END
END
三。实施细节¶
在内部,轮廓层将有自己的渲染器/驱动程序代码。它是一个混合层,因为它读取栅格源并从中创建一个矢量数据集。它使用内部gdal函数gdalcontorGenerate()。所有其他函数的行为都像一个向量层。可以使用whichshape、getshape等绘制普通线条层。
轮廓层的基本内部绘制过程:
调用whichshape():栅格数据源是使用内部gdal函数读取的,一个ogr数据集存储在内部层结构中。
2。调用getshape():循环通过ogr数据集并返回shapeobj(行)。
mapserver可以像任何其他向量层一样绘制其线条特征。
有关gdalcontourgenerate算法的更多信息,请访问:http://www.gdal.org/gdal_uuu alg_8h.html acef98ad40f159cbfb626988c054c085
3.1 OGR输入驱动器¶
一旦使用gdal栅格/轮廓函数处理栅格源,将使用“内存”驱动程序在内部存储一个ogr数据源。由于mapserver已经有了一个ogr输入驱动程序,因此将使用它来避免不必要的代码复制和维护。内部将使用connectiontype=ms_ogr的layerobj呈现/查询向量功能。
使用“内存”驱动程序的OGR数据源不能重新打开,只能创建。msoglayeropen()函数将尝试打开数据集。在这种情况下,我们的数据源已经打开。为了解决这个小问题,将使用连接池API。
3.3标记¶
由于层内部是线向量层,因此标签不受影响,将呈现为正常状态。
3.4切片边界¶
在对gdalcontourgenerate算法进行了一些回顾之后,确定了线条的切片边界应该适当匹配。所以这不应该是个问题,但必须进行测试。
3.5受影响的文件¶
此RFC将修改/创建以下文件:
mapserver.h/mapfile.c (Connection type CONTOUR support in the mapfile)
mapcontour.c (new file for the CONTOUR renderer)
maplayer.c (new layer type handling, virtual tables init etc.)
maplexer.l (add additional CONTOUR keyword)
3.6MapScript¶
没有任何mapscript绑定问题。与任何其他层一样,轮廓层在内部进行处理/渲染。
3.7向后兼容性问题¶
此更改提供了新的功能,没有考虑向后兼容性问题。
4。测验¶
将修改msautotest以添加与新层类型呈现和查询相关的一些测试。
6。投票历史¶
佩里、塔玛斯、丹尼尔、史蒂夫、托马斯、杰夫、汤姆、迈克尔和斯蒂芬