Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

melius

[Mapshaper] 지도파일 변환 본문

library & framework

[Mapshaper] 지도파일 변환

melius102 2020. 3. 13. 21:59

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
Comments