PostGIS Reference

Geometry / Geography / Box Types유형

이 장에서는PostGIS에 의해 설치된PostgreSQL의 데이터유형과 캐스팅 동작에 대해 알아본다.

(※캐스팅이란 현재 유형을 다른 유형으로 강제 변환하는 때를 말한다.)

함수명 설명
box2d xmin, ymin, xmax, ymax로 구성된 박스. Geometry또는Geometry컬렉션의2차원공간범위를 반환하는데 주로 사용 한다.
box3d xmin, ymin, zmin, xmax, ymax, zmax로 구성된 박스. Geometry또는Geometry컬렉션의3차원공간범위를 반환하는데 주로사용 한다.
Geometry 평면 좌표계중심(Planar)공간 데이터유형.
Geometry_dump 두 개의 필드를 가진 공간데이터유형–geom(Geometry객체Contain)및path[ ](덤프된 객체내Geometry의 위치를 유지하는1차원배열).
geography 타원체중심(Ellipsoidal)공간 데이터유형.

※Geometry/Geography/Box유형과 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#PostGIS_Types

관리함수

함수명 설명/ 사용방법
AddGeometryColumn 기존 속성테이블에Geometry컬럼을 추가한다.
AddGeometryColumnvarchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);
DropGeometryColumn 공간테이블에서Geometry컬럼을 제거한다.
DropGeometryColumn(varchar table_name, varchar column_name);
DropGeometryTable 테이블 및Geometry_columns의 모든 참조를 삭제한다.
DropGeometryTable(varchar table_name);
UpdateGeometrySRID Geometry컬럼, Geometry_columns메타 데이터 및SRID를 대상으로 모든 피처들의SRID를 갱신한다.만약 제약조건으로 설정된 경우 새SRID제약조건으로 갱신되고,유형정의로 설정된 경우 유형정의가 변경 된다.
UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid);
PostGIS_Full_Version PostGIS버전과빌드환경정보를반환합니다.
PostGIS_Full_Version();

테이블의 Geometry컬럼을 추가하거나, 삭제, 수정하는 함수와 PostGIS 정보를 보여주는 주요 관리함수들이 있다.

※SRID(Spatial Reference Identifier) :지도 투영시 특정 타원면을 기준으로 하는 공간 참조 시스템

※관리함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Management_Functions

Geometry생성자

지정된WKB, WKT등 좌표정보를 사용하여Geometry객체, LineString, Point등의 지리정보 객체를 생성하는 주요 생성자 함수들을 정의한다.

※PostGIS명세서는 공간오브젝트들을 나타내는 두 가지 표준방법을 정의한다

함수명 설명/ 사용 방법
ST_LineFromMultiPoint MultiPoint Geometry에서LineString을 생성한다.
ST_LineFromMultiPoint(geometry aMultiPoint);
ST_LineFromText 지정된SRID및WKT에서LineStringGeometry를 생성한다. SRID가 지정되지 않은 경우–1을 기본 값으로 사용한다.
ST_LineFromText(text WKT, integer srid);
ST_LineFromWKB 지정된SRID및WKB에서LineString을 생성한다.
ST_LineFromWKB(bytea WKB, integer srid);
ST_MakeLine Point또는LineGeometry를 이용하여LineString을 생성한다.
ST_MakeLine(geometry set geoms);
ST_MakePolygon 주어진 쉘(Shell)로 구성된Polygon을 생성한다.입력Geometry는 닫힌LineString이어야한다.
ST_MakePolygon(geometry linestring);
ST_MakePoint X,Y,Z,M등의 값을 이용하여2D, 3DZ또는4DPointGeometry를 생성한다.
ST_MakePoint(double precision x, double precision y);

: Well – KnownText (WKT)형태와 Well – KnownBinary(WKB)형태. WKT와 WKB 모두 오브젝트 타입과 오브젝트를 구성하는 좌표들에 대한 정보를 포함하고 있다.

