PDS4——美国宇航局行星数据系统(第4版)

司机简称

PDS4系列

Driver built-in by default

This driver is built-in by default

PDS4是美国宇航局主要用于存储和分发太阳、月球和行星图像数据的格式。GDAL提供对PDS4格式图像数据的读写访问。

PDS4文件由引用原始图像文件的.xml(标签)文件组成。驱动程序还支持存储在单独的未压缩GeoTIFF文件中的图像,该文件具有与原始图像文件兼容的条带组织。

驱动程序还读取和写入地理参考和坐标系信息以及选定的其他头元数据。

每个源波段都连接一个屏蔽带。当像素值是缺少的常量之一时,此遮罩带的值为0。

该驱动程序的实施得到了美国地质调查局的支持。

PDS4是一系列相关格式的一部分,包括PDS和ISIS3。

从GDAL 2.5开始,PDS4驱动程序支持读写ASCII fixed with、binary fixed with和delimited(CSV)表作为OGR向量层。

驱动程序功能

Supports CreateCopy()

This driver supports the GDALDriver::CreateCopy() operation

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.)

元数据

PDS4标签可以作为XML:PDS4元数据域中的XML序列化内容进行检索。

创建时,源模板标签可以传递到“xml:PDS4”元数据域中的SetMetadata()接口。

打开选项(仅矢量)

3.0 新版功能.

打开PDS4矢量数据集时,以下打开选项可用:

  • LAT =字符串。包含纬度值的字段的名称。默认为纬度。

  • LONG =字符串。包含经度值的字段的名称。默认为经度。

  • ALT =字符串。包含高度值的字段的名称。默认为高度。

  • WKT =字符串。包含WKT值的字段的名称。

  • KEEP_GEOM_COLUMNS =是/否。是否将原始x/y/几何列公开为常规字段。默认为否。

创建支持

PDS4驱动程序支持更新现有数据集的映像,通过CreateCopy()和Create()接口创建新的数据集。

当使用CreateCopy()、gdal_translate或gdalwarp时,在执行PDS4到PDS4转换时,会尽量保留原始标签。使用USE_SRC_LABEL=NO creation选项可以禁用此选项。

以下数据集创建选项可用:

  • 仅栅格:

    • IMAGE_FILENAME =文件名。重写默认外部图像文件名。

    • IMAGE_EXTENSION =ext。覆盖外部图像文件名的默认扩展名。默认值为“img”表示图像格式=RAW或“tif”表示图像格式=GEOTIFF

    • IMAGE_FORMAT =原始/GEOTIFF。图像文件的格式。如果使用RAW,图像将放在一个RAW文件中,其文件名是主文件名,扩展名为.img。如果使用GEOTIFF,图像将放在单独的GEOTIFF文件中,其文件名是扩展名为.tif的主文件名。默认为原始

    • INTERLEAVE=BSQ/BIP/BIL. Pixel organization in the image file. BSQ is Band SeQuential, BIP is Band Interleaved per Pixel and BIL is Band Interleave Per Line. The default is BSQ. BIL is not valid for IMAGE_FORMAT=GEOTIFF. Starting with GDAL 3.5, when copying from a source dataset with multiple bands which advertises a INTERLEAVE metadata item, if the INTERLEAVE creation option is not specified, the source dataset INTERLEAVE will be automatically taken into account.

    • USE_SRC_LABEL =是/否。是否使用PDS4到PDS4转换中的源标签。默认为“是”。

    • ARRAY_TYPE =阵列/阵列二维/阵列二维图像/阵列二维地图/阵列二维频谱/阵列三维/阵列三维图像/阵列三维电影/阵列三维频谱。设置定义数组类型的XML元素。默认为Array_3D_图像。使用数组 * 不支持多波段图像。使用数组时 * 值时,将忽略交错。

    • ARRAY_IDENTIFIER =字符串。(GDAL>=3.0)要放入数组元素的标识符。

    • UNIT =字符串。(GDAL>=3.0)元素Array.unit的内容。如果未提供,则将使用从另一栅格复制时的源波段单位(如果存在于源波段上)。

    • CREATE_LABEL_ONLY =YES/NO。(GDAL>=3.1)如果设置为YES,并在GDAL_translate/CreateCopy()上下文中使用,其中源数据集是ENVI、GeoTIFF、is is 3、VICAR、FITS或PDS3数据集,其布局与PDS4支持的原始二进制格式兼容,则只生成标签XML文件,它将引用源的原始二进制文件数据集。在这种情况下,将忽略图像文件名、图像格式和交叉创建选项。

  • 栅格和矢量:

    • **VAR_** *=字符串。如果指定了VAR_XXXX=yyyy之类的选项,则模板标签中的任何{XXXX}字符串都将替换为yyyy值。

    • TEMPLATE =文件名。要使用的模板标签。如果未指定且不是从现有PDS4文件创建,则将使用data/PDS4_template.xml文件。为了让GDAL实用程序找到这个默认PDS4模板,应该在您的环境中定义GDAL的数据目录(通常在Windows构建上)。咨询 wiki 更多信息。

    • LATITUDE_TYPE =平面中心/平面图。纬度类型的值。默认为Planetocentric。

    • LONGITUDE_DIRECTION =正东/正西。经度方向的值。默认为正东。

    • RADII =半主要半径,半次要半径。以覆盖SRS中的一个。注意,第一个值(semi_major_radius)将用于设置<pds:semi_major_radius>和<pds:semi_minor_radius>XML元素,第二个值(semi_minor_radius)将用于设置<pds:polar_radius>XML元素。

    • BOUNDING_DEGREES =西侧、南侧、东侧、北侧。手动设置边界框

