栅格图层的数据被渲染为图像,而图像是由像素组成的。所以,定义栅格图层的样式,本质上是定义计算每个像素颜色的规则。通过改变栅格图层定义,我们可以调整栅格图层中每个像素的亮度、对比度,选择透明颜色等。
栅格图层支持多光谱(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总会重新发送请求以获得更高精度的栅格数据。 |
对于数字高程数据,栅格图层定义中使用了SurfaceStyle和Hillshade元素对它们进行处理。SurfaceStyle用来对高程数据进行预处理,它的XML Schema如下图所示。下面的表格解释了SurfaceStyle的一些主要元素。
名称 |
描述 |
Band |
用于指定作为高程数据的通道。 |
ZeroValue |
用于指定映射为0的高程值,默认值为0。 |
ScaleFactor |
用于指定高程数据的缩放比例,默认值为1。 |
DefaultColor |
用于指定像素的默认颜色。如果栅格图层定义中没有ColorStyle,就使用DefaultColor指定的颜色来样式化栅格数据。 |
给定一个高程值e,应用SurfaceStyle后,目标高程值等于(e - ZeroValue) * ScaleFactor。
HillShade用来设置山体阴影。通常情况下,HillShade所指定的Band与SurfaceStyle中指定的Band是同一个通道。但是,这并不意味着它们必须是同一个通道。通过应用HillShade,可以让栅格图层看是起来有3维的效果。例如:下面两个栅格图层,左边的是应用了HillShade的图层,右边的是没有应用HillShade的图层。左边的图层看是起来有3维的效果,右边的却没有。
HillShade的XML Schema如下图所示。下面的表格解释了HillShade的一些主要元素。
名称 |
描述 |
Band |
用于指定一个包含用于计算山体阴影数据的通道。 |
Azimuth |
用于指定太阳光线在XY平面的投影与正北方向的夹角。 |
Altitude |
用于指定太阳光线与XY平面的夹角。 |
ScaleFactor |
用于指定计算山体阴影时高程值的缩放因子,默认值为1。这个缩放因子并不会影响高程值本身,只影响山体阴影的计算。 |
ColorStyle的XML Schema如下图所示。下面的表格解释了ColorStyle的一些主要元素。
名称 |
描述 |
HillShade |
用于指定作山体阴影样式信息。 |
TransparencyColor |
用于指定一个透明的颜色。Opacity是用于设置整个图层的透明程度。与Opacity不同,应用这个样式后,图层中所有具有此颜色的像素都会变为透明的。 |
BrightnessFactor |
用于指定图层的亮度。这是一个0~1之间的值,默认值为0。 |
ContrastFactor |
用于指定图层的对比度。这是一个0~1之间的值,默认值为0。 |
ColorRule |
用于指定颜色规则。用户可以指定多条颜色规则。 |
Filter |
用于指定应用当前样式规则的像素。Filter只能应用于数字高程数据,不能用于普通的图像数据。目前,Filter支持三个函数Height、Slope和Aspect,分别用于按照高度、坡度、坡向定义样式。这三个函数都是只有一个参数Band,用于指定按照那个通道的数据来计算高度、坡度、坡向。 |
Label |
对于栅格图层无意义,MapGuide没有使用它。 |
Color |
用于指定栅格图层颜色样式 |
ExplicitColor |
用于指定一个RGBA格式的颜色值。 |
Band |
用于指定一个包含图像数据的通道。 |
Bands |
用于指定R、G、B三个通道,从而创建一个RGB样式的栅格图层。 |
下面的栅格图层定义用于显示一张普通的图像,它使用通道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) >= 131)AND (Height(1) < 225)</Filter>
<Color>
<ExplicitColor>FFFFFFC8</ExplicitColor>
</Color>
</ColorRule>
<ColorRule>
<LegendLabel> 225 to 319</LegendLabel>
<Filter>(Height(1) >= 225)AND (Height(1) <)</Filter>
<Color>
<ExplicitColor>FFF0D796</ExplicitColor>
</Color>
</ColorRule>
<ColorRule>
<LegendLabel> 319 to 414</LegendLabel>
<Filter>(Height(1) >= 319) AND (Height(1) <= 414)</Filter>
<Color>
<ExplicitColor>FFE1AF64</ExplicitColor>
</Color>
</ColorRule>
</ColorStyle>
<RebuildFactor>1</RebuildFactor>
</GridScaleRange>
</GridLayerDefinition>