轮廓¶
1。概述¶
MapServer(从6.4版开始)可以从栅格源动态计算和渲染等高线图层。栅格源是一个栅格数据波段,表示数字高程模型(DEM)。有关DEM的更多信息,请访问:http://en.wikipedia.org/wiki/Digital_elevation_model
2。它是如何工作的¶
连通型等高线。新的(至MapServer 6.4)类型是混合图层,它将栅格数据源作为输入,将矢量要素作为输出。最初,将仅支持这些矢量要素的线表示。有关原始实现的更多详细信息,请参阅 RFC 85 。
由于内部层的类型为Vector,因此将支持查询并对向量(而不是原始栅格源)进行操作。将来,我们可能会看到需要添加查询栅格源的查询模式,但这不包括在这个工作阶段中。
要渲染轮廓层,需要使用以下选项在 Mapfile 中定义一个层:
将图层类型设置为线条。
将ConnectionType设置为Contour。
将数据设置为包含高程带的栅格文件。从MapServer 7.0.1开始,TileIndex也可以与 WMS时间 指定必须使用TileIndex的栅格。
使用处理“带区”指定要用作高程的带区,与常规栅格相同。
指定一个或多个类和样式以呈现线条特征。
处理设置:
这些选项应在层级别指定:
等值线间隔:等值线之间的高程间隔
轮廓级别:要提取的一个或多个“固定级别”的逗号分隔列表
轮廓项目:为要放置高程的项目(属性)提供名称。(可选)
如果要使用与比例相关的轮廓间距,还可以在轮廓间距或轮廓级别值中提供显式的最小/最大比例度。这是通过在值或值列表中添加可选的“miscaledenom,maxscaledenom:”前缀来完成的。请参见下面的示例。
警告
如果您只为所有比例范围设置一个COUTURE_INTERVAL,MapServer可能会在外部比例范围崩溃(下面的第一个示例)。更新的GDAL版本(如3.2.0)将输出如下错误消息: "Input values and/or interval settings would lead to too many levels" 。要避免这种情况,请设置多条等高线_间隔线以处理各种比例范围(请参见下面的哥白尼DEM工作示例,以及输出地图图像)。
简单层定义示例:
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
END #layer
具有比例相关轮廓范围的图层定义示例:
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
END #layer
具有平铺索引和WMS时间支持的层定义示例:
LAYER
NAME "my_contour_layer"
TYPE LINE
STATUS OFF
CONNECTIONTYPE CONTOUR
TILEINDEX "data/contour_ti.shp"
TILEITEM "location"
PROCESSING "BANDS=1"
PROCESSING "CONTOUR_ITEM=elevation"
PROCESSING "CONTOUR_INTERVAL=20"
CLASS
STYLE
WIDTH 1
COLOR 255 0 0
END # STYLE
END # CLASS
METADATA
"DESCRIPTION" "contour"
"wms_title" "contour"
"wms_timeitem" "TIME"
"wms_timeextent" "2004-01-01/2004-02-01"
END # METADATA
END # LAYER
具有比例相关等高线范围的图层定义示例&哥白尼欧盟DEM数据:
LAYER
NAME "dem-contours"
TYPE LINE
STATUS ON
CONNECTIONTYPE CONTOUR
DATA "eu_dem_v11_E40N20_clip.TIF"
PROCESSING "BANDS=1"
PROCESSING "CONTOUR_ITEM=Band_1"
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,200,300,400,500,600,700,800,900,1000" # explicit list of levels for scales of 500000 and up
CLASS
NAME "Contours"
STYLE
WIDTH 1
COLOR 139 69 19
END
END
END # layer
Figure: contours zoomed-out to coastline (Corsica island) generated from Copernicus EU DEM
Figure: contours zoomed-in (Corsica island) generated from Copernicus EU DEM
2.1数据单元大小¶
gdal轮廓算法生成的数据通常具有高分辨率。很多点被用来精确地生成轮廓。在某些情况下(例如,形状平滑),您可能需要对线条进行归纳/简化。“[数据单元大小]”属性绑定表示从栅格文件中提取的扩展的单元大小。这与地图单元格大小不同。
在下面的示例中,我将形状概括为数据单元大小的25%的公差,以在所有比例下生成平滑轮廓:
LAYER
NAME "MyContourLayer"
STATUS DEFAULT
DATA "wind.tif"
TYPE LINE
CONNECTIONTYPE CONTOUR
PROJECTION AUTO END
PROCESSING "BANDS=1"
PROCESSING "CONTOUR_ITEM=elevation"
PROCESSING "CONTOUR_INTERVAL=0,0:1"
GEOMTRANSFORM (smoothsia(generalize([shape], 0.25*[data_cellsize])))
CLASS
EXPRESSION ([elevation] >= 0)
STYLE
COLOR 0 0 255
END # STYLE
END # CLASS
END # LAYER