OGR 输出

作者

Frank Warmerdam

联系方式

warmerdam at pobox.com

最后更新

2017-08-23

介绍

已将OGR输出支持添加到MapServer 6.0中。它提供了一个输出驱动程序,以生成适合作为WMS GetFeatureInfo或WFS GetFeature请求返回结果的功能样式输出。ogr功能输出取决于正在根据GDAL/OGR库构建的mapserver。当版本字符串中出现input=ogr时,应在MapServer 6.0或更高版本中启用ogr输出驱动程序。

输出格式声明

允许的OGR输出格式的详细信息由 OUTPUTFORMAT 宣言。声明定义了要使用的OGR格式驱动程序、特定于该驱动程序的创建选项,以及有关如何打包多文件结果以及是尝试在磁盘上还是内存中构建结果的更一般的MapServer说明。

实例:

OUTPUTFORMAT
  NAME "CSV"
  DRIVER "OGR/CSV"
  MIMETYPE "text/csv"
  FORMATOPTION "LCO:GEOMETRY=AS_WKT"
  FORMATOPTION "STORAGE=memory"
  FORMATOPTION "FORM=simple"
  FORMATOPTION "FILENAME=result.csv"
END

OUTPUTFORMAT
  NAME "OGRGML"
  DRIVER "OGR/GML"
  FORMATOPTION "STORAGE=filesystem"
  FORMATOPTION "FORM=multipart"
  FORMATOPTION "FILENAME=result.gml"
END

OUTPUTFORMAT
  NAME "SHAPEZIP"
  DRIVER "OGR/ESRI Shapefile"
  FORMATOPTION "STORAGE=memory"
  FORMATOPTION "FORM=zip"
  FORMATOPTION "FILENAME=result.zip"
END

OUTPUTFORMAT
  NAME "SPATIALITEZIP"
  DRIVER "OGR/SQLITE"
  MIMETYPE "application/zip"
  FORMATOPTION "DSCO:SPATIALITE=YES"
  FORMATOPTION "STORAGE=memory"
  FORMATOPTION "FORM=zip"
  FORMATOPTION "FILENAME=result.db.zip"
END

要使用的ogr格式驱动程序由驱动程序参数中“ogr/”后面出现的名称决定。此名称应与ogr2ogr用法消息中的ogr2ogr的“-f”参数所支持的格式之一匹配。

OGR输出的IMAGEMODE是FEATURE,但这是隐式的,不需要为OGR输出驱动程序声明显式声明。

OGR渲染器将支持以下格式选项声明:

DSCO:*

任何以dsco:为前缀的内容都用作带有ogr驱动程序的数据集创建选项。有关特定格式驱动程序,请参见OGR网页,以查看可用的层创建选项。

LCO:*

以lco:为前缀的任何内容都用作层创建选项。有关特定格式驱动程序,请参见OGR网页,以查看可用的层创建选项

FORM=simple/zip/multipart

指示结果应该是简单的单个文件(简单)、mime多部分附件(多部分)还是zip文件(zip)。““zip”是默认值。

STORAGE=memory/filesystem/stream

指示在写入数据源时应将其存储在何处。“文件系统”是默认值。

如果是“内存”,那么它将在/vsimem/中创建,但这只适用于支持vsi*l的驱动程序,我们无法轻松地自动确定这些驱动程序。

如果“filesystem”,则是临时文件的目录(使用 WEB TEMPPATHMS_TEMPPATH)

如果是“流”,则将使用名称“/vsistdout”创建数据源,以尝试直接写入stdout。只有少数几个OGR驱动程序可以在此模式下正常工作(即.csv,可能是kml,gml)。

FILENAME=name

为创建的数据源提供名称,对于单个文件或多部分表单,默认值为“result.dat”,对于zip表单,默认值为“result.zip”。对于zip格式,文件名的格式可以是basename.ext.zip,其中basename.ext将用作实际的ogr数据源名称(即通常放在zip文件中的文件名)。