※생성자 함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Geometry_Constructors

Geometry접근자

Geometry의 기하학적 정보나,메타정보 등 원하는Geometry의 정보를 확인할 수 있는 주요 접근자 함수.

함수명 설명/ 사용방법
GeometryType Geometry의 유형을 문자열로 반환 한다.예: 'LINESTRING', 'POLYGON','MULTIPOINT'등.
GeometryType(geometry geomA);
ST_Boundary 주어진Geometry에 대한 폐쇄된 조합경계를 반환한다.
ST_Boundary(geometry geomA);
ST_IsClosed LineString의 시작점과 끝점이 일치하는 경우TRUE를 반환한다.
ST_IsClosed(geometry g);
ST_NDims Geometry의 좌표차수(XY는2,XYZ는3등)를 정수(smallint)값으로 반환한다.
ST_NDims(geometry g1);
ST_NPoints Geometry를 구성하는 점(정점)의 개수를 반환한다.
ST_NPoints(geometry g1);

※접근자함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Geometry_Accessors

Geometry편집기

Geometry의 기하학적 위치나,모양을 수식이나 좌표를 이용해 변형 시키는 편집기 주요 함수들을 정의한다.

함수명 설명/ 사용 방법
ST_Reverse 정점순서가 역으로 구성된Geometry를 반환한다.
ST_Reverse(geometry g1);
ST_Rotate 원점축을 기준으로 시계 반대방향으로rotRadians(라디안단위의회전각도)만큼을 회전한Geometry를 반환한다.
ST_Rotate(geometry geomA, float rotRadians);
ST_Scale 매개변수와 원본Geometry의 좌표값을 곱하여 새로운 크기의Geometry를 생성 후 반환 한다.예:ST_Scale(geom,Xfactor,Yfactor,Zfactor).
ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);
ST_SetSRID 지정된 정수값(SRID코드)으로Geometry의SRID를 설정한다.
ST_SetSRID(geometry geom, integer srid);

※편집기 함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Geometry_Editors

Geometry출력

객체로부터SRID를 비롯한 정보를 지정포맷(GeoJSON, GML, WKT등)으로 반환하는 주요 출력함수들을 정의한다.

함수명 설명/ 사용 방법
ST_AsEWKB Geometry/Geography객체를SRID메타데이터를Contain한Well-KnownBinary(WKB)포맷으로 반환 한다.
ST_AsEWKB(geometry g1, text NDR_or_XDR);
ST_AsEWKT Geometry를SRID메타데이터를Contain한Well-KnownText(WKT)포맷으로 반환 한다.
ST_AsEWKT(geography g1);, ST_AsEWKT(geometry g1);
ST_AsGeoJSON Geometry를GeoJSON(GeometryJavascriptObjectNotation)포맷으로 반환한다.옵션 매개변수를 이용하여GeoJSON의 버전, CRS표시유형 및 소수점최대자리 수(기본값15)등을 설정할 수 있다.
ST_AsGeoJSON(integer gj_version, geography geog, integer maxdecimaldigits=15, integer options=0);
ST_AsGML Geometry를GML(GeographyMarkupLanguage)버전2(2.1.2,기본값)또는 버전3(3.1.1)포맷으로 반환한다.옵션매개변수를 이용하여GML의 버전, CRS표시유형 및 소수점최대 자리수(기본값15)등을 설정할 수 있다.
ST_AsGML(integer version, geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null);

출력함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Geometry_Outputs

공간 관계와 측정

