GeoJSON

Date:    Updated:

카테고리:

GeoJSON 이란

GeoJSON은 위치정보를 갖는 점을 기반으로 체계적으로 지형을 표현하기 위해 설계된 개방형 공개 표준 형식이다. 이것은 JSON인 JavaScript Object Notation을 사용하는 파일 포맷이다. - 위키백과

쉽게 말해 GeoJSON은 위치정보를 가진 공간 데이터를 json 형식으로 간소화 하여 서로 주고받기 위한 포맷이다.

장점

GeoJson은 다음과 같은 장점들을 가진다.

  • text로 이루어져 있으므로 큰 제약 없이 다양한 편집기에서 내용을 편집할 수 있다.
  • 데이터 용량이 다른 포맷(.shp, .ecw 등)에 비해 상대적으로 작다.
  • 특정 언어 및 프레임워크에 종속되지 않으므로 접근성이 용이하다.
  • xml 형식과 비교하여 가독성이 뛰어나다.

Geometry, GeometryCollection

Geometry는 GeoJSON에서 표현할 수 있는 단일 공간 객체를 뜻한다.

GeoJSON이 지원하는 Geometry의 Type은 다음과 같다.

image

타입 설명
Point 하나의 단일 포인트(점)
LineString 시작점과 끝점이 존재하며 여러개의 점들을 연결하는 선
Polygon 시작점과 끝점이 동일하며 여러개의 선들로 만들어진 다각형(면)
MultiPoint Point들의 집합
MultiLineString LineString들의 집합
MultiPolygon Polygon들의 집합
GeometryCollection 위의 Geometry Type 데이터들의 집합

Geometry

Geometry를 작성하는 방법은 다음과 같다.

  • “type”
    • 위에 기술한 Geometry Type 중 하나를 작성한다.
  • “coordinate”
    • 해당 Geometry의 좌표(경도, 위도)값을 작성한다.
      • LineString, Polygon의 경우 Point 방향에 따라 2차원 배열 형태로 순서대로 작성한다.

예시

  • 기본형태(Geometry primitives)

    image

    Polygon의 경우 Hole이라는 개념이 존재한다.

    Hole이란 마치 도넛 모양처럼 Polygon 영역 내부에 경계선이 존재한다는 의미이다.

    Hole이 존재하는 Polygon을 표현해야하는 경우 첫번째 인자에 exterior(외부 경계선)가 들어가고, 두번째부터 interior(내부 경계선, Hole)이 들어가게 된다.

  • 복잡한 형태(Multipart geometries)

    image

GeometryCollection

위에 기술한 2개 이상의 Geometry Type 데이터들의 집합을 표현할 때 GeometryCollection을 사용한다.

  • “type”
    • Geometry Type의 집합을 의미하는 “GeometryCollection”을 작성한다.
  • “geometries”
    • 위에 기술한 Geometry에 대한 정보를 배열 안에 작성한다.

예시

image

Feature, FeatureCollection

GeoJSON에서 말하는 Feature는 특정 공간에 위치하는 개체를 뜻한다. (a spatially bounded entity)

Geometry는 타입과 좌표값만을 가진 순수한 공간 객체 였다면

Feature는 Geometry를 포함하여 비공간 속성인 properties(도형의 색상, 라벨 등)까지 함께 결합하여 표현할 수 있는 개체를 뜻한다.

FeatureCollection은 이러한 Feature를 2개 이상 표현 해야할 때 사용한다.

Feature

단일 개체(Feature)를 작성할때는 다음과 같은 규칙을 따른다.

  • “type”
    • 단일 게체를 의미하는 “Feature” 를 작성한다.
  • “geometry”
    • 위에서 기술한 Geometry에 대한 정보를 작성한다.
  • “properties”
    • 해당 객체에 대한 임의의 속성을 키-값의 조합으로 작성한다.
    • 필수 작성은 아니다.

예시

image

FeatureCollection

2개 이상의 Feature들을 작성할 경우 다음과 같이 작성한다.

  • “type”
    • 2개 이상의 Feature 집합을 의미하는 “FeatureCollection” 을 작성한다.
  • “features”
    • 위에 기술한 Feature에 대한 정보를 배열 안에 작성한다.

