GMLAS-应用程序模式驱动的地理标记语言(GML)

2.2 新版功能.

司机简称

GMLAS

生成依赖项

干燥

这个驱动程序可以读写任意结构的XML文件,包括那些包含所谓复杂特性的文件,只要这些文件附带一个或多个描述其内容结构的XML模式。虽然这个驱动程序是任何XML模式的通用驱动程序,但主要目标是能够读写直接或间接引用GML命名空间的文档。

驱动程序要求Xerces-C>=3.1。

由于驱动程序在流模式下工作,因此可以以非常小的RAM使用量处理任意大小的文件。

驱动程序功能

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

打开语法

连接字符串是GMLAS:/path/to/The.gml。注意GMLAS:前缀。如果省略了这个前缀,那么很可能会使用GML驱动程序。

也可以只使用“GMLAS:”作为连接字符串,但在这种情况下,必须显式地为模式提供XSD open选项。

XML结构到OGR层和字段的映射

驱动程序扫描XML/GML引用的XML模式,以构建OGR层和字段。严格要求直接或间接使用的模式是完全有效的。XML/GML文件本身的内容很少使用,主要用于确定几何列的SRS。

在模式的顶层声明的XML元素通常将作为OGR层公开。它们的属性和简单XML类型的子元素(字符串、整数、实数,…)将作为OGR字段公开。对于复杂类型的子元素,可能会发生不同的情况。如果子元素的基数最多为一个,并且没有被其他元素引用,那么它将被“展平”到其封闭元素中。否则,它将作为OGR层公开,如果子元素特定于其父元素,则链接到其“父”层,如果子元素由多个父元素共享,则通过连接表。

默认情况下,驱动程序对不严格符合模式的文档是健壮的。文档中的意外内容将被忽略,架构所需的内容和文档中不存在的内容也将被忽略。

咨询 GMLAS mapping examples 有关详细信息,请参见第页。

默认情况下,在配置中,来自Sensor Web Enablement(swe)公共数据模型名称空间的swe:DataRecord和swe:DataArray元素将接收特殊处理,因此它们更自然地映射到OGR概念。swe:field元素将被映射为OGR字段,swe:DataArray的swe:values元素将被解析为每个swe:DataArray的专用层中的OGR功能。请注意,这些方便的曝光是只读的。当使用驱动程序的写端时,将只使用通用映射机制的内容。

元数据层

三个特殊的层“_ogr_fields_metadata”、“_ogr_layers_metadata”、“_ogr_layer_relationships”和“_ogr_other_metadata”为您可以从ogr层和字段的ogr数据模型获得的基本层添加了额外的信息。

如果“公开元数据层打开”选项设置为“是”(或在配置中启用),则会公开这些层。也可以通过在GetLayerByName()调用中指定它们的名称,或使用ogrinfo和ogr2ogr实用程序将它们作为层名称单独检索。

咨询 GMLAS metadata layers 有关详细信息,请参见第页。

配置文件

A default configuration file gmlasconf.xml file is provided in the data directory of the GDAL installation. Its structure and content is documented in gmlasconf.xsd schema.

此配置文件允许用户修改以下设置:

  • 是否应下载远程架构。默认情况下启用。

  • 是否启用架构的本地缓存。默认情况下启用。

  • 本地缓存的路径。默认情况下,$HOME/.gdal/gmlas_xsd_缓存

  • 是否应针对架构启用文档验证。默认情况下禁用。

  • 验证错误是否应导致数据集打开失败。默认情况下禁用。

  • 默认情况下是否应公开元数据层。默认情况下禁用。

  • 是否应始终生成“ogru pkid”字段。默认情况下禁用。在具有ID属性的层上启用该选项非常有用,该属性在不同文档之间的唯一性无法保证。这可能会在将多个文档追加到目标数据库表时引起问题。

  • 是否应删除XML文档中未使用的层和字段。默认情况下禁用。

  • 是否可以使用OGR数组数据类型。默认情况下启用。

  • GML几何体的XML定义是否应报告为OGR字符串字段。默认情况下禁用。

  • 当架构中至少有一个元素从gml:Feature或gml:AbstractFeature派生时,在架构构建的初始过程中是否只应考虑从gml:Feature或gml:AbstractFeature派生的XML元素。默认情况下启用。

  • 配置xlink:ref是否应解析以及如何解析的几个规则。

  • 必须忽略的元素和属性的xpath定义,以减少OGR层和字段的数量。

这个文件可以修改,修改后的版本可以通过CONFIG_file open选项提供给驱动程序。不需要配置文件的任何元素。如果它们不存在,则使用架构文档中指示的默认值。

也可以通过其他打开选项提供配置。请注意,某些打开的选项与配置文件中的设置具有相同的名称。如果提供了这样的打开选项,则其值将覆盖配置文件之一(默认配置文件或通过配置文件打开选项提供的配置文件)。

几何支撑