함수명 설명/ 사용 방법
ST_Area Geometry가Polygon또는MultiPolygon인 경우 표면의 면적을 반환한다.
ST_Area(geography geog, boolean use_spheroid=true);
ST_Contains AGeometry외부에BGeometry의 어떤 점도 놓여있지 않거나,적어도BGeometry내부에서 하나의 점만이AGeometry내부에 놓여있을 때TRUE를 반환한다.
ST_Contains(geometry geomA, geometry geomB);
ST_Covers BGeometry의 어떤 점도AGeometry의 외부에 있지 않을 때TRUE를 반환한다.
ST_Covers(geography geogpolyA, geography geogpointB);
ST_Crosses 제공된Geometry가 공통의 내부(interior)점들을 일부(전부는 아닌)가 지고 있을 경우TRUE를 반환한다.
ST_Crosses(geometry g1, geometry g2);
ST_Touches 두Geometry간에 최소한 하나의 공통된Point를 가지고 있으나 그들의 내부(Interior)들이 서로교차하지 않는 경우TRUE를 반환한다.
ST_Touches(geometry g1, geometry g2);
ST_Distance Geometry유형에 대해서 두Geometry사이의2차원직교최단거리(공간좌표계를 기준으로 한 단위)를 반환한다. Geography유형에 대해서는 기본적으로 미터로 표현된 두Geography사이의 타원체 최단거리를 반환한다.
ST_Distance(geography gg1, geography gg2, boolean use_spheroid);
ST_Intersects Geometry/Geography객체가“2차원 상에서 공간적으로 교차”할 경우TRUE를 반환하고 그렇지 않을 경우(Disjoint)FALSE를 반환합니다
ST_Intersects( geometry geomA , geometry geomB );

공간정보에서 각 객체들의 측량적 정보와 객체들 간의 관계정보를 출력해준다.

※측정함수에 관련된 더 많은 정보를 보려면 다음 참조.

http://postgis.net/docs/manual-2.3/reference.html#Spatial_Relationships_Measurements

아래 그림은Contain관계에 관한 개념도이다.

그림1과 그림2는 각각 선과 폴리곤이 점을Contain하고 있지만,그림3은 선이 폴리곤의 경계를 넘어 가기 때문에Contain이라 말할 수 없다.그림4는 점 두 개중 하나만Contain하고 있다.

사용예제

Contain관계 확인

Point생성

Query창에ST_PointFromText를 사용해Point를 만든다.

•Geometry ST_PointFromText(text WKT);

•Geometry ST_PointFromText(text WKT, integer srid);

SELECT ST_PointFromText('POINT(5 5)');SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);

※SRID값을 넣어 주지 않으면–1로 기본 설정된다.

폴리곤 생성

ST_PolygonFromText을 사용해 폴리곤을 만들어 준다.

(※폴리곤은 폐합해야 한다.즉 시작점과 끝점은 같은 점이여야 한다.)

•Geometry ST_PolygonFromText(text WKT);

•Geometry ST_PolygonFromText(text WKT, integer srid);

SELECT ST_PolygonFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');

※SRID값을 넣어 주지 않으면–1로 기본 설정한다.

Contain관계 여부 확인

위에서 만든Point와 폴리곤의Contain여부를 알아보기 위해ST_Contains함수를 사용한다.

•boolean ST_Contains(Geometry geomA, Geometry geomB);

SQL입력 결과 값

폴리곤이Point를Contain하고 있기 때문에true값이 출력된 것을 확인할 수 있다.

거리 구하기

두 객체간의 거리를 구하기 위해서는ST_Distance를 사용해야 한다.

•float ST_Distance(Geometry g1, Geometry g2);

•float ST_Distance(geography gg1, geography gg2);

•float ST_Distance(geography gg1, geography gg2, boolean use_spheroid);

SQL입력 결과 값

타원체 상의 거리기 때문에 단위는degrees가 된다.

Touches관계 확인

두 객체간의Touches여부를 판단하기 위해ST_Touches를 사용한다.

•boolean ST_Touches(Geometry g1, Geometry g2);

SQL입력 결과 값

두Geometry간에(1, 1)이라는 공통점을 갖고 있으면서 서로 교차 하지 않아true값이 출력된다.

아래 그림은Touches했을 때의 상황별 그림이다.

results matching ""

    No results matching ""