PostGISで部分3Dフィーチャをどのように扱いますか?


10

部分的な3D情報を含む調査データの機能があります。

最も一般的な例は、道路を表す2D LineStringで、測量された特定のポイントの標高情報が含まれています。その他の例としては、屋根の形状-いくつかのキーポイントに建築計画からの標高が割り当てられているが、すべてではないMultiLineStringが含まれます。

PostGISを使用して、補間された情報を失ったり生成したりすることなく、可能な限りアクセス可能に保つために、この種の情報を格納するためにどのデータモデルを推奨しますか?


標高が含まれている道路を表す2DのLineString、 -ので、3Dである-あなたのデータのために使用ST_Force_3D - postgis.refractions.net/documentation/manual-1.5SVN/...
Mapperz

0 z座標は正しくなく、データソースと同じ値を表していません。ST_Force_3Dは機能しません。アイデアは、データソースとデータベース間の正しい双方向マッピングを可能にすることです。
2012

回答:


2

非測定Z値をとして保存できます'nan'::float8。例えば:

SELECT ST_AsText(g), ST_X(g), ST_Y(g), ST_Z(g), ST_Z(g) <> 'nan'::float8 AS has_z
FROM (
  SELECT ST_MakePoint(1, 2, 'nan'::float8) AS g
  UNION SELECT ST_MakePoint(4, 5, 6) AS g
) AS f;

       st_astext       | st_x | st_y | st_z | has_z
-----------------------+------+------+------+-------
 POINT Z (1 2 1.#QNAN) |    1 |    2 |  NaN | f
 POINT Z (4 5 6)       |    4 |    5 |    6 | t
(2 rows)

ただし、NaN値は常にソフトウェア開発者によってテストまたは処理されるとは限らないため、問題が発生する可能性があります。たとえば、PostGISは上記のWKTバージョンを解析できません

SELECT 'POINT Z (1 2 1.#QNAN)'::geometry;

ERROR:  parse error - invalid geometry
LINE 1: SELECT 'POINT Z (1 2 1.#QNAN)'::geometry;
               ^
HINT:  "POINT Z (1 2 1.#Q" <-- parse error at position 17 within geometry

1

3次元のセカンダリジオメトリ列を作成して、3座標(triple)の値を持つ折れ線の頂点を保持します。このスキーマが機能するためには、以下の前提が想定されています。

  • ラインストリングは有効であり、重複したポイントは含まれていません
  • ジオメトリは線ストリングです
  • セカンダリジオメトリ列に格納できるようにするには、特定のジオメトリへの3D座標を持つ少なくとも2つの頂点が必要です
  • トリガーは、セカンダリジオメトリ列を埋めてACIDを維持します。

有効なジオメトリは、ラインストリング内の重複したポイントや自己交差を許可しないのに十分なものでなければなりません。したがって、各座標は、ソースジオメトリの頂点を識別するための基本的なキーのように動作します。

これはリレーショナルモデルからも正しいです。

  • 冗長性はなく、情報のない頂点はセカンダリジオメトリ列に表示されませんでした
  • ソースデータの変更は、トリガーによって派生データに反映されます。
  • 真実と見なされる情報のみがデータベースに保存され、人工的なデータは作成されません。

複数折れ線の場合、複合主キーを持つ追加のテーブルが必要になるため、状況は少し難しくなる可能性があります。

  • ソースジオメトリの行ID(gid、一意の識別子)
  • 区間[1-N]内にあることを確認する必要がある、指定されたMultiGeometry内のgeometryN位置
  • 関連テーブルrowid(gid)の前のキー
  • 間隔が有効であることを確認するためのトリガー/チェック機能

上記の主キーは、特定のジオメトリの重複したジオメトリインデックスの挿入を防ぎます。トリガー/チェックは無効なインデックスを防ぎます。また、ここの行は、外部キーを指定したソースデータからのものである必要があります。以前のすべてのルールが適用されます。

単純化は、追加の列ではなく種類のジオメトリではなく、配列として宣言された同じタイプのZ値の使用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.