座標元期のサポート

Added in version 3.4.

ダイナミックCRSと座標元期

この文書は,ダイナミックCRSに関連する座標元期のサポートについて説明するものです.

ダイナミックCRSでは,地球表面上の点の座標は時間とともに変化する可能性があります.座標が明確であるためには,常に有効な元期で座標を修飾する必要があります.座標元期は,観測が収集された元期である必要はありません.

ダイナミックCRSの例には, WGS 84 (G1762), ITRF2014, ATRF2014 があります.

汎用EPSG:4326 WGS 84 CRSもダイナミックと見なされますが,その位置精度が2メートルであるデータムアンサンブルに基づいているため,使用をお勧めしません.代わりに, WGS 84 (G1762)などの実装しているものの1つを使用してください.

OGRSpatialReference::IsDynamic() メソッドを使用して,CRSがダイナミックかどうかをテストできます.

The OGRSpatialReference::SetCoordinateEpoch() and OGRSpatialReference::GetCoordinateEpoch() methods can be used to set/retrieve a coordinate epoch associated with a CRS. The coordinate epoch is expressed as a decimal year (e.g. 2021.3 for April 21, 2021).

形式的には,観測の座標元期は観測に属します.しかし,ほとんどの形式では観測ごとの元期を保存することはできず,典型的な使用法は同じ元期の観測のセットです.したがって,私たちは元期をCRSのプロパティとして保存し,それがすべての観測に有効であると仮定します.この選択は,ほとんどの使用法に対して処理,保存,形式の複雑さを緩和します.現時点では,異なる元期の観測や点を含むデータセットを処理することはできません.

ベクトル形式の場合,ジオメトリごとの座標元期も意味をなすことができますが,ほとんどの形式がレイヤーごとのCRSのみをサポートしているため,現時点ではレイヤーレベルでの座標元期のサポートを制限しています.基本となる座標変換メカニズムは,頂点ごとの座標元期をサポートできます.

ラスターおよびベクター形式でのサポート

執筆時点では,GDAL/OGRで処理される形式には,座標元期をエンコードする標準化された方法はありません.そのため,既存のリーダーとできるだけ後方互換性があるようにエンコード方法を選択しました.対応する公式仕様がこの概念を考慮に入れるように進化する場合,これらのエンコーディングは変更される可能性があります.座標元期は,作成されたレイヤー/データセットのSRSにアタッチされた場合にのみ書き込まれます.

FlatGeoBuf

座標元期は,FlatGeoBufファイルの Crs.wkt ヘッダーフィールドに設定された, COORDINATEMETADATA 構造の EPOCH サブノードを使用して,WKT:2019文字列としてエンコードされます.

COORDINATEMETADATA[
    GEOGCRS["WGS 84 (G1762)",
        DYNAMIC[FRAMEEPOCH[2005.0]],
        DATUM["World Geodetic System 1984 (G1762)",
          ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1.0]]
        ],
        CS[ellipsoidal,3],
          AXIS["(lat)",north,ANGLEUNIT["degree",0.0174532925199433]],
          AXIS["(lon)",east,ANGLEUNIT["degree",0.0174532925199433]],
          AXIS["ellipsoidal height (h)",up,LENGTHUNIT["metre",1.0]]
    ],
    EPOCH[2016.47]
]

注釈

このような構造は,GDAL < 3.4 では理解されませんが,CRSに関連付けられたEPSGコードがある場合,これは古いGDALバージョンで問題を引き起こしません.

GeoPackage vector/raster

座標元期が関連付けられている各ベクター/ラスターテーブルは,CRS WKT拡張の拡張バージョンを使用して, gpkg_spatial_ref_sys テーブルの epoch 列にエンコードされます(https://github.com/opengeospatial/geopackage/pull/600).

GeoTIFF

座標元期は,新しいGeoTIFF GeoKey, CoordinateEpochGeoKey (コード5120,タイプDOUBLE)としてエンコードされます.

Geotiff_Information:
   Version: 1
   Key_Revision: 1.0
   Tagged_Information:
      ModelTiepointTag (2,3):
         0                 0                 0
         440720            3751320           0
      ModelPixelScaleTag (1,3):
         60                60                0
      End_Of_Tags.
   Keyed_Information:
      GTModelTypeGeoKey (Short,1): ModelTypeProjected
      GTRasterTypeGeoKey (Short,1): RasterPixelIsArea
      GTCitationGeoKey (Ascii,22): "WGS 84 / UTM zone 11N"
      GeogCitationGeoKey (Ascii,7): "WGS 84"
      GeogAngularUnitsGeoKey (Short,1): Angular_Degree
      ProjectedCSTypeGeoKey (Short,1): PCS_WGS84_UTM_zone_11N
      ProjLinearUnitsGeoKey (Short,1): Linear_Meter
      CoordinateEpochGeoKey (Double,1): 2021.3
      End_Of_Keys.
   End_Of_Geotiff.

JPEG2000

GeoJP2ボックスは上記のGeoTIFFエンコーディングを使用します.

Persistent Auxiliary Metadata (.aux.xml)

座標元期は, SRS 要素の coordinateEpoch 属性としてエンコードされます.

<PAMDataset>
  <SRS dataAxisToSRSAxisMapping="1,2" coordinateEpoch="2021.3">PROJCS["WGS 84 / UTM zone 11N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32611"]]</SRS>
  <!-- snip -->
</PAMDataset>

GDAL VRT

座標元期は, SRS 要素の coordinateEpoch 属性としてエンコードされます.

<VRTDataset rasterXSize="20" rasterYSize="20">
  <SRS dataAxisToSRSAxisMapping="1,2" coordinateEpoch="2021.3">PROJCS["WGS 84 / UTM zone 11N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32611"]]</SRS>
  <!-- snip -->
</VRTDataset>

ユーティリティでのサポート

gdalinfo and ogrinfo report the coordinate epoch, when attached to a dataset/layer SRS.

gdal_edit.py has a -a_coord_epoch option to define the epoch of a dataset in place.

gdal_translate and ogr2ogr have a -a_coord_epoch option to be used together with -a_srs, and otherwise preserve the coordinate epoch in the output SRS from the source SRS when no SRS related options are specified.

gdalwarp and ogr2ogr have a -s_coord_epoch option to be used together with -s_srs (resp. -t_coord_epoch option to be used together with -t_srs) to override/set the coordinate epoch of the source (resp. target) CRS.

PROJ 9.4以前では,2つのダイナミックCRS間の変換をサポートしていなかったため, -s_coord_epoch-t_coord_epoch は相互に排他的でした.

gdalwarp は適切な場合に出力SRSに座標元期を保持します.

座標変換でのサポート

The OGRCoordinateTransformation class can perform time-dependent transformations between a static and dynamic CRS based on the coordinate epoch passed per vertex.

静的CRSとダイナミックCRS間の時間依存変換を行う際に,ダイナミックCRSに関連付けられた座標元期を考慮することもできます. OGR_CT_USE_SRS_COORDINATE_EPOCH 構成オプションを NO に設定して,ソースまたはターゲットCRSに関連付けられた座標元期を使用しないようにすることができます.

頂点ごとの時間が指定されている場合,それはCRSに関連付けられた時間を上書きします.