예시

image

Bounding Box

위 예시에는 기술되지 않았지만, GeoJSON 가 제공하는 각 타입 별 객체들(Geometry, GeometryCollection, Feature, FeatureCollection)은 “bbox”를 통해 Bounding Box를 구성할 수 있다.

Bounding Box란 객체를 완전히 둘러쌀수 있는 가장 작은 직사각형을 의미한다.

Bounding Box는 2D와 3D로 표현할 수 있다.

2D BoundingBox 예시

  • “bbox”
    • [x1, y1, x2, y2] 의 좌표값을 작성한다.
{
    "bbox": [100.0, 0.0, 105.0, 1.0]
}

3D BoundingBox 예시

  • “bbox”
    • [x1, y1, z1, x2, y2, z2] 의 좌표값을 작성한다.
{
    "bbox": [100.0, 0.0, -100.0, 105.0, 1.0, 0.0]
}

실제 적용 예시

{
    "type": "FeatureCollection",
    "bbox": [100.0, 0.0, 105.0, 1.0], // 2D BoundingBox
    "features": [
    //...
    ]
}
{
    "type": "FeatureCollection",
    "bbox": [100.0, 0.0, -100.0, 105.0, 1.0, 0.0], // 3D BoundingBox
    "features": [
    //...
    ]
}

CRS(Coordinate Reference System)

GeoJSON은 CRS 즉, 좌표계 설정을 위한 포맷을 지원한다.

“bbox”와 다르게 계층 구조로 이루어져 있을 경우 최상위 GeoJSON 개체에 있어야 하며 하위 개체에 의해 반복되거나 재정의 되면 안된다.

좌표계를 지정하는 방식은 직접 좌표계 명을 정의하는 “name” 방식링크를 통해 좌표계 정보를 받아오는 “link” 방식이 있다.

좌표계를 따로 지정하지 않을 시 default는 WGS84이다.

직접 좌표계 명 정의 예시

  • “type”
    • 좌표계 명을 직접 정의하는 방식인 “name”을 작성한다.
  • “properties”
    • “name”
      • 적용할 좌표계 코드명을 작성한다.
{
    "type": "name",
    "properties": {
      "name": "urn:ogc:def:crs:EPSG::5179" // or EPSG:5179
    }
}

링크를 통한 좌표계 정의 예시

  • “type”
    • 링크를 통해 좌표계 정보를 받아오기 위해 “link”를 작성한다.
  • “properties”
    • “href”
      • 역참조가 가능한 URI값을 작성한다.
    • “type”
      • URI에서 좌표계를 상호 변환하기 위해 사용되는 형식을 작성한다.
      • ex) “proj4”, “ogcwkt”, “esriwkt” 등
      • 필수 작성은 아니다.
{
    "type": "link",
    "properties": {
      "href": "http://spatialreference.org/ref/epsg/32198/proj4/",
      "type": "proj4"
    }
}

실제 적용 예시

{
    "type": "FeatureCollection",
    "bbox": [100.0, 0.0, 105.0, 1.0],
    "crs" : {
        "type": "name",
        "properties": {
          "name": "urn:ogc:def:crs:EPSG::5179"
        }
    },
    "features": [
    //...
    ]
}
{
    "type": "FeatureCollection",
    "bbox": [100.0, 0.0, 105.0, 1.0],
    "crs" : {
        "type": "link",
        "properties": {
          "href": "http://spatialreference.org/ref/epsg/32198/proj4/",
          "type": "proj4"
        }
    },
    "features": [
    //...
    ]
}

crs를 변환하는 방법에 대해 설명했지만, 권장하는 방식은 crs를 직접 정의하지 않고 좌표를 기본 좌표계인 WGS84로 변환하여 사용하는 것이다.

📣 Reference

RFC-7946(GeoJSON)
geojson.io
위키백과 - GeoJSON
GeoJSON Format(형식)
Language Study - GeoJson에 대하여 알아보자
GeoJson 이란?
geojson
geojson multipolygon with multiple holes
Create GeoJSON with CRS from Postgis
How could I generate a CRS field inside the GeoJSON object created by Leaflet layer.toGeoJSON?
Drag and drop a GeoJSON with linked CRS

댓글남기기