图层创建选项(矢量/表格数据集)

(从GDAL 3.0开始)创建PDS4矢量数据集或将新表附加到现有表时,可以使用以下图层创建选项:

  • TABLE_TYPE =分隔符/字符/二进制。确定要创建的PDS4表的类型。DELIMITED是默认值,对应于CSV表文件(带逗号字段分隔符)。字符对应于固定宽度的ASCII表。二进制对应于固定宽度的表。对于固定宽度表,对于字符串字段,如果OGR字段定义中没有显式字段集,则使用64字节的任意宽度。只有分隔符支持将几何图形作为WKT字符串进行任意编码。其他两种表格类型仅支持地理坐标点(纬度、经度)。

  • LINE_ENDING= CRLF/LF. Determines the line-ending character sequence. Only applies to TABLE_TYPE=DELIMITED or CHARACTER. The default is CRLF (Carriage Return and Line Feed). It can be set to LF for just Line Feed character. (GDAL >= 3.4)

  • GEOM_COLUMNS =AUTO/WKT/LONG_LAT。指定几何图形的编码方式。在自动模式下,对于分隔表,如果输入几何图形是带有附加到图层的地理CRS的点,则将创建一个长列和LAT列来存储点坐标。对于其他几何图形类型,使用WKT列。此选项的WKT值还可用于强制在可能创建长列和LAT列时创建WKT列。对于固定宽度的表格类型,只能使用“自动”和“长平面”。

  • CREATE_VRT =是/否。对于分隔表,默认为是。在这种情况下,将沿着.csv文件创建一个OGR VRT(XML文件)。

  • LAT =字符串。包含纬度值的字段的名称。默认为纬度。仅当几何图形来自具有地理CRS的点图层时使用

  • LONG =字符串。包含经度值的字段的名称。默认为经度。仅当几何图形来自具有地理CRS的点图层时使用

  • ALT =字符串。包含高度值的字段的名称。默认为高度。仅当几何图形来自具有地理CRS的点图层时使用

  • WKT =字符串。包含WKT值的字段的名称。

  • SAME_DIRECTORY =是/否。是否应在同一目录中或子目录中创建表文件。默认为否,即表文件将在子目录中创建,子目录的名称是XML文件的基名称。例如,如果创建“foo.xml”PDS4数据集,则默认情况下将在“foo”子目录中创建表文件。如果此选项设置为YES,它们将与“foo.xml”在同一目录中创建。

子数据集/多图像支持

如果标签中存在多个数组对象,则它们将被报告为单独的子数据集(通常,主子数据集是Array3D,背板表示为Array2D)。

