2단계 · GDAL 레시피
전처리
무결성 확인, 좌표계·인코딩·범위·속성 정리.
전처리 도구
이 전처리 뒤 변환 도구: GDAL · GeoServer · martin
1UTF-8 변환GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
iconv -f CP949 -t UTF-8 /raw/molit_bus_stops.csv > /work/stops.csv && head -3 /work/stops.csv원본 파일 이름 표기 EUCKR(= CP949). GDAL CSV 드라이버는 UTF-8 기준 → 그대로 읽으면 한글 열 이름·값 깨짐. head: 머리글·첫 행 확인.
2무결성 확인GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogrinfo -so -al -oo X_POSSIBLE_NAMES=경도 -oo Y_POSSIBLE_NAMES=위도 /work/stops.csvX·Y_POSSIBLE_NAMES: 경도·위도 열을 점 좌표로 읽기(GDAL CSV 드라이버). 전국 227,065행. 범위(Extent) x 최솟값 33·y 최댓값 127 → 위도·경도 뒤바뀐 행 존재. Layer SRS 없음: CSV에는 좌표계 (EPSG) 지구 위 위치를 숫자로 적는 약속. EPSG:4326: 위경도, EPSG:3857: 웹 지도 미터 좌표, EPSG:5186: 국내 중부원점. 자세히 정보 없음.
3무결성 확인 (좌표 이상 행)GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogrinfo -q /work/stops.csv -dialect SQLite -sql "SELECT 도시명, count(*) AS rows FROM stops WHERE 위도 = '' OR 경도 = '' OR NOT (CAST(위도 AS REAL) BETWEEN 33 AND 39 AND CAST(경도 AS REAL) BETWEEN 124 AND 132) GROUP BY 도시명"좌표가 숫자 아닌 텍스트 → 빈 칸·한국 범위 밖 행을 도시별로 집계. 대전 5·제주 1: 위도·경도 뒤바뀜, 세종 6: 빈 칸 5 + 위도·경도 같은 값 1.
4무결성 확인 (중복 등록)GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogrinfo -q /work/stops.csv -dialect SQLite -sql "SELECT count(*) AS 경기BIS, sum(모바일단축번호 IN (SELECT 모바일단축번호 FROM stops WHERE 관리도시명 = '서울BIS')) AS 같은_단축번호 FROM stops WHERE 관리도시명 = '경기BIS' AND 도시명 = '서울특별시'"관리도시명: 정류장을 등록한 버스정보시스템(BIS). 서울 정류장을 경기BIS도 따로 등록 → 경기BIS 행 중 서울BIS와 같은 단축번호(ARS) 수 집계. 같은 정류장이 두 점으로 겹침.
5서울BIS 정류장 점 만들기GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogr2ogr -f GPKG /work/stops.gpkg /work/stops.csv -nln stops -nlt POINT -dialect SQLite -sql "SELECT MakePoint(CAST(경도 AS REAL), CAST(위도 AS REAL), 4326) AS geom, 정류장번호 AS id, 정류장명 AS name, 모바일단축번호 AS ars FROM stops WHERE 관리도시명 = '서울BIS' AND CAST(위도 AS REAL) BETWEEN 33 AND 39 AND CAST(경도 AS REAL) BETWEEN 124 AND 132"MakePoint(경도, 위도, 4326): 텍스트 좌표 → 위경도 점. WHERE 범위: 이상 좌표 행 제외. 관리도시명 서울BIS: 중복 없이 한쪽만(서울 버스가 서는 경기·인천 일부 포함, 경기BIS에만 있는 광역 정류장은 빠짐). AS: 한글 열 → 영문. -nlt POINT: 도형 종류 고정.