USE_FEATUREID=true/false

从MapServer V7.0.2开始。默认为false。如果在层级别设置了OWS FeatureID元数据键,则在生成的输出中包含要素ID。要使用的FeatureID列 should 为整数列。如果您需要在geojson输出中包含一个“id”属性,这将非常有用。谨慎使用,因为某些OGR输出驱动程序在与 random FIDS。

层元数据

OGR输出驱动程序利用层级元数据对象中的几个项。其中一些最初用于GML输出,或主要用于支持WFS。

wfs_getfeature_formatlist

(可选)WFS GetFeature响应支持的格式列表,以逗号分隔。应列出OutputFormat名称值。

"wfs_getfeature_formatlist" "OGRGML,SHAPEZIP,CSV"
wfs_additional_files_in_output

(可选)一个以逗号分隔的文件名列表,其中的文件名应作为附加文件包含在对该层的WFS GetFeature请求的响应中,用于表单格式选项为“zip”或“multipart”的输出格式。这通常用于添加技术信息、元数据或许可证信息。文件名也可以是目录名,在这种情况下,目录中包含的所有文件都将被考虑在内。相对文件名将根据mapfile目录和shapepath值(如果定义)进行计算。文件名也可以是URL(以http://或https://开头)。对于后一种功能,请注意,这需要使用curl支持编译ogr。地址:

"wfs_additional_files_in_output" "license.pdf,my_layer_metadata.xml"
gml_include_items

(可选)要包含的项的逗号分隔列表,或关键字“all”。您可以使用关键字“all”启用完全曝光。

"gml_include_items" "all"

可以指定部分曝光的属性(字段)列表,例如:

"gml_include_items" "Name,ID"

新的默认行为是完全不公开属性。

gml_[item name]_alias

(可选)属性名称的别名。结果文件将通过别名引用此属性。下面是一个例子:

"gml_province_alias" "prov"
gml_[item name]_type

(Optional) Specifies the type of the attribute. Valid values are Integer|Long|Real|Character|Date|Boolean. Note: Long is to be used for 64-bit integers, starting with MapServer 7.0.1. If MapServer is built against GDAL 2.0 or later, Long will be translated as a OGR 64-bit integer. For earlier versions, it will be translated as a OGR double-precision floating point value.

gml_u[item name]_width

(可选)为重要格式(如shapefiles)指定指定字段的宽度。

gml_u[item name]_精度

(可选)为重要格式(如shapefiles)指定指定字段的精度。Precision是小数位数,仅用于“real”字段。

gml_types

(可选)如果此字段为“auto”,则某些输入功能驱动程序(例如,ogr和本机形状文件)将根据源文件自动填充层的类型、宽度和精度元数据。

"gml_types"   "auto"
ows/wfs_geomtype

(可选,元数据与共享 WFS server GML output )设置从此MapServer层创建的OGR层的几何类型。“point”、“linestring”、“polygon”、“multipoint”、“multilistering”、“multipolygon”、“geometrycollection”、“geometry”或“none”之一。大多数都相当明显,但是“几何体”可以用来表示几何体类型的混合,“无”有时适用于没有几何体的图层。请注意,混合多边形和多多边形的层通常必须描述为“几何体”。要生成2.5d输出,请将“25d”附加到几何类型(即“polygon25d”)。请注意,只有在使用“点”支持构建时,mapserver才携带z值。

"ows_geomtype"  "Polygon"

地图/Web元数据

wms_feature_info_mime_type

为了让wms getfeatureinfo允许选择ogr输出格式,必须在此元数据项中列出与outputformat关联的mime类型。

"wms_feature_info_mime_type" "text/csv"
wfs_additional_files_in_output

(可选)应作为附加文件包括在响应WFS GetFeature请求时的文件名的逗号分隔列表,对于 Mapfile 的任何层,对于表单格式选项为“zip”或“multipart”的输出格式。这通常用于添加技术信息、元数据或许可证信息。文件名也可以是目录名,在这种情况下,目录中包含的所有文件都将被考虑在内。相对文件名将根据mapfile目录和shapepath值(如果定义)进行计算。文件名也可以是URL(以http://或https://开头)。对于后一种功能,请注意,这需要使用curl支持编译ogr。

"wfs_additional_files_in_output" "license.pdf"

支持的几何类型

在MapServer中,我们有点、线和多边形层,它们也允许具有多个点、线或多边形的特征。然而,在OGC使用的简单特征几何模型中,一个点和多点层是非常不同的。同样,对于线串、多线串和多边形,也是多多边形层类型。

为了解决MapServer和OGR几何模型之间的不匹配问题,有一种机制可以指定通过OGR导出时要使用的几何类型。这是层上的“WFS/OWS U GEOMTYPE”元数据项。它可以是“点”、“线串”、“多边形”、“多点”、“多字符串”、“多多边形”、“多多边形”、“多多边形”、“几何集合”、“几何体”或“无”之一。

如果未指定此项,则将根据图层类型使用“点”、“线串”或“多边形”。在混合几何类型(即多边形和多多边形)的情况下,几何类型应设置为“几何”,这意味着任何几何类型。

"ows_geomtype" "Geometry"

为了启用2.5d支持(带有z坐标的几何图形),必须将“25d”后缀添加到“OWS-GEOMTYPE”元数据项(即“polygon25d”)的值中,并且必须使用“点”支持来构建MapServer。

属性字段定义

对于OGR输出,非常希望能够创建具有适当数据类型、宽度和精度的输出字段,以反映源特征定义。

可以在图层上设置gml_u[item]u类型、gml_[item]u宽度和gml_[item]u精度元数据,以提供详细的字段定义:

METADATA
  "gml_ID_type"        "Integer"
  "gml_ID_width"       "8"
  "gml_AREA_type"      "Real"
  "gml_AREA_width"     "15"
  "gml_AREA_precision" "6"
  "gml_NAME_type"      "Character"
  "gml_NAME_width"     "64"
  ...

但是,手动执行此操作非常繁琐且容易出错。因此,一些功能源(至少是OGR、shapefiles、postgis和oraclespace)支持从源数据存储自动填充此信息的机制。要完成此操作,请指定:

"gml_types"            "auto"

如果不努力为属性字段设置类型、宽度和精度信息,则在通过OGR写入时,它们都将被视为可变长度字符字段。

退货包装

返回通用特征格式的挑战之一是,许多这样的格式由多个文件组成,这些文件必须在结果中返回。基于outputformat声明中的form format选项,有三种方法可以实现这一点。

simple

在这种情况下,返回单个结果。这适用于生成单个文件的格式驱动程序。返回结果将在outputformat声明中列出mimetype。注意,如果ogr驱动程序实际返回多个文件,则只返回主文件(名称与传递到ogr createdatasource调用中的文件名匹配的文件)。返回结果将具有基于文件名格式选项的建议文件名。

multipart

在这种情况下,生成的所有文件都作为多部分mime结果返回。在这种情况下,输出格式的mimetype将被忽略。所有组件文件都以“application/binary”的mime类型返回,整个包是“multipart/mixed”。

zip

在这种情况下,生成的所有文件都捆绑到一个.zip文件中,该zip文件以mimetype“application/zip”返回。输出格式mimetype被忽略。

“zip”结果的一个警告是,只有当GDAL/OGR版本为1.8或更新(或比2010年10月15日晚1.8开发)时,此选项才可用。早期版本的GDAL/OGR缺少所需的压缩功能。

测试套件示例

MSAutoTest测试套件包含一个测试用例,用于使用来自WFS的OGR输出。 Mapfile 位于:

只要将[map file]替换为map file名称,文件开头的注释就具有可以针对映射运行的各种示例请求。这些请求应该针对msautotest/wxs目录中的mapserv运行。