自GDAL 3.0以来,支持使用子数据集创建新的数据集(通过APPEND_SUBDATASET=YES creation选项)。一个重要的限制是,鉴于PDS4 XML标签中的地理参考信息对于整个数据集是全局的,所有子数据集必须共享相同的地理参考信息:坐标参考系、地理注册和分辨率。支持附加到原始栅格和GEOTIFF栅格。在追加模式下,除了交错(如果GeoTIFF输出图像)、数组类型和数组标识符之外,大多数创建选项都被忽略。

PDS4栅格示例

列出带区和子数据集:

$ gdalinfo b0011_p237201_01_01v02.xml

Driver: PDS4/NASA Planetary Data System 4
Files: b0011_p237201_01_01v02.xml
       b0011_p237201_01_01v02.qub
Size is 512, 512
Coordinate System is `'
Image Structure Metadata:
  INTERLEAVE=BAND
Subdatasets:
  SUBDATASET_1_NAME=PDS4:b0011_p237201_01_01v02.xml:1:1
  SUBDATASET_1_DESC=Image file b0011_p237201_01_01v02.qub, array Spectral_Qube_Object
  SUBDATASET_2_NAME=PDS4:b0011_p237201_01_01v02.xml:1:2
  SUBDATASET_2_DESC=Image file b0011_p237201_01_01v02.qub, array iof_r2
  SUBDATASET_3_NAME=PDS4:b0011_p237201_01_01v02.xml:1:3
  SUBDATASET_3_DESC=Image file b0011_p237201_01_01v02.qub, array iof_r7
  SUBDATASET_4_NAME=PDS4:b0011_p237201_01_01v02.xml:1:4
[...]
  SUBDATASET_16_DESC=Image file b0011_p237201_01_01v02.qub, array emission_angle
  SUBDATASET_17_NAME=PDS4:b0011_p237201_01_01v02.xml:1:17
  SUBDATASET_17_DESC=Image file b0011_p237201_01_01v02.qub, array phase_angle
  SUBDATASET_18_NAME=PDS4:b0011_p237201_01_01v02.xml:1:18
  SUBDATASET_18_DESC=Image file b0011_p237201_01_01v02.qub, array approx_incidence_angle
  SUBDATASET_19_NAME=PDS4:b0011_p237201_01_01v02.xml:1:19
  SUBDATASET_19_DESC=Image file b0011_p237201_01_01v02.qub, array approx_emission_angle
  SUBDATASET_20_NAME=PDS4:b0011_p237201_01_01v02.xml:1:20
  SUBDATASET_20_DESC=Image file b0011_p237201_01_01v02.qub, array approx_phase_angle
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  512.0)
Upper Right (  512.0,    0.0)
Lower Right (  512.0,  512.0)
Center      (  256.0,  256.0)
Band 1 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.146998785514825,   Scale:4.48823844390647e-06
Band 2 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.146998785514825,   Scale:4.48823844390647e-06
Band 3 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.146998785514825,   Scale:4.48823844390647e-06
Band 4 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.146998785514825,   Scale:4.48823844390647e-06
Band 5 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.146998785514825,   Scale:4.48823844390647e-06

默认情况下显示的信息是第一个子数据集之一(子数据集名称)

获取子数据集的信息:

$ gdalinfo PDS4:b0011_p237201_01_01v02.xml:1:2

Driver: PDS4/NASA Planetary Data System 4
Files: b0011_p237201_01_01v02.xml
       b0011_p237201_01_01v02.qub
Size is 512, 512
Coordinate System is `'
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  512.0)
Upper Right (  512.0,    0.0)
Lower Right (  512.0,  512.0)
Center      (  256.0,  256.0)
Band 1 Block=512x1 Type=Int16, ColorInterp=Undefined
  Offset: 0.04984971,   Scale:7.454028e-06

转换为给定子数据集的GeoTIFF:

$ gdal_translate PDS4:b0011_p237201_01_01v02.xml:1:2 iof_r2.tif

转换为所有子数据集的GeoTIFF:

$ gdal_translate -sds b0011_p237201_01_01v02.xml b0011_p237201_01_01v02.tif

这将创建b011_p237201_01_01v02_X.tif文件,其中X=1,…,N

使用默认模板创建新的PDS4数据集并设置其参数化变量:

