개발공작소
article thumbnail
728x90
반응형

 

 

 

 

다음과 같이 X, Y 좌표를 가지는 테이블이 있다고 가정해보자.

 

샘플 테이블

 

어떤 시스템에서 데이터를 가져오는데, 공간정보는 없고, X,Y 좌표만 있다고 하면 우리가 해당 데이터를 가지고

공간정보를 만들어야 한다. 오늘은 그 방법에 대해 정리 해보겠다. 연습은 아래 샘플 테이블로 하도록 하자.

( PostGIS 확장자 설치 되어 있어야함! )

 

 

샘플 테이블 생성 및 데이터 적재

-- PostGIS 확장자 설치
CREATE EXTENSION postgis;

-- 샘플테이블 생성
CREATE TABLE PUBLIC.geo_table (
	geo_no varchar(14) NOT NULL,
	geo_nm varchar(100) NULL,
	addr_sido varchar(20) NULL,
	addr_gugun varchar(20) NULL,
	addr_dong varchar(50) NULL,
	xcode varchar(100) NULL,
	ycode varchar(100) NULL
);


-- 샘플테이블 데이터 적재
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('15', '대성베르힐리오파크 106', '서울특별시', '구로구', '대성베르힐리오파크', '127.58905125082998', '36.78983346099841');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('16', '드림플러스', '서울특별시', '관악구', '드림플러스', '127.43123654205627', '36.78983346099841
36.62615582197773');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('1', '(주)소노홀텔앤리조트', '서울특별시', '대림', '(주)소노홀텔앤리조트', '128.36234696399788', '36.977866164617126');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('2', '주공4-1아파트', '서울특별시', '관악구', '분평동 주공4차아파트', '127.49420805409716', '36.609898854112615');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('3', '주공4-2아파트', '서울특별시', '관악구', '분평동 주공4차아파트', '127.49420805409716', '36.609898854112615');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('4', '주공4-3아파트', '서울특별시', '봉천동', '1순환로1137번길', '127.49420805409716', '36.609898854112615');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('5', '홈플러스(상)', '서울특별시', '신림동', '홈플러스', '127.87105975040316', '36.965595221481706');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('6', '이마트(하)', '서울특별시', '신림동', '이마트', '127.87105975040316', '36.965595221481706');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('7', '분평주공4-2아파트404동', '서울특별시', '관악구', '분평동 주공4차아파트', '127.49420805409716', '36.609898854112615');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('8', '호수마을아파트102동', '서울특별시', '신림동', '호수마을아파트', '127.92470314637387', '36.967199228568184');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('9', '호수마을아파트103동', '서울특별시', '신림동', '호수마을아파트', '127.92470314637387', '36.967199228568184');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('10', '호수마을아파트101동', '서울특별시', '신림동', '호수마을아파트', '127.92470314637387', '36.967199228568184');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('11', '분평주공4-2아파트402동', '서울특별시', '관악구', '분평동 주공4차아파트', '127.49420805409716', '36.609898854112615');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('12', '대성베르힐리오파크 101', '서울특별시', '구로구', '대성베르힐리오파크', '127.58905125082998', '36.78983346099841');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('13', '대성베르힐리오파크 102', '서울특별시', '구로구', '대성베르힐리오파크', '127.58905125082998', '36.78983346099841');
INSERT INTO public.geo_table
(geo_no, geo_nm, addr_sido, addr_gugun, addr_dong, xcode, ycode)
VALUES('14', '대성베르힐리오파크 105', '서울특별시', '구로구', '대성베르힐리오파크', '127.58676485454409', '36.78971943919862');

 

 

어려운 건 없으니 그냥 아래 기본문법 한번 보고 예제를 따라 쳐보도록 하자.

 

 

기본문법

-- X좌표, Y좌표만 이용
geometry ST_MakePoint(float x, float y);
-- X좌표, Y좌표, Z좌표만 이용
geometry ST_MakePoint(float x, float y, float z);
-- X좌표, Y좌표, Z좌표, M좌표 이용
geometry ST_MakePoint(float x, float y, float z, float m);

 

예제

SELECT 
	ST_MakePoint(xcode::double precision , ycode::double precision) as geom,
	xcode,
	ycode
FROM PUBLIC.geo_table;

 

 

여기서 x좌표인 xcode와 y좌표인 ycode를 실수로 캐스팅 ( ::double precision ) 해주어 

ST_MakePoint함수에 담아주었다. 어려울 거 전혀 없다. 그럼 결과는 아래와 같다.

 

 

 

이렇게 x,y 좌표만을 갖고 공간정보( 포인트 )로 만들어주었다. 어려운 건 전혀 없으니 한번씩만 따라해보면

금방 할 수 있을 것이다. 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!