Keyhole Markup Language(KML)是一种基于XML的文件格式,主要由Google Earth使用。GIS用户经常希望将数据导出到KML,以便在Google Earth中可视化。还可能希望从KML文件中提取数据,或将其转换为GIS中使用的其他格式。GDAL KML驱动程序可以读写KML文件,并提供许多选项使转换兼容。我们这里介绍如何将数据导出为KML文件、KML转其他格式、使用LIBKML驱动程序。
(1)将数据导出到KML文件
从数据包的文件metro _ stations spatial _ query . gpkg 中提取图层,并将其导出为KML文件:metro _ stations.KML。
cd D:\GDALLearn\gdal-tools
ogr2ogr -f KML metro_stations.kml spatial_query.gpkg metro_stations
当上述命令工作时,能够注意到当在Google Earth中打开结果文件时,每个要素的地标没有任何标签。这是因为KML格式要求图层中有一个名为Name的字段,用作每个地标的标注。但数据图层没有这样的字段,可以使用-dsco metro_stations station
提供将用作标注的备用字段名称。该图层有一个名为的字段,我们可以将其用作名称字段。
ogr2ogr -f KML metro_stations.kml spatial_query.gpkg metro_stations -dsco NameField=station
(2)KML转其他
KML文件格式支持在同一个KML文件中包含多个数据图层。现在学习如何提取特定的数据层并将其转换为shp。GDAL支持使用虚拟文件系统从URL读取数据,可以使用前缀vsicurl/
从互联网上读取KML文件。
ogrinfo /vsicurl/https://developers.google.com/kml/documentation/KML_Samples.kml
接下来读取图层的路径。
ogrinfo /vsicurl/https://developers.google.com/kml/documentation/KML_Samples.kml Paths
要从这个 KML 文件中提取图层,我们可以使用ogr2ogr
。默认选项在输出中创建许多不需要的字段。我们可以使用Paths -select
选择输入字段的子集。
ogr2ogr -f "ESRI Shapefile" paths.shp /vsicurl/https://developers.google.com/kml/documentation/KML_Samples.kml Paths -select "NAME,Description"
也可以将KML图层转换为CSV文件。GDAL CSV驱动程序能够支持提取要素的几何,并将图层从转换为CSV文件,其中包含从几何图形中提取的X、Y和Z列。
ogr2ogr -f CSV points.csv /vsicurl/https://developers.google.com/kml/documentation/KML_Samples.kml Placemarks -lco GEOMETRY=AS_XYZ
(3)KML与LIBKML驱动程序
如果电脑安装的 GDAL 二进制文件是在支持 LIBKML
驱动程序的情况下编译的,则最好使用它而不是 KML 驱动程序。 LIBKML
驱动程序支持更多选项,并允许创建功能齐全的 KML。下面是使用 LIBKML
驱动程序进行数据转换的示例。 为了指定名称字段,LIBKML 驱动程序使用一个名为LIBKML_NAME_FIELD
的环境变量,可以使用--config
指定变量。
ogr2ogr -f LIBKML metro_stations.kml spatial_query.gpkg metro_stations --config LIBKML_NAME_FIELD station
如果你的GDAL版本同时有KML和LIBKML
驱动,OGR会更喜欢LIBKML驱动。要强制OGR使用KML驱动程序读取文件,可以添加:--config OGR_SKIP LIBKML
。