轮廓

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

../../_images/contour-coastline.png

Figure: contours zoomed-in (Corsica island) generated from Copernicus EU DEM

../../_images/contour.png

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