GIS

Postgis 공간함수

journey-dev 2023. 5. 22. 16:16

✔️ ST_Astext

공간 데이터를 텍스트 형태로 표현해주는 것 

예를들면, 011111000021354 이런 geometry 데이터를 우리가 보는 geom 정보(POLYGON)로 바꿔줌 

ST_Astext(geom) * from table -- 011111000021354 
-- return : MULTILINESTRING M ((209238.497 / 533566.9 / 43.007, 209259.89 / 533566.9 / 43.105))

SELECT ST_AsText('0103000000010000000500000000000400000'); -- POLYGON((0 0,0 1,1 1,1 0,0 0))

 

 

✔️ st_makePoint

x,y,z 좌표를 이용해 포인트 생성

ST_GeomFromText and ST_PointFromText 보다 빠르고 더 정확하다.

형태
geometry ST_MakePoint(float x, float y);
geometry ST_MakePoint(float x, float y, float z);
geometry ST_MakePoint(float x, float y, float z, float m);

사용예제
select st_makePoint(203668,525737) -- 010100000000000000A0DC084100000000520B2041

 

✔️ st_union

 geometry가 결합된 지오메트리를 반환 (두 geom 정보를 합치는 함수)

// 기본형태 
geometry ST_Union(geometry g1, geometry g2);
geometry ST_Union(geometry g1, geometry g2, float8 gridSize);

// 사용
select st_union(st_makePoint(203668,525737),st_makePoint(216991,549062)) 
-- 0123453... // MULTIPOINT(203668 525737,216991 549062) point 두개 생김

  • x,y 좌표값으로 포인트를 만들어 결합한 후 범위를 구하는 예제
select st_extent(st_union(st_makePoint(x,y),st_makePoint(x,y))) 
-- 결과: "BOX(205000 216000,216000 549000)"

✔️ st_extent

도형 집합을 묶는 box2d 경계 상자를 반환하는 집계 함수입니다.

select st_extent(0100000021000...);
-- BOX(203668 525737,216991 549062)

 

✔️ st_setSrid

좌표계를 해당 srid로 변환하는 함수

// 기본형태
ST_SetSRID(geom, srid)
st_setSrid(좌표계 정보가 포함되어 있는 geometry 데이터, 변환할 좌표숫자) 

// 사용
 select st_setSrid(BOX(203668 525737,216991 549062),5186); -- 010300002042140000010000

 

✔️ st_intersects

 두 Geometry가 교차하는지 여부를 판별

true, false로 반환

// 기본형태
st_intersects(geometry1, geometry2) 

// 사용
select st_intersects(
	st_setSrid((select geom from gis_lines where link_id = 50720),5186), 
	st_setSrid(st_extent(st_union(st_makePoint(203668,525737),st_makePoint(216991,549062))),5186)
); -- true

 

✔️ ST_Dump

MultiPolygon, MultiLineString 처럼 복합적인 공간 데이터 객체를 각각 풀어서 단순 객체로 분할하는 기능

 

예를들면, MultiLineString 객체를 개별 LineString 로 변환한다.

ST_ASTEXT(geom) -- "MULTILINESTRING M ((206709.525 532442.908 74.578 , 206709.435 532443.179 74.588))"

-- 개별 객체로 변환
ST_Dump(geom).geom  --"LINESTRING M (206709.525 532442.908 74.578,206709.435 532443.179 74.588)"

 

✔️ ST_EndPoint

LineString(선) 또는 MultiLineString(다중선) 객체의 끝점을 반환함.

해당 객체의 끝점을 나타내는 점(Point) 객체로 반환하여 객체의 끝점을 반환하는 것임

(LineString은 점들로 이루어진 선분이고, MultiLineString은 여러 개의 선분으로 이루어진 객체)

 

- 형식

ST_EndPoint(geometry) -- geometry : LineString, MultiLineString

- 예시

ST_EndPoint (LINESTRING(1 1, 2 2, 3 3)) --  이 객체의 끝점을 나타내는 Point(3, 3)을 반환

 

✔️ ST_StartPoint

ST_EndPoint의 반대

 

 

✔️ ST_Azimuth
두 개의 점(Point) 사이의 방위각(Azimuth)(방향)을 계산하거나 선분의 방향을 파악하는 데 사용됨
방위각은 한 점에서 다른 점까지의 방향을 나타내는 각도로 표현됨
도(degree) 단위로 표

- 형식

ST_Azimuth(point1, point2) -- point1에서 point2로 향하는 방향의 각도를 계산하여 반환

 


https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/ST_MakePoint-function.html

https://postgis.net/docs/reference.html#Geometry_Constructors