지리데이터 확보
지리데이터 DB에 삽입
**https://www.osgeo.kr/205 → 한국 좌표계가 gis에서 빠져있어서 반드시 먼저 sql내용 복사후 실행시켜서 좌표계 등록하고 데이터 넣어야함**
CTPRVN.shp(시도) 삽입 → 파일이 위치한 곳에서 아래 명령어 실행
shp2pgsql -s 5179:4326 -W CP949 CTPRVN.shp sido_raw | psql -h localhost -U postgres -d vroomvroom
SIG.shp(시군구) 삽입 → 파일이 위치한 곳에서 아래 명령어 실행
shp2pgsql -s 5179:4326 -W CP949 SIG.shp sigungu_raw | psql -h localhost -U postgres -d vroomvroom
emd.shp(읍면동) 삽입 → 파일이 위치한 곳에서 아래 명령어 실행
shp2pgsql -s 5179:4326 -W CP949 EMD.shp emd_raw | psql -h localhost -U postgres -d vroomvroom
삽입된 지리데이터 원본을 테이블 형식에 맞게 가공
sido_raw → sido
INSERT INTO sido (
sido_id,
code,
name_kr,
geom,
center,
is_deleted,
created_at,
created_by,
updated_at,
updated_by
)
SELECT
gen_random_uuid() as sido_id, -- UUID 생성
ctprvn_cd as code,
ctp_kor_nm as name_kr,
geom,
ST_Centroid(geom) as center, -- 중심 좌표
FALSE as is_deleted,
NOW() as created_at,
'MASTER' as created_by,
NOW() as updated_at,
'MASTER' as updated_by
FROM sido_raw;
INSERT INTO sigungu (
sigungu_id,
sido_id, -- 상위 시도 ID
code,
name_kr,
geom,
center,
is_deleted,
created_at,
created_by,
updated_at,
updated_by
)
SELECT
gen_random_uuid() as sigungu_id,
s.sido_id, -- 상위 시도 연결
sr.sig_cd, -- 시군구 코드
sr.sig_kor_nm, -- 한글 이름
sr.geom, -- geometry 그대로
ST_Centroid(sr.geom) as center, -- 중심점 계산
FALSE, -- 기본 is_deleted
NOW(), -- created_at
'MASTER', -- created_by
NOW(), -- updated_at
'MASTER' -- updated_by
FROM sigungu_raw sr
JOIN sido s
ON LEFT(sr.sig_cd, 2) = s.code; -- sigungu 코드 앞 2자리로 sido 코드 매칭
INSERT INTO emd (
emd_id,
sigungu_id, -- 상위 시군구 ID
code,
name_kr,
geom,
center,
is_deleted,
created_at,
created_by,
updated_at,
updated_by,
deleted_at,
deleted_by
)
SELECT
gen_random_uuid() as emd_id,
sg.sigungu_id, -- 상위 시군구 연결
er.emd_cd, -- 읍면동 코드
er.emd_kor_nm, -- 한글 이름
er.geom, -- geometry 그대로
ST_Centroid(er.geom) as center, -- 중심점 계산
FALSE, -- 기본 is_deleted
NOW() as created_at, -- 생성 시간
'master' as created_by, -- 생성자
NOW() as updated_at, -- 업데이트 시간
'master' as updated_by, -- 업데이트자
NULL as deleted_at, -- 삭제 시간
NULL as deleted_by -- 삭제자
FROM emd_raw er
JOIN sigungu sg
ON LEFT(er.emd_cd, 5) = sg.code; -- emd 코드 앞 5자리로 sigungu 코드 매칭
누락 없는지 확인 (데이터 수 체크)
-- 시도
SELECT COUNT(*) AS sido_count FROM sido;
SELECT COUNT(*) AS sido_raw_count FROM sido_raw;
-- 시군구
SELECT COUNT(*) AS sigungu_count FROM sigungu;
SELECT COUNT(*) AS sigungu_raw_count FROM sigungu_raw;
-- 읍면동
SELECT COUNT(*) AS emd_count FROM emd;
SELECT COUNT(*) AS emd_raw_count FROM emd_raw;
postGIS에 한국 좌표계가 없는 경우 있음 (shp파일 데이터 삽입 시 이상하게 삽입)
hibernate와 jpql의 한계 → dsl로 세밀한 쿼리 작성 불가 및 postGIS 제대로 활용 불가
→ jdbc 템플릿 사용해서 네이티브 쿼리로 작성