XML模式只指示几何类型,但不约束空间参考系统(SRS),因此理论上可以让同一类的对象实例对同一几何字段具有不同的SRS。这是不实际的处理,所以当检测到几何字段时,会对文档进行初始扫描,以找到每个具有明确srsName集的几何字段的第一个几何。这个将用于整个几何领域。如果同一场的其他几何体具有不同的sr,则会重新投影它们。

默认情况下,只有从GML几何体构建的OGR几何体才会在OGR功能中公开。可以将配置文件的IncludeGeometryXML设置更改为true,以便使用GML几何体的XML定义公开OGR字符串字段。

大型多层GML文件的性能问题。

传统上,要读取OGR数据源,一个使用GDALDataset::GetLayer()在层上迭代,而对于每个层,一个使用OGR layer::GetNextFeature()在功能上迭代。虽然这种方法仍然适用于GMLAS驱动程序,但它可能会导致在大型文档或使用在许多OGR层中翻译的复杂模式的文档上的性能非常差。

因此,建议使用GDALDataset::GetNextFeature()在特性出现在.gml/.xml文件中时对其进行迭代。当特征包含嵌套元素时,这可能会从非连续图层返回特征。

打开选项

  • XSD =filename(s):指定要使用的显式XSD应用程序架构(或文件名列表,前提是它们用逗号分隔)。”可以使用http://“或”https://“url。当XML/GML文档的根元素中有一个schemaLocation属性和有效链接时,不需要此选项。

  • CONFIG_FILE=filename or inline XML definition: filename of a XML configuration file conforming to the gmlasconf.xsd schema. It is also possible to provide the XML content directly inlined provided that the very first characters are <Configuration.

  • EXPOSE_METADATA_LAYERS =是/否:默认情况下是否应报告元数据层“_ogr_fields_metadata”、“_ogr_layers_metadata”、“_ogr_layer_relationships”和“ogr_other_metadata”。默认为否。

  • VALIDATE =是/否:是否应根据架构验证文档。验证在数据集打开时完成。默认为否。

  • FAIL_IF_VALIDATION_ERROR =是/否:验证错误是否应导致数据集打开失败。(仅在VALIDATE=YES时使用)默认值为NO。

  • REFRESH_CACHE =是/否:是否应从服务器下载由xlink:ref links指向的远程架构和文档,即使它们已经存在于本地缓存中。如果启用了缓存,它将用新下载的资源刷新。默认为否。

  • SWAP_COORDINATES =自动/是/否:是否应交换x/y或long/lat坐标的顺序。在自动模式下,驱动程序将确定是否必须从srsName进行交换。如果srsName是urn:ogc:def:crs:EPSG::XXXX,并且该SRS的EPSG数据库中的坐标顺序是lat、long或northing、easting,则驱动程序将它们交换为地理信息系统友好顺序(long、lat或easting、northing)。对于其他形式的SRS(例如EPSG:XXXX),假定GIS友好顺序,因此不进行交换。当SWAP_COORDINATES设置为YES时,坐标将始终按照它们在GML中出现的顺序进行交换,当它设置为NO时,它们将保持相同的顺序。默认值为“自动”。

  • REMOVE_UNUSED_LAYERS =是/否:是否应从报告的层中删除未使用的层。默认为否

  • REMOVE_UNUSED_FIELDS =是/否:是否应从报告的层中删除未使用的字段。默认为否

  • HANDLE_MULTIPLE_IMPORTS =是/否:是否允许具有相同命名空间但不同架构的多个导入。默认为否

  • SCHEMA_FULL_CHECKING =是/否:是对XSD进行迂腐的检查还是宽容,例如,如果主文档中没有引用架构的无效部分。默认为否

创建支持

GMLAS驱动程序可以通过转换源数据集以模式驱动的方式编写XML文档(与实现CreateLayer()和CreateFeature()接口的大多数其他驱动程序不同)。典型的工作流程是使用GMLAS驱动程序的读取端生成SQLite/Spatialite/PostGIS数据库,可能修改导入的功能,并将此数据库重新导出为新的XML文档。

驱动程序将在源数据集中标识“顶级”层,并在这些层中查找其他顶级层未引用的功能。由于输出XML的创建是模式驱动程序,因此需要有可用的模式。有两种可能的方法:

  • 架构处理的结果存储为4个ogr_ * 通过在转换source.xml时使用EXPOSE_metadata_LAYERS=YES open选项在源数据集中显示元数据表,

  • 或者可以在创建时使用INPUT-XSD creation选项指定模式。

默认情况下,驱动程序将“包装”WFS 2.0wfs:FeatureCollection/WFS:member元素中的功能。也可以要求驱动程序创建一个自定义包装.xsd文件,声明ogr_gmlas:FeatureCollection/ogr_gmlas:featureMember XML元素。

请注意,虽然导出生成的文件应该是XML有效的,但并不能很好地保证它将根据XML模式中表示的附加约束进行验证。这将取决于特性的内容(例如,如果从与模式不一致的GML文件进行转换,则驱动程序的输出通常不会进行验证)

如果输入层在xml后缀字段中有存储为GML内容的几何图形,则驱动程序将比较从该xml内容构建的OGR几何图形与存储在特征的专用几何图形字段中的OGR几何图形。如果两者都匹配,则将使用存储在xml后缀字段中的GML内容,例如保留初始GML内容的特殊性。否则,GML将从OGR几何体导出。

