栅格图层定义(Raster Layer Definition)

时间:2024-04-10 18:54:09

栅格图层的数据被渲染为图像,而图像是由像素组成的。所以,定义栅格图层的样式,本质上是定义计算每个像素颜色的规则。通过改变栅格图层定义,我们可以调整栅格图层中每个像素的亮度、对比度,选择透明颜色等。
栅格图层支持多光谱(Multi-Spectral)栅格数据。这种数据有多个通道(Band),每个通道具有相同的地理位置,但是代表不同的信息。例如:一个多光谱栅格文件可以包含如下通道:

  • Blue:用于大气层和深水成像。
  • Green:用于植物和深水结构成像。
  • Red:用于人造物体、300英尺以上的水、土壤和植物的成像。
  • Near-infrared (近红外):主要用于植物成像。
  • Mid-infrared (中红外):用于植物和土壤水分、森林火灾、地质的成像。
  • Thermal-infrared (热红外):用于发射辐射、地质结构的成像。
  • Radar (雷达):用于地形成像或探测各种物体。

因为栅格图层支持多光谱栅格数据,所以栅格图层定义也支持通道的概念。用户可以指定使用哪个通道作为图像数据,哪三个通道作为R、G、B通道,哪个通道作为高程数据,哪个通道用于计算山体阴影(Hillshade)。通常情况下,一个栅格文件只包含一个通道。这时,Band元素的值设置为1。
栅格图层不仅支持普通的图像数据和多光谱栅格数据,而且支持数字高程数据。利用数字高程数据,我们可以构建数字地形模型(Digital Terrain Model)。对于这类型的数据,我们还可按照高度(Height)、坡度(Slope)和坡向(Aspect)来定义各种主题图样式。
栅格图层定义的XML Schema如下图所示。下面的表格解释了栅格图层定义的一些主要元素。

名称

描述

FeatureName

用于指定一个包含Raster属性的要素类。

Filter

一个FDO布尔表达式,用来指定图层返回的栅格数据。如果没有指定Filter,那么返回要素类中所有栅格数据。

Geometry

用于指定Raster属性的名称。因为在一个要素类中,可能有多个Raster属性。此元素可以让MapGuide知道使用要素类中的那个Raster属性。但是,到现在为止还没有一种要素源支持包含多个Raster属性的要素类。

GridScaleRange

用于设定栅格图层的比例尺范围。

SurfaceStyle

用户指定栅格数据高程相关的信息。

ColorStyle

用户指定栅格数据颜色相关的样式信息。

RebuildFactor

用于指定何时重新发送请求以获得更高精度的栅格数据。在浏览和缩放地图时,当本次操作的图层缩放比例超过RebuildFactor指定的值时,MapGuide会重新发送请求以获得更高精度的栅格数据。

但是,目前MapGuide并没有使用这个值。每次缩放地图,MapGuide总会重新发送请求以获得更高精度的栅格数据。

栅格图层定义(Raster Layer Definition)

对于数字高程数据,栅格图层定义中使用了SurfaceStyle和Hillshade元素对它们进行处理。SurfaceStyle用来对高程数据进行预处理,它的XML Schema如下图所示。下面的表格解释了SurfaceStyle的一些主要元素。

名称

描述

Band

用于指定作为高程数据的通道。

ZeroValue

用于指定映射为0的高程值,默认值为0

ScaleFactor

用于指定高程数据的缩放比例,默认值为1

DefaultColor

用于指定像素的默认颜色。如果栅格图层定义中没有ColorStyle,就使用DefaultColor指定的颜色来样式化栅格数据。

栅格图层定义(Raster Layer Definition)

给定一个高程值e,应用SurfaceStyle后,目标高程值等于(e - ZeroValue) * ScaleFactor。
HillShade用来设置山体阴影。通常情况下,HillShade所指定的Band与SurfaceStyle中指定的Band是同一个通道。但是,这并不意味着它们必须是同一个通道。通过应用HillShade,可以让栅格图层看是起来有3维的效果。例如:下面两个栅格图层,左边的是应用了HillShade的图层,右边的是没有应用HillShade的图层。左边的图层看是起来有3维的效果,右边的却没有。
栅格图层定义(Raster Layer Definition)

HillShade的XML Schema如下图所示。下面的表格解释了HillShade的一些主要元素。

