melius
[Mapshaper] 지도파일 변환 본문
Mapshaper를 이용하여 Shapefile을 GeoJSON 이나 TopoJSON 파일로 변환할 수 있다.
1. Shapefile
일반적으로 가장 많이 사용되는 지도파일의 형식은 Shapefile이며, 4개의 파일로 구성되어 있다. 그중에서 shp 파일에 기하학적인 지도정보가 저장되어 있다.
(자세한 내용은 https://mapschool.io/ 참고)
아래의 사이트에서 지도데이터를 구할수 있다.
공간정보시스템: http://www.gisdeveloper.co.kr/?p=2332
국가공간정보포텉: http://www.nsdi.go.kr
국토정보플랫폼: http://map.ngii.go.kr
Natural Earth: https://www.naturalearthdata.com
2. Mapshaper
D3.js에서 사용가능한 파일형식은 GeoJSON과 TopoJSON이므로, Mapshaper를 이용하여 Shapefile를 GeoJSON 파일로 변환한다. 우선, 아래와 같이 Mapshaper를 설치한다.
$ npm install -g mapshaper
Mapshaper는 쉘에 직접 Command를 입력할 수도 있지만, 브라우저를 통해서 GUI도 제공해 준다.
$ mapshaper-gui
select 버튼을 눌러서 Shapefile(4개)를 선택하여 읽어들인다. 이때 import options란에 Shapefile의 encoding 정보도 입력해야 한글이 깨지지 않는다. EUC-KR로 인코딩되어 있다면,
encoding=euckr
영역 삭제 (Remove Feature)
지도를 정상적으로 읽어들이면, 화면에 지도가 보인다. Console 버튼을 누르면 콘솔창이 뜨며 다양한 명령을 수행할 수 있다. 지도의 특정 영역(Feature)를 지우기를 원한다면 filter 명령을 사용한다. 아래와 같이 조건을 입력하면 해당조건에 만족하는 지도 데이터만 남는다.
filter '<Field-Name> == <Field-Value>'
예를 들어서 City의 값이 Seoul인 데이터만 남기려면,
filter 'City == "Seoul"'
정규 표현식도 가능하다.
filter '/^11\d{1,}/.test(City-NUM)'
좌표 시스템을 WGS(World Geodetic System)로 변환해야 한다면,
-proj wgs84
Simplify 버튼을 누르면 지도의 기하학적 정보를 단순화 시켜서 파일용량을 줄일 수 있다. Export 버튼은 편집한 지도데이터를 저장하는데, export options에 원하는 옵션을 입력한다.
encoding=utf8
쉘에서도 위의 작업들을 수행할 수 있다.
$ mapshaper src.shp encoding=euckr -proj wgs84 -simplify 0.5% -o format=shapefile out.shp
$ mapshaper src.shp encoding=euckr -proj wgs84 -simplify 0.1% -o format=geojson out.json
영역 병합 (Dissolve Boundaries)
지도의 특정 영역들(Feature)을 합치려면 해당 영역의 필드값을 일치시켜 주어야 한다. 예를 들어서 일치시키려는 필드명이 City-NUM인 경우,
each 'City-NUM="41110"' where='City-NUM=="41111" || City-NUM=="41113"'
필드값을 41110로 변경시킨다. 그리고 필드명을 City-NUM 기준으로 통합시킨다.
dissolve 'City-NUM'
통합결과를 보면 City-NUM을 제외한 다른 필드가 모두 사라지므로, 통합전에 각 필드정보를 csv파일로 Export해 두어야 한다. csv파일을 통합영역에 맞게 편집한 뒤에 Add a file 버튼을 눌러서 csv파일을 읽어들인다. 이때 숫자로된 필드값을 string 타입으로 읽어들이기 위해서 import options에,
string-fields=*
지도뷰의 콘솔창에서
join src.csv keys=City-NUM,City-NUM
* GDAL 라이브러리의 ogr2ogr도 가능
References
https://github.com/mbloch/mapshaper/wiki/Command-Reference
https://datavizforall.org/mapshaper.html
https://github.com/mbloch/mapshaper/issues/117
'library & framework' 카테고리의 다른 글
[Socket.IO] 실시간 채팅 구현 (0) | 2020.08.07 |
---|---|
[gabia] Node.js 호스팅 (0) | 2020.03.18 |
[webpack] Development (0) | 2020.03.10 |
[webpack] Module Bundling (0) | 2020.03.06 |
[React] Component 프로퍼티, 상태 및 이벤트 (0) | 2020.03.06 |