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는 작동하지 않습니다. 아이디어는 데이터 소스와 데이터베이스간에 올바른 양방향 맵핑을 가질 수 있도록하는 것입니다.
relet

답변:


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 차원 (triple) 값을 가진 선 스트링의 꼭지점을 유지하기 위해 3 차원으로 보조 형상 열을 작성하십시오. 이 스키마가 작동하려면 다음 가정이 가정됩니다.

  • 선 스트링이 유효하고 중복 된 점이 포함되어 있지 않습니다
  • 도형은 선 스트링입니다
  • 주어진 지오메트리에 3D 좌표를 가진 2 개 이상의 꼭짓점이 있어야 2 차 지오메트리 열에 저장 될 수 있습니다.
  • 트리거는 보조 형상 열을 채워 ACID를 유지합니다.

지오메트리가 유효하면 선 스트링에서 중복 된 점을 허용하지 않고 자체 교차점이 없어야합니다. 따라서 각 좌표는 소스 지오메트리의 꼭짓점을 식별하는 입문서 키처럼 동작합니다.

이것은 관계형 모델에서도 정확합니다.

  • 정보가없는 정점은 보조 지오메트리 열에 나타나지 않습니다.
  • 소스 데이터의 변경 사항은 트리거에 의해 파생 데이터로 전파됩니다.
  • 진실로 간주되는 정보 만 데이터베이스에 저장되며 인공 데이터는 생성되지 않습니다.

다중 줄 문자열의 경우 복합 기본 키가있는 추가 테이블이 있어야하기 때문에 상황이 약간 어려울 수 있습니다.

  • 소스 지오메트리의 rowid (gid, 고유 식별자)
  • 주어진 MultiGeometry 내부의 geometryN 위치는 간격 [1-N] 내에 있는지 확인해야합니다.
  • 관련 테이블 rowid (gid)의 선행 키
  • 간격이 유효한지 확인하는 트리거 / 확인 기능

위의 기본 키는 주어진 지오메트리에 대해 중복 지오메트리 인덱스를 삽입하지 못하게합니다. 트리거 / 체크는 유효하지 않은 인덱스를 방지합니다. 또한 여기의 행은 외래 키가 제공된 소스 데이터에서 가져와야합니다. 이전의 모든 규칙이 적용됩니다.

단순화는 추가 열을 사용하지만 종류의 기하학은 아니지만 배열로 선언 된 동일한 유형의 Z 값을 사용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.