웹에서 위치 데이터를 로컬이나 서버단에서 읽고 저장하기 위한 포맷으로 무엇을 사용할 것인지 고민하다가, GeoJSON으로 결정을 했다. 사실 고민은 단 1도 안한듯.. 당연히 GeoJSON 이지 !
GeoJSON은 JSON으로 위치 데이터와 속성 데이터를 저장하는 형식이다. 다른 GIS 포맷과는 다르게 IETF(Internet Engineering Task Force)에서 제안되어 유지되고 있단다. RFC 번호는 7946이다. 좌표는 경위도 좌표체계로 저장되는데, 흔히 구글맵이나 OSM에서는 (위도, 경도)의 순서로 저장하는데 반해, GeoJSON은 (경도, 위도)의 순서로 저장된다고 한다.
GeoJSON은 다음과 같은 장점을 갖는다.
- XML과 비교하여 스카마나 태그 규칙에 대해 훨씬 자유롭다. 사실 XML은 보기만해도 두통이 먼저 밀려온다.
- 데이터 용량이 다른 포맷에 비해 상대적으로 작다.
- JSON 형식이므로 프로그래밍 언어에서 쉽게 객체화 시킬 수 있다. 특히 Javascript에서는 단 1줄로 객체화 시킬 수 있다.
- 다양한 응용 프로그램에 적재되기에 용이하며, 실제로 다양한 응용 프로그램에서 활용 된다.
실제 빈 GeoJSON 포맷은 아래와 같다.
{ "type": "FeatureCollection", "features": [] }
features 안에 실제 데이터가 담기는데, 빈 Feature 요소는 다음과 같다.
{ "type": "Feature", "geometry": {}, "properties": {} }
geometry에 종류(type)과 좌표(coordinates) 정보가 저장되고, properties에 속성 정보가 Key-Values로 자유롭게 저장된다. 아래는 기본 Geometry 종류에 대한 예이다. (출처: https://ko.wikipedia.org/wiki/GeoJSON)
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [102.0, 0.5] }, "properties": { "prop0": "value0" } }, { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]] }, "properties": { "prop0": "value0", "prop1": 0.0 } }, { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0],[100.0, 1.0], [100.0, 0.0]]] }, "properties": { "prop0": "value0", "prop1": { "this": "that" } } } ] }
좀 더 자세한 기본 형태의 지오메트리와 복잡한 형태의 지오메트리에 대한 정보는 앞 예제의 출처를 참고하자.