Projecting data

Database/PostGIS 2009. 12. 29. 23:20

우리는 이미 measurement function들을 설명할 때 투영에 관한 개념에 대해 언급하였다. PostGIS가 투영된 좌표와 투영되지 않은 좌표(위경도) 모두에서 간단한 거리를 다룰 수 있는 함수를 가지고 있는 반면에, 좀 더 복잡한 요청, 예를 들면 면적이나, 점이 아닌 것들에 대한 거리는 투영에 대한 고려 없이 측정될 수 있다. 심지어 투영되지 않은 것의 길이를 재는 함수는 데이터가 측량 되어진 타원체에 대한 정보를 필요로 한다. 잘못된 절차는 불분명하고 오해의 소지가 있다.

우리는 어떻게 다음결과를 해석할 수 있을까?

이 경우 투영(SRID:2270)은 피트(feet) 단위이고, ST_Length함수의 결과도 역시 그와 같다. PostGIS는 투영이 수행하는 데에 필요로 하는 간단한 함수를 제공한다. 예를 들어 미터(m)단위의 거리는 ST_Transform을 통하여 지오메트리를 미터단위를 사용하는 투영법(SRID:2839)으로 변환하여 결정할 수 있다.

하지만 우리가 어떻게 첫 번째 장소의 투영법을 알았을까? 간단한 방법은 앞에 섹션에서도 봤듯이 geometry_columns 테이블을 살펴보는 것이다.

위의 방법은 대게 적절하지만 테이블 레코드 자체는 지오메트리에 geometry_columns테이블에 열거되어진 투영법의 srid(spatial reference ID)를 강요 받지는 않는다. 열거된 srid가 맞는지 확실하게 하기 위해서는 앞서 언급했던 AddGeometryColumns 함수를 이용하여 지오메트리 컬럼에 대해서 제약조건을 확인하는 것이다. 이 함수는 또한 지오메트리 타입과 좌표계의 차원을 확인하는 제약조건을 생성한다.

만약에 이런한 제약조건이 나타나지 않는다면, 마지막으로 지오메트리의 srid를 확인하는 방법이 있다; ST_SRID 함수를 이용에 바로 질의하는 것이다.

당신이 사용하고 있는 투영법이 일관성을 가지고 있는지 확인하는 것은 measurement 함수를 이용하는 것 이외에도 많은 이유가 있다. PostGIS는 일반적으로 결과 값이 의미 없는 값이 되는 다른 srid를 가지고 있는 지오메트리 간에 많은 함수를 사용하는 것을 단순하게 거절한다.

데이터가 로드되기 전에 srid가 세팅되지 않았는데 머하고 있는가? 그것이 잘못 설정된 것을 눈치 챘는가? 이 경우들에 대해서는 PostGIS가 ST_SetSRID 함수를 제공한다. 이 함수는 투영 과정 없이 지오메트리에 대해 srid를 선언하게 해준다.

위의 ST_SetSRID를 이용한 방법은 소규모 작업에 적합한 반면, 언제나 적합한 srid를 알 고 있기 때문에 데이터베이스를 업데이트 할 때는 UpdateGeometrySRID 함수를 이용한다. 이 함수는 테이블 이름과, 지오메트리 컬럼 이름, srid 값, 선택적으로 스키마(schema) 이름을 취하고, 테이블에 있는 모든 레코드를 새로운 srid로 갱신하고, 제약조건을 추가하고, geometry_columns 테이블 레코드를 추가한다.

 

Posted by 강부자아들
,