为了提高在非常大的数据库上的导出性能,在“ogr_layers_metadata”中的“layer_pkid_name”属性指向的字段上创建属性索引可能会有所帮助。

ogr2ogr行为

当使用ogr2ogr/GDALVectorTranslate()从源数据库转换为XML/GML时,可以使用的选项有限制。仅支持ogr2ogr的以下选项:

  • 数据集创建选项(见下文)

  • 图层名

  • 空间过滤通过-spat选项。

  • 属性筛选通过-where选项

空间和属性过滤的效果仅适用于顶层图层。通过联接选择的子要素将不受这些过滤器的影响。

数据集创建选项

支持的数据集创建选项包括:

  • INPUT_XSD =filename(s):指定要使用的显式XSD应用程序架构(或文件名列表,前提是它们用逗号分隔)。”可以使用http://“或”https://“url。当源数据集具有填充了架构和位置的“其他”元数据时,不需要此选项。

  • CONFIG_FILE=filename or inline XML definition: filename of a XML configuration file conforming to the gmlasconf.xsd schema. It is also possible to provide the XML content directly inlined provided that the very first characters are <Configuration>.

  • LAYERS=layers. Comma separated list of layers to export as top-level features. The special value "{SPATIAL_LAYERS}" can also be used to specify all layers that have geometries. When LAYERS is not specified, the driver will identify in the source dataset "top-level" layers, and in those layers will find which features are not referenced by other top-level layers.

  • SRSNAME_FORMAT =SHORT/OGC_URN/OGC_URL(仅对GML 3输出有效)默认为OGC_URL。如果短,则SRS NAME的格式为AUTHORITY_NAME:AUTHORITY_CODE如果是OGC_URN,则srsName的格式为URN:OGC:def:crs:AUTHORITY_NAME::AUTHORITY_CODE如果是OGC_URL,则srsName的格式为http://www.opengis.net/def/crs/AUTHORITY_NAME/0/AUTHORITY_CODE,如果SRS是没有显式轴的SRSorder,但是用ImportFromEPSGA()导入的同一SRS权限代码应该被视为lat/long或northing/easting,然后函数将负责坐标顺序交换。

  • INDENT_SIZE = [0-8] . 每个缩进级别的空格数。默认值为2。

  • COMMENT =字符串。作为XML注释添加到生成的XML文件顶部的注释。

  • LINEFORMAT =CRLF/左前。要使用的行尾序列。在Windows上默认为CRLF,在其他平台上默认为LF。

  • WRAPPING =WFS2 U特性集合/GMLAS U特性集合。是将要素包装在wfs:FeatureCollection中,还是包装在ogr-gmlas:FeatureCollection中。默认为WFS2_FEATURECOLLECTION。

  • TIMESTAMP =XML日期时间。用户为要在wfs:FeatureCollection属性中使用的时间戳指定的XML dateTime值。如果未指定,则使用当前日期时间。仅对WRAPPING=WFS2_FEATURECOLLECTION有效。

  • WFS20_SCHEMALOCATION =wfs.xsd的路径或URL。仅对WRAPPING=WFS2_FEATURECOLLECTION有效。默认值为“http://schemas.opengis.net/wfs/2.0/wfs.xsd

  • GENERATE_XSD =是/否。是否生成具有包装ogr_gmlas:FeatureCollection/ogr_gmlas:featureMember元素结构的.xsd文件。仅对WRAPPING=GMLAS_FEATURECOLLECTION有效。默认为“是”。

  • OUTPUT_XSD_FILENAME =字符串。包装.xsd文件名。如果未指定,则与扩展名为.xsd的输出文件同名。请注意,即使GENERATE_XSD=NO,也可以使用此选项,以便包装.XSD出现在.xml文件的schemaLocation属性中。仅对WRAPPING=GMLAS_FEATURECOLLECTION有效

实例

列出数据文件的内容:

ogrinfo -ro GMLAS:my.gml

转换为PostGIS:

ogr2ogr -f PostgreSQL PG:'host=myserver dbname=warmerda' GMLAS:my.gml -nlt CONVERT_TO_LINEAR

转换为空间点并返回GML

ogr2ogr -f SQLite tmp.sqlite GMLAS:in.gml -dsco SPATILIATE=YES -nlt CONVERT_TO_LINEAR -oo EXPOSE_METADATA_LAYERS=YES
ogr2ogr -f GMLAS out.gml tmp.sqlite

也见

  • GML :通用驱动程序不需要模式,但对复杂功能的支持有限

  • NAS/ALKIS :德国地籍数据专用GML驱动程序

信用

最初的执行工作是由欧洲联盟的哥白尼地球观测方案资助的,这是欧洲环境署的任务的一部分。

一些传感器网络支持(SWE)通用数据模型SWE:DataRecord和SWE:DataArray构造的特殊处理的开发已经得到了法国地理研究局(Bureau des Recherches Géologiques et Minières)的资助。