名称

描述

Band

用于指定一个包含用于计算山体阴影数据的通道。

Azimuth

用于指定太阳光线在XY平面的投影与正北方向的夹角。

Altitude

用于指定太阳光线与XY平面的夹角。

ScaleFactor

用于指定计算山体阴影时高程值的缩放因子,默认值为1。这个缩放因子并不会影响高程值本身,只影响山体阴影的计算。

栅格图层定义(Raster Layer Definition)

ColorStyle的XML Schema如下图所示。下面的表格解释了ColorStyle的一些主要元素。

名称

描述

HillShade

用于指定作山体阴影样式信息。

TransparencyColor

用于指定一个透明的颜色。Opacity是用于设置整个图层的透明程度。与Opacity不同,应用这个样式后,图层中所有具有此颜色的像素都会变为透明的。

BrightnessFactor

用于指定图层的亮度。这是一个0~1之间的值,默认值为0

ContrastFactor

用于指定图层的对比度。这是一个0~1之间的值,默认值为0

ColorRule

用于指定颜色规则。用户可以指定多条颜色规则。

Filter

用于指定应用当前样式规则的像素。Filter只能应用于数字高程数据,不能用于普通的图像数据。目前,Filter支持三个函数HeightSlopeAspect,分别用于按照高度、坡度、坡向定义样式。这三个函数都是只有一个参数Band,用于指定按照那个通道的数据来计算高度、坡度、坡向。

Label

对于栅格图层无意义,MapGuide没有使用它。

Color

用于指定栅格图层颜色样式

ExplicitColor

用于指定一个RGBA格式的颜色值。

Band

用于指定一个包含图像数据的通道。

Bands

用于指定RGB三个通道,从而创建一个RGB样式的栅格图层。

栅格图层定义(Raster Layer Definition)

下面的栅格图层定义用于显示一张普通的图像,它使用通道1的数据作为图像数据。

<GridLayerDefinition>
<ResourceId>fsd://Raster_2</ResourceId>
<FeatureName>rasters:g-01</FeatureName>
<Geometry>Image</Geometry>
<GridScaleRange>
<ColorStyle>
<ColorRule>
<LegendLabel></LegendLabel>
<Color>
<Band>1</Band>
</Color>
</ColorRule>
</ColorStyle>
<RebuildFactor>1</RebuildFactor>
</GridScaleRange>
</GridLayerDefinition>

下面的栅格图层定义用于显示数字高程数据,它使用通道1的数据作为高程数据,通道1的数据计算山体阴影,包含了如下三条颜色规则:

  • 高度大于等于131,小于225的数据渲染为颜色FFFFFFC8。
  • 高度大于等于225,小于319的数据渲染为颜色FFF0D796。
  • 高度大于等于319,小于414的数据渲染为颜色FFE1AF64。

<GridLayerDefinition>
<ResourceId>fsd://Raster_1</ResourceId>
<FeatureName>rasters:REDDING</FeatureName>
<Geometry>Image</Geometry>
<GridScaleRange>
<SurfaceStyle>
<Band>1</Band>
<DefaultColor>0000FF00</DefaultColor>
</SurfaceStyle>
<ColorStyle>
<HillShade>
<Band>1</Band>
<Azimuth>45</Azimuth>
<Altitude>45</Altitude>
</HillShade>
<ColorRule>
<LegendLabel> 131 to 225</LegendLabel>
<Filter>(Height(1) &gt;= 131)AND (Height(1) &lt; 225)</Filter>
<Color>
<ExplicitColor>FFFFFFC8</ExplicitColor>
</Color>
</ColorRule>
<ColorRule>
<LegendLabel> 225 to 319</LegendLabel>
<Filter>(Height(1) &gt;= 225)AND (Height(1) &lt;)</Filter>
<Color>
<ExplicitColor>FFF0D796</ExplicitColor>
</Color>
</ColorRule>
<ColorRule>
<LegendLabel> 319 to 414</LegendLabel>
<Filter>(Height(1) &gt;= 319) AND (Height(1) &lt;= 414)</Filter>
<Color>
<ExplicitColor>FFE1AF64</ExplicitColor>
</Color>
</ColorRule>
</ColorStyle>
<RebuildFactor>1</RebuildFactor>
</GridScaleRange>
</GridLayerDefinition>