GeoPackage

Spectrum Spatial は、Windows および Linux 向けの GeoPackage データ プロバイダをサポートします。GeoPackage は SQLite データベース テクノロジに対する空間拡張です。GeoPackage 規格は、複数のテーブル、それらの関係、および関連メタデータを自己完結した形で 1 つのファイル内に含めることができ、OGC によって採用されました。これは、大規模なデータセットや、MapInfo Professional における文字セットやデータ サイズの制限事項を回避する場合に有用です。

Spectrum Spatial では、GeoPackage を読み取り/書き込み用データ ソースとして扱います。

GeoPackage 仕様に対する準拠

Spectrum Spatial における GeoPackage のサポートは、できる限り OGC 仕様に準拠するように設計されています。しかし、(読み取り、書き込み、作成のいずれかに対して) これをサポートする他の実装は、完全には準拠していない可能性があります。

Spectrum Spatial は、次の場合に GeoPackage テーブルに準拠しているとみなします。

  • OGC 仕様の Requirement 10 に規定されている gpkg_spatial_ref_sys テーブルを含む
  • Requirement 13 に規定されている gpkg_contents テーブルを含む
  • ベクトル フィーチャを含むテーブルまたは更新可能ビューを含み、そのフィーチャ テーブルまたはビューに、Requirement 29 に規定されている PRIMARY KEY AUTOINCREMENT 付きの列タイプ INTEGER が存在するhttp://www.geopackage.org/spec/#feature_user_tables
  • Requirement 70、71 および 72 に規定されている、フィーチャ テーブル ジオメトリ列に対する空間インデックスが実装されている
    注: RTree インデックスは必須ではありませんが、パフォーマンスに問題が生じるのを防ぐため使用することを推奨します。

GeoPackage 内のデータへのアクセス

GeoPackage ファイルは、.gpkg という拡張子を持ち、本質的にはテーブルが含まれているデータベースです。Spectrum Spatial で GeoPackage データにアクセスするには、Spectrum Spatial™ Manager を使用してファイルシステムの名前付き接続を作成します。TAB およびシェイプファイルの場合と同様、GeoPackage ファイルへの接続はパスです。接続の作成が済むと、その接続を使用する名前付きテーブルを作成できます。GeoPackage 名前付きテーブルは、その他すべてのデータ プロバイダの名前付きテーブルと同じように使用します。GeoPackage テーブルには、Spectrum Spatial で使用するために空間インデックスが含まれている必要があります。GeoPackage のサンプル データは、リポジトリ (WorldGeoPackageTable) 内の /Samples/NamedTables フォルダに用意されています。Map Uploader の古いバージョン (16.0 より前のバージョンの MapInfo Pro 用) は、GeoPackage をサポートしていません。GeoPackage データベースを開くには、GeoPackage ファイルの親フォルダに対する読み取りと書き込みの両方の権限が必要です。

サポートされるデータ タイプ

GeoPackage データ ソース プロバイダは、非空間 JDBC タイプを Spectrum Spatial のタイプ システムにマップするとき、汎用 JDBC と同じルールに従います。gpkg_geometry_columns テーブルでは、空間列の名前および座標系が調べられます。

geometry および geography データ タイプは空間データであり、Spectrum Spatial でサポートされるデータ タイプの Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、および GeometryCollection と同等です。

プライマリ キー

GeoPackage 仕様により、プライマリ キーとして機能するテーブル内の列が識別されます。この列は、自動インクリメント列であるため、読み取り専用としてマーク付けされます。

挿入、更新および削除のサポート

挿入、更新、および削除の操作が、GeoPackage データ ソース プロバイダでサポートされています。SQLite の Write Ahead Logging (WAL) ジャーナル モードは、GeoPackage に対する読み取りと書き込みの同時処理を可能にするために使用されます。ただし、以下の制限事項があります。

  • データベースを使用するすべてのプロセスは、同じホスト コンピュータ上にあること。WAL はネットワーク ファイル システム上では機能しません。
  • 読み取り専用で WAL データベースを開くことはできません。開いているプロセスが、データベースに関連付けられた "-shm" wal-index 共有メモリ ファイルへの書き込み権限を持つこと (このファイルが存在する場合)。または、このファイルが存在しない場合は、データベース ファイルが配置されているディレクトリへの書き込みアクセスが可能なこと。

WAL の利点と制限事項を含め、詳細については http://www.sqlite.org/wal.html を参照してください。

MI SQL の最適化

GeoPackage では、汎用 JDBC データ ソース プロバイダと同じ非空間関数および非空間演算子に加えて、空間演算子 EnvelopesIntersect がサポートされています。

詳細については、付録のデータ ソース プロバイダへの委任を参照してください。

可変性

GeoPackage の場合は、列の追加または削除や、列のインデックスの変更など、テーブルのスキーマに対する任意の変更が、可変性にあたります。これが変更されている場合、Spectrum Spatial はデータ アクセス操作に進む前に、テーブルのメタデータをキャッシュからフラッシュし、再度読み込みます。詳細については、データ ソースの可変性を参照してください。

GeoPackage と MAPINFO_MAPCATALOG

Spectrum Spatial の GeoPackage データ プロバイダでは、MAPINFO_MAPCATALOG を使用しません。これは以下のことを意味します。
  • GeoPackage テーブルから読み取ったジオメトリは、スタイルを持たず、マップには白黒のレイヤとしてレンダリングされます。スタイルが必要な場合は、オーバーライド主題図を使用します。
  • XY テーブルを GeoPackage テーブルから作成することはできません。XY テーブルを SQLite データベース内のテーブルから作成するには、汎用の JDBC ベースの名前付きテーブルを作成します。例えば、接続の作成 の説明に従って、jdbc:sqlite:c:\data\sample.gpkg のような文字列を使って Spectrum Spatial™ Manager に接続を作成します。次に、XY テーブルの作成 の説明に従って、XY テーブルを作成します。

座標系のサポート

GeoPackage は、SRID が -1 の場合にカルテシアン空間参照系 (SRS) をサポートし、SRID が 0 の場合に地理 SRS をサポートします。GeoPackage テーブルの SRID が -1 の場合は、名前付きテーブルの中で列ヒントを使用して、カルテシアン SRS を定義します。SRID が 0 の場合は、列ヒントを使用して地理 SRS を定義します。これらの列ヒントが設定されていなかったり、誤って設定されていたりすると、例外が発生します。これらの列ヒントは、名前付きテーブル定義に手動で追加する必要があります。WebDAV またはテキスト エディタを使用して、属性 <DBDataSourceMetadata> を XML ファイルに追加します。

カルテシアン SRS の場合:

<DBDataSourceMetadata>
  <FeatureGeometryAttribute srsName="epsg:3857">geom</FeatureGeometryAttribute>
</DBDataSourceMetadata>
地理 SRS の場合:
<DBDataSourceMetadata>
  <FeatureGeometryAttribute srsName="epsg:4326">geom</FeatureGeometryAttribute>
</DBDataSourceMetadata