关键孔标记语言
司机简称
KML
生成依赖项
(读取支持需要libexpat)
Keyhole标记语言(KML)是一种基于XML的语言,用于管理三维地理空间数据的显示。KML已经被接受为OGC标准,并且在主要的GeoBrowsers上以某种方式得到支持。注意,按规范KML只使用一个投影,EPSG:4326。所有OGR KML输出将在EPSG:4326中显示。因此,OGR将在正确的坐标系中创建图层并转换任何几何图形。
此时,KML驱动程序只处理矢量层。 (GDAL项目提供了其他脚本,可以生成其他类型的输出)
驱动程序功能
Supports Create()
This driver supports the GDALDriver::Create()
operation
Supports Georeferencing
This driver supports georeferencing
Supports VirtualIO
This driver supports virtual I/O operations (/vsimem/, etc.)
KML读数
只有使用Expat XML解析器构建GDAL/OGR时,KML读取才可用,否则只支持KML写入。
支持的几何类型有 Point
, Linestring
, Polygon
, MultiPoint
, MultiLineString
, MultiPolygon
和 MultiGeometry
. 有一些限制,例如:源KML文件中文件夹的嵌套性质丢失;文件夹 <description>
标签不会传递到输出。支持包含多个几何体类型(如点和多边形)的文件夹。
KML写作
由于并不是KML的所有特征都能在简单的特征几何模型中表示,因此您将无法从GDAL/OGR中生成许多特定于KML的属性。请尝试一些测试文件以了解可能的情况。
当输出KML时,OGR KML驱动程序将把每个OGR层转换成一个KML文件夹(如果尝试混合层中元素的几何类型,可能会遇到意外行为,例如。 LINESTRING
和 POINT
数据)。
KML驱动程序会将某些层或源KML文件夹名称重命名为它认为有效的新名称,例如第一个未命名层的默认名称“Layer#0 ” `'Layer__0'`` .
KML是格式化和特征数据的混合体。Placemark的<description>标记将在大多数地理浏览器中显示为HTML填充气球。在编写KML时,图层元素属性作为简单的模式字段添加。这将最好地保留要素类型信息。
对填充、线条颜色和其他样式属性的支持有限。请尝试一些示例文件以更好地了解实际行为。
编码问题
Expat库支持读取以下内置编码:
US-ASCII码
UTF-8
UTF-16型
ISO-859-1
Windows-1252
OGR返回的内容将在从文件头中提到的编码转换为后用UTF-8编码。
编写KML文件时,驱动程序希望传入UTF-8内容。
创建选项
支持以下数据集创建选项:
NameField :允许您指定用于KML<name>元素的字段。默认值:“Name”
DescriptionField :允许您指定用于KML<description>元素的字段。默认值:“Description”
AltitudeMode :允许您指定用于KML几何图形的AltitudeMode。这将只影响三维几何图形,并且必须是有效的KML选项之一。见 relevant KML reference material 更多信息。
ogr2ogr -f KML output.kml input.shp -dsco AltitudeMode=absolute
DOCUMENT_ID =string:从GDAL 2.2开始,DOCUMENT_ID datasource creation选项可用于指定根<DOCUMENT>节点的ID。默认值为根文档。
VSI虚拟文件系统API支持
驱动程序支持读取和写入由VSI虚拟文件系统API管理的文件,这些文件包括“常规”文件以及/vsizip/(读写)、/vsigzip/(读写)、/vsicurl/(只读)域中的文件。
还支持写入/dev/stdout或/vsistdout/。
例子
ogr2ogr实用程序可用于将PostGIS查询的结果转储到KML:
ogr2ogr -f KML output.kml PG:'host=myserver dbname=warmerda' -sql "SELECT pop_1994 from canada where province_name = 'Alberta'"
如何将.kml文件的内容转储为OGR看到的内容:
ogrinfo -ro somedisplay.kml
告诫
Google Earth对于多边形等复杂几何图形中的坐标数量似乎有一些限制。如果出现问题,则问题几何图形将全部或部分显示为垂直条纹。不幸的是,在KML规范中没有给出关于这个限制的确切数字,因此KML驱动程序不会警告潜在的问题。一个可能的和经过测试的解决方案是简化一条直线或一个多边形来删除一些坐标。以下是关于这个问题的全部讨论 Google KML Developer Forum ,在 polygon displays with vertical stripes 线程。
也见
LIBKML driver 另一种GDAL-KML驱动程序