$ gdal_translate input.tif output.xml -of PDS4 \
            -co VAR_TARGET_TYPE=Satellite \
            -co VAR_Target=Moon \
            -co VAR_OBSERVING_SYSTEM_NAME=LOLA \
            -co VAR_LOGICAL_IDENTIFIER=Lunar_LRO_LOLA_DEM_Global_64ppd.tif \
            -co VAR_TITLE="LRO LOLA Digital Elevation Model (DEM) 64ppd" \
            -co VAR_INVESTIGATION_AREA_NAME="Lunar Reconnaissance Orbiter" \
            -co VAR_INVESTIGATION_AREA_LID_REFERENCE="urn:nasa:pds:context:instrument_host:spacecraft.lro"

创建与上面相同的PDS4数据集,使用默认模板,但从文本文件设置其参数化变量。有助于长命令行:

创建包含以下内容的文本文件“myOptions.txt”

#This is a comment
#Conversion parameters for the LRO LOLA dataset
-co VAR_TARGET_TYPE=Satellite
-co VAR_Target=Moon
-co VAR_OBSERVING_SYSTEM_NAME=LOLA
-co VAR_LOGICAL_IDENTIFIER=Lunar_LRO_LOLA_DEM_Global_64ppd.tif
-co VAR_TITLE="LRO LOLA Digital Elevation Model (DEM) 64ppd"
-co VAR_INVESTIGATION_AREA_NAME="Lunar Reconnaissance Orbiter"
-co VAR_INVESTIGATION_AREA_LID_REFERENCE="urn:nasa:pds:context:instrument_host:spacecraft.lro"
#end of file
gdal_translate input.tif output.xml -of PDS4 --optfile myOptions.txt

有关--optfile的更多信息,请参阅 the general documentation on GDAL utilities .

使用非默认模板创建PDS4数据集(在HTTP服务器上,但也可以使用本地文件名):

$ gdal_translate input.tif output.xml -of PDS4 \
            -co TEMPLATE=http://example.com/mytemplate.xml

从源PDS4数据集创建PDS4数据集(使用此源PDS4数据集的XML文件作为隐式模板),其子设置为:

$ gdal_translate input.xml output.xml -of PDS4 -projwin ullx ully lrx lry

在Python语言中,从GeoTIFF创建PDS4数据集,使用一个基本模板,其中一个用新值替换一个元素:

from osgeo import gdal
from lxml import etree

# Customization of template
template = open('template.xml','rb').read()
root = etree.XML(template)
ns = '{http://pds.nasa.gov/pds4/pds/v1}'
identifier = root.find(".//{ns}Identification_Area/{ns}logical_identifier".format(ns = ns))
identifier.text = 'new_identifier'

# Serialize the modified template in a in-memory file
in_memory_template = '/vsimem/template.xml'
gdal.FileFromMemBuffer(in_memory_template, etree.tostring(root))

# Create the output dataset
gdal.Translate('out.xml', 'in.tif', format = 'PDS4',
               creationOptions = ['TEMPLATE='+in_memory_template])

# Cleanup
gdal.Unlink(in_memory_template)

将新图像(子数据集)附加到现有PDS4数据集。

$ gdal_translate new_image.tif existing_output.xml -of PDS4 \
                      -co APPEND_SUBDATASET=YES \
                      -co ARRAY_IDENTIFIER=my_new_image

向现有ISIS3数据集添加PDS4标签。(GDAL>=3.1)

$ gdal_translate dataset.cub dataset.xml -of PDS4 -co CREATE_LABEL_ONLY=YES

PDS4矢量示例

使用表显示PDS4数据集的内容:

$ ogrinfo -al my_pds4.xml

通过指定包含经度和纬度的列,将带有表的PDS4数据集转换为shapefile:

$ ogr2ogr out.shp my_pds4.xml -oo LAT=my_lat_column -oo LONG=my_long_column

将shapefile转换为具有CSV分隔表的PDS4数据集(使用隐式WKT列存储几何图形):

$ ogr2ogr my_out_pds4.xml in.shp

局限性

作为一个新的驱动程序和新的格式,请向bug跟踪器报告任何问题,如 wiki

参见: