GIS-LAB

Географические информационные системы и дистанционное зондирование

Спецификация формата GeoJSON

Обсудить в форуме Комментариев — 8

Перевод спецификации формата GeoJSON.

Авторы

Howard Butler (Hobu Inc.), Martin Daly (Cadcorp), Allan Doyle (MIT), Sean Gillies (UNC-Chapel Hill), Tim Schaub (OpenGeo), Christopher Schmidt (MetaCarta)

Версия

1.0

Дата

16 Июня 2008

Копирайт

Copyright © 2008 by the Authors. This work is licensed under a Creative Commons Attribution 3.0 United States License

Кратко

GeoJSON - формат обмена пространственными данными, основанный на JavaScript Object Notation (JSON)

Перевод

Рыков Д.А., а также участники форума, участвовашие в редактировании перевода: Дубинин М.Ю, Mavka, gamm

Ссылка

Оригинал: http://geojson.org/geojson-spec.html

Перевод: http://gis-lab.info/docs/geojson_ru.html

 

Оглавление

1. Введение

GeoJSON - формат представления различных структур географических данных. Объект GeoJSON может быть представлен геометрией (geometry), объектом (feature) или коллекцией объектов (feature collection). GeoJSON поддерживает следующие геометрические типы: Point (точка), LineString (ломаная), Polygon (полигон), MultiPoint (мультиточка), MultiLineString (мультиломаная), MultiPolygon (мультиполигон) и GeometryCollection (коллекция геометрий). Объект (feature) в GeoJSON состоит из геометрии и дополнительных свойств, коллекция объектов (feature collection) – из набора объектов (feature).

Примечание переводчика: в GeoJSON существует иерархия объектов вида GeoJSON Object => feature collection => feature => geometry. Чтобы в дальнейшем избежать путаницы в терминах, условимся называть GeoJSON Object – объект GeoJSON, feature collection – коллекция элементарных объектов, feature – элементарный объект, geometry – геометрия.

Завершенная структура данных GeoJSON – это всегда объект (в терминах JSON). В GeoJSON объект состоит из набора пар ключ/значение, также называемых свойствами. Имя каждого свойства – строка. Значение свойства может представлять собой строку, число, объект, массив или один из литералов: «true», «false» и «null». Массив состоит из элементов, где каждый элемент может принимать одно из значений, описанных выше.

1.1 Примеры

Коллекция элементарных объектов 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"}
         }
       }
     ]
   }

1.2 Определения

  • JavaScript Object Notation (JSON) и термины «объект», «имя», «значение», «массив», «число» определены в IETF RFC 4627 по адресу http://www.ietf.org/rfc/rfc4627.txt.
  • Ключевые слова «MUST», «MUST NOT», «REQUIRED», «SHALL», «SHALL NOT», «SHOULD», «SHOULD NOT», «RECOMMENDED», «MAY» и «OPTIONAL» в данном документе переведены в соответствии с IETF RFC 2119 http://www.ietf.org/rfc/rfc2119.txt.

2. Объекты GeoJSON

GeoJSON всегда представляет собой единственную сущность: геометрию, элементарный объект или коллекцию элементарных объектов.

  • Объект GeoJSON может иметь произвольное количество свойств (пар ключ/значение).
  • Объект GeoJSON должен иметь свойство «type». Значение этого свойства – строка, содержащая тип объекта GeoJSON.
  • Значение свойства «type» должно принимать одно из следующих значений: «Point», «MultiPoint», «LineString», «MultiLineString», «Polygon», «MultiPolygon», «GeometryCollection», «Feature» или «FeatureCollection». Регистр символов значения поля «type» имеет значение.
  • Объект GeoJSON может иметь необязательное свойство «crs», значение которого должно содержать объект системы координат (см. 3. Объекты системы координат).
  • Объект GeoJSON может иметь свойство «bbox», значение которого представляет массив координат вершин ограничивающего прямоугольника (см. 4. Ограничивающие прямоугольники).

2.1 Геометрия

Геометрия – это объект GeoJSON, для которого в качестве значения свойства «type» используется одна из строк: «Point», «MultiPoint», «LineString», «MultiLineString», «Polygon», «MultiPolygon» или «GeometryCollection».

Все геометрии, тип которых отличен от «Geometry Collection», должны иметь свойство «coordinates». Значение данного свойства всегда представляет собой массив. Структура элементов массива определяется типом геометрии.

2.1.1 Координаты

Координаты – фундаментальная геометрическая концепция. Свойство «coordinates» объекта геометрия состоит из пары/триплета координат (в случае геометрии типа «Point»), массива координат (объекты типа «LineString» или «MultiPoint»), массива массивов координат (объекты типа «Polygons», «MultiLineStrings») или многомерного массива координат (объекты типа «MultiPolygon»).

Координаты определяются массивом чисел. Этот массив должен содержать минимум два элемента, но их может быть больше. Порядок элементов должен быть следующим: x, y, z (для данных, находящихся в прямоугольной системе координат - смещение на восток, смещение на север, высота, для данных, находящихся в географической системе координат – долгота, широта, высота). Допускается введение дополнительных элементов, однако их интерпретация выходит за рамки данной спецификации.

Примеры координат и объектов геометрия приведены в Приложении A. Примеры геометрий.

2.1.2 Point

Для объектов типа «Point» свойство «coordinates» должно содержать одну пару/триплет координат.

2.1.3 MultiPoint

Для объектов типа «MultiPoint» свойство «coordinates» должно содержать массив пар/триплетов координат.

2.1.4 LineString

Для объектов типа «LineString» свойство «coordinates» должно содержать массив из двух и более пар/триплетов. Тип «LinearRing» - это замкнутый «LineString», содержащий 4 и более пар/триплетов координат. Первая и последня пара/триплет эквивалентны (представлены одинаковыми точками). Хотя тип «LinearRing» явно не входит в список типов геометрий, он используется при описании типа «Polygon».

2.1.5 MultiLineString

Для объектов типа «MultiLineString» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LineString».

2.1.6 Polygon

Для объектов типа «Polygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LinearRing». Для полигонов с несколькими кольцами первым должно идти описание внешнего кольца и только затем внутренних, или дырок.

2.1.7 MultiPolygon

Для объектов типа «MultiPolygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «Polygon».

2.1.8 GeometryCollection

Объект типа «GeometryCollection» - это геометрия, представляющая коллекцию других геометрий. Такая коллекция должна содержать свойство с именем «geometries». Значение данного свойства - массив. Каждый элемент этого массива представляет собой геометрию.

2.2 Элементарный объект

Объект GeoJSON типа «Feature» - элементарный объект.

  • Элементарный объект должен иметь свойство «geometry». Значение этого поля – геометрия или значение JSON null.
  • Элементарный объект должен иметь свойство «properties». Значение этого свойства – объект (любой объект JSON или JSON null).
  • Если у элементарного объекта есть некоторый идентификатор, его следует включить отдельным свойством с именем «id».

2.3 Коллекция элементарных объектов

Объект GeoJSON типа « FeatureCollection» - коллекция элементарных объектов Объект типа «FeatureCollection» должен содержать свойство «features». Значение данного свойства – массив. Каждый элемент этого массива представляет собой элементарный объект.

3. Объекты системы координат

Система координат (CRS) объекта GeoJSON определяется значением свойства «crs» (далее по тексту – объект CRS). Если объект GeoJSON не имеет свойства «crs», оно может быть наследовано от родительского или прародительского объекта. Если значение «crs» не может быть определено, то к GeoJSON объекту применяется значение CRS по умолчанию.

  • По умолчанию используется географическая система координат WGS84 в десятичных градусах долготы и широты.
  • Значение свойства «crs» должно представлять объект JSON или значение JSON null. Значение свойства «crs» - null означает отсутствие информации о системе координат.
  • Свойство «crs» следует помещать на самый верхний уровень иерархии объекта GeoJSON (порядок иерархии: коллекция элементарных объектов => элементарный объект => геометрия) и не следует повторять или переопределять в дочерних объектах.
  • Не пустой объект (не null) CRS имеет два обязательных свойства: «type» и «properties».
  • Значением свойства «type» должна быть строка, описывающая тип объекта CRS.
  • Значением свойства «properties» должен быть объект.
  • Система координат не должна менять порядок следования координат (см. 2.1.1 Координаты).

3.1 Именование систем координат

Система координат может быть описана путём указания имени. В этом случае значение свойства «type» должно содержать строку «name». Значение свойства «properties» должно представлять объект, содержащий свойство «name». Значением свойства «name» должна быть строка, определяющая систему координат. Предпочтительней использовать идентификаторы проекций OGC CRS URN вместо таких идентификаторов, как «EPSG:4326».

"crs": {
  "type": "name",
  "properties": {
    "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
    }
  }

3.2 Ссылки на системы координат

Параметры объекта CRS могут быть получены по сети. В этом случае значение свойства «type» должно быть «link», а свойство «properties» представлять собой объект Link (см. 3.2.1 Объекты Link).

3.2.1 Объекты Link

Объект Link имеет одно обязательное свойство: «href» и одно опциональное: «type». Значение свойства «href» должно представлять собой разрешимый URI. Значение опционального свойства «type» должно быть строкой, описывающей формат представления системы координат, предоставляемой по URI. Предлагаемые значения: «proj4», «ogcwkt», «esriwkt», но могут использоваться и другие значения.

"crs": {
  "type": "link",
  "properties": {
    "href": "http://example.com/crs/42",
    "type": "proj4"
    }
  }

Относительные ссылки можно использовать для непосредственного доступа к параметрам системы координат, хранящимся во вспомогательном файле:

"crs": {
  "type": "link",
  "properties": {
    "href": "data.crs",
    "type": "ogcwkt"
    }
  }

4. Ограничивающие прямоугольники

Чтобы включить информацию о диапазоне координат для геометрий, элементарных объектов и коллекций элементарных объектов используется свойство «bbox» (ограничивающий прямоугольник) объекта GeoJSON. Значение данного свойства должно быть массивом размерности 2*n, где n – размерность входящих в объект геометрий и содержать минимальные и максимальные значения координат всех координатных осей. Порядок осей при описании ограничивающего прямоугольника соответствует порядку осей, используемых при описании геометрий. Кроме того, предполагается, что система координат ограничивающего прямоугольника соответствует системе координат объекта GeoJSON, свойством которого она является.

Пример свойства «bbox» элементарного объекта:

{ "type": "Feature",
  "bbox": [-180.0, -90.0, 180.0, 90.0],
  "geometry": {
    "type": "Polygon",
    "coordinates": [[
      [-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0]
      ]]
    }
  ...
  }

Пример свойства «bbox» коллекции элементарных объектов:

{ "type": "FeatureCollection",
  "bbox": [100.0, 0.0, 105.0, 1.0],
  "features": [
    ...
    ]
  }

Приложение А. Примеры геометрий

Каждый из приведенных далее примеров представляет собой законченный GeoJSON объект. Отметим, что не обрамленные в кавычки пробелы в JSON не принципиальны. Пробелы использованы в примерах для наглядности представления структуры данных и не являются обязательными.

Point

Координаты объекта Point идут в порядке x, y (смещение на восток, смещение на север для прямоугольных систем координат и долгота, широта для географических системы координат):

{ "type": "Point", "coordinates": [100.0, 0.0] }

LineString

Координаты LineString – массив пар/триплетов координат (см. 2.1.1. Координаты):

{ "type": "LineString",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
  }

Polygon

Координаты Polygon – массив массивов пар/триплетов координат LinearRing. Первый элемент массива описывает внешнее кольцо. Последующие элементы описывают внутренние кольца (дырки).

Без дырок:

{ "type": "Polygon",
  "coordinates": [
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
    ]
 }

С дыркой:

{ "type": "Polygon",
  "coordinates": [
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
    [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
    ]
 }

MultiPoint

Координаты MultiPoint – массив пар/триплетов координат:

{ "type": "MultiPoint",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
  }

MultiLineString

Координаты MultiLinestring – массив массивов пар/триплетов координат LineString:

{ "type": "MultiLineString",
  "coordinates": [
      [ [100.0, 0.0], [101.0, 1.0] ],
      [ [102.0, 2.0], [103.0, 3.0] ]
    ]
  }

MultiPolygon

Координаты MultiPolygon – массив массивов пар/триплетов координат Polygon:

{ "type": "MultiPolygon",
  "coordinates": [
    [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
    [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
     [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
    ]
  }

GeometryCollection

Каждый элемент в массиве GeometryCollection – геометрия:

{ "type": "GeometryCollection",
  "geometries": [
    { "type": "Point",
      "coordinates": [100.0, 0.0]
      },
    { "type": "LineString",
      "coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
      }
  ]
}

Приложение Б. Создатели GeoJSON

Спецификация формата GeoJSON – результат обсуждения в рассылке GeoJSON: http://lists.geojson.org/listinfo.cgi/geojson-geojson.org

Обсудить в форуме Комментариев — 8

Последнее обновление: September 09 2012