如何在GeoServer中基于PostGIS数据配置风向风速样式?
GeoServer 风向风速SLD样式修正
常见问题分析
你的SLD未得到准确结果,通常源于以下几点:
- 风向旋转逻辑不匹配气象标准:GeoServer的
<Rotation>默认以正北(0°)为起点顺时针计算,但气象中风向一般指风的来向(如北风是从北吹向南),此时三角形标记需指向风吹去的方向,原角度需做180°偏移。 - 风速缩放无范围限制:直接将风速乘以5会导致大风速下符号过大遮挡地图,小风速下符号难以识别。
- 标记朝向默认值偏差:默认
triangle标记尖端指向正北,需确保旋转后与风向表达逻辑一致。
修正后的SLD代码
<?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>Windy_wind_test</Name> <UserStyle> <Title>Wind Speed and Direction</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>triangle</WellKnownName> <Fill> <CssParameter name="fill">#6699FF</CssParameter> <!-- 浅蓝色填充 --> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <!-- 黑色描边 --> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> <Size> <!-- 限制风速缩放范围,避免符号过大/过小 --> <ogc:Clamp> <ogc:Mul> <ogc:PropertyName>wind_speed</ogc:PropertyName> <ogc:Literal>3</ogc:Literal> <!-- 调整乘数适配地图比例尺 --> </ogc:Mul> <ogc:Literal>5</ogc:Literal> <!-- 最小尺寸 --> <ogc:Literal>40</ogc:Literal> <!-- 最大尺寸 --> </ogc:Clamp> </Size> <Rotation> <!-- 若wind_dir为气象来向(0°=北风),加180°让三角形指向风吹去的方向 --> <ogc:Add> <ogc:PropertyName>wind_dir</ogc:PropertyName> <ogc:Literal>180</ogc:Literal> </ogc:Add> </Rotation> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
关键调整说明
- 风向旋转:通过
<ogc:Add>给原风向角度加180°,适配气象“来向”定义;若你的wind_dir本身是风的去向,可移除该180°偏移。 - 风速尺寸限制:用
<ogc:Clamp>将缩放后的尺寸限制在5-40之间,可根据地图比例尺调整乘数(3)和范围值。 - 标记样式:保留原三角形样式,若需更直观的风向符号,可将
WellKnownName改为arrow(需GeoServer支持该标记)。
验证步骤
- 确认
wind_dir的定义:是风的来向还是去向,角度基准(0°对应正北还是正东),调整旋转逻辑。 - 选取单个测试点,对比实际风向与地图上的标记指向,微调旋转偏移量。
- 调整风速乘数和尺寸范围,确保不同风速的符号在地图上清晰可辨且不遮挡其他要素。
内容的提问来源于stack exchange,提问作者shahid abbas
相关产品推荐
相关产品推荐

