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했을 때의 상황별 그림이다.
![]() |
![]() |
![]() |
![]() |
---|---|---|---|