如何利用OGR_STYLE为DEM等高线添加标注及自定义样式?
解决GDAL生成KML等高线的标注与自定义样式问题
一、自定义等高线颜色(基于OGR_STYLE)
单一样式设置
直接在gdal_contour命令中通过-oo OGR_STYLE参数指定全局样式,比如将等高线设为蓝色、线宽2像素:
gdal_contour small.tif /home/ubuntu/node/geotools/contour.kml -i 3.0 -f KML -a ELEVATION -oo OGR_STYLE="PEN(c:#0000FF,w:2)"
OGR_STYLE的PEN参数规则:
c:后跟RGB十六进制颜色码(如#FF0000为红色)w:后跟线宽(单位:像素)
分高程段自定义颜色
若需给不同高程区间的等高线设置不同样式,需先生成带高程属性的SHP中间文件,再通过ogr2ogr转换KML时指定样式映射:
- 生成SHP格式等高线:
gdal_contour small.tif contour.shp -i 3.0 -a ELEVATION
- 用SQL语句定义分区间样式并转换为KML:
ogr2ogr -f KML contour.kml contour.shp -sql " SELECT *, CASE WHEN ELEVATION <= 100 THEN 'PEN(c:#00FF00,w:1)' WHEN ELEVATION BETWEEN 100 AND 200 THEN 'PEN(c:#FFFF00,w:1.5)' ELSE 'PEN(c:#FF0000,w:2)' END AS OGR_STYLE FROM contour"
二、添加高程标注
方法1:自动生成标注(基于SHP转KML)
先生成SHP等高线,再用ogr2ogr转换时指定NAME_FIELD参数,让Placemark的名称直接调用ELEVATION属性:
ogr2ogr -f KML contour.kml contour.shp -dsco NAME_FIELD=ELEVATION
此方法生成的KML在Google Earth等软件中,会自动将高程数值显示在等高线旁。
方法2:手动修改KML文件添加标注与弹窗
打开生成的contour.kml,找到Style节点,添加LabelStyle(控制标注样式)和BalloonStyle(控制点击弹窗内容):
<Style id="contourStyle"> <LineStyle> <color>ff0000ff</color> <!-- KML颜色为ABGR格式,此处为蓝色 --> <width>2</width> </LineStyle> <LabelStyle> <color>ffffffff</color> <!-- 白色文字 --> <scale>1.2</scale> <!-- 文字缩放比例 --> </LabelStyle> <BalloonStyle> <text>高程:$[ELEVATION] 米</text> <!-- 点击弹窗显示内容 --> </BalloonStyle> </Style>
随后在每个Placemark中引用该样式,并设置名称为高程值:
<Placemark> <name>$[ELEVATION]</name> <styleUrl>#contourStyle</styleUrl> <LineString>...</LineString> </Placemark>
三、注意事项
- GDAL 3.6.2对KML的OGR_STYLE支持完善,但复杂样式建议通过SHP中转处理,灵活性更高
- KML的颜色编码为ABGR格式(前两位为透明度),而OGR_STYLE的
PEN参数使用RGB格式,需注意区分 - 批量处理时,可通过Python调用GDAL/OGR API实现样式的自动化配置
内容的提问来源于stack exchange,提问作者user1592380
相关产品推荐
相关产品推荐

