Обсудить в форуме Комментариев 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
Оглавление
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». Массив состоит из элементов, где каждый элемент может принимать одно из значений, описанных выше.
Коллекция элементарных объектов 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"} } } ] }
GeoJSON всегда представляет собой единственную сущность: геометрию, элементарный объект или коллекцию элементарных объектов.
Геометрия – это объект GeoJSON, для которого в качестве значения свойства «type» используется одна из строк: «Point», «MultiPoint», «LineString», «MultiLineString», «Polygon», «MultiPolygon» или «GeometryCollection».
Все геометрии, тип которых отличен от «Geometry Collection», должны иметь свойство «coordinates». Значение данного свойства всегда представляет собой массив. Структура элементов массива определяется типом геометрии.
Координаты – фундаментальная геометрическая концепция. Свойство «coordinates» объекта геометрия состоит из пары/триплета координат (в случае геометрии типа «Point»), массива координат (объекты типа «LineString» или «MultiPoint»), массива массивов координат (объекты типа «Polygons», «MultiLineStrings») или многомерного массива координат (объекты типа «MultiPolygon»).
Координаты определяются массивом чисел. Этот массив должен содержать минимум два элемента, но их может быть больше. Порядок элементов должен быть следующим: x, y, z (для данных, находящихся в прямоугольной системе координат - смещение на восток, смещение на север, высота, для данных, находящихся в географической системе координат – долгота, широта, высота). Допускается введение дополнительных элементов, однако их интерпретация выходит за рамки данной спецификации.
Примеры координат и объектов геометрия приведены в Приложении A. Примеры геометрий.
Для объектов типа «Point» свойство «coordinates» должно содержать одну пару/триплет координат.
Для объектов типа «MultiPoint» свойство «coordinates» должно содержать массив пар/триплетов координат.
Для объектов типа «LineString» свойство «coordinates» должно содержать массив из двух и более пар/триплетов. Тип «LinearRing» - это замкнутый «LineString», содержащий 4 и более пар/триплетов координат. Первая и последня пара/триплет эквивалентны (представлены одинаковыми точками). Хотя тип «LinearRing» явно не входит в список типов геометрий, он используется при описании типа «Polygon».
Для объектов типа «MultiLineString» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LineString».
Для объектов типа «Polygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LinearRing». Для полигонов с несколькими кольцами первым должно идти описание внешнего кольца и только затем внутренних, или дырок.
Для объектов типа «MultiPolygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «Polygon».
Объект типа «GeometryCollection» - это геометрия, представляющая коллекцию других геометрий. Такая коллекция должна содержать свойство с именем «geometries». Значение данного свойства - массив. Каждый элемент этого массива представляет собой геометрию.
Объект GeoJSON типа «Feature» - элементарный объект.
Объект GeoJSON типа « FeatureCollection» - коллекция элементарных объектов Объект типа «FeatureCollection» должен содержать свойство «features». Значение данного свойства – массив. Каждый элемент этого массива представляет собой элементарный объект.
Система координат (CRS) объекта GeoJSON определяется значением свойства «crs» (далее по тексту – объект CRS). Если объект GeoJSON не имеет свойства «crs», оно может быть наследовано от родительского или прародительского объекта. Если значение «crs» не может быть определено, то к GeoJSON объекту применяется значение CRS по умолчанию.
Система координат может быть описана путём указания имени. В этом случае значение свойства «type» должно содержать строку «name». Значение свойства «properties» должно представлять объект, содержащий свойство «name». Значением свойства «name» должна быть строка, определяющая систему координат. Предпочтительней использовать идентификаторы проекций OGC CRS URN вместо таких идентификаторов, как «EPSG:4326».
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }
Параметры объекта CRS могут быть получены по сети. В этом случае значение свойства «type» должно быть «link», а свойство «properties» представлять собой объект 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" } }
Чтобы включить информацию о диапазоне координат для геометрий, элементарных объектов и коллекций элементарных объектов используется свойство «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 идут в порядке x, y (смещение на восток, смещение на север для прямоугольных систем координат и долгота, широта для географических системы координат):
{ "type": "Point", "coordinates": [100.0, 0.0] }
Координаты LineString – массив пар/триплетов координат (см. 2.1.1. Координаты):
{ "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] }
Координаты 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 – массив пар/триплетов координат:
{ "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] }
Координаты MultiLinestring – массив массивов пар/триплетов координат LineString:
{ "type": "MultiLineString", "coordinates": [ [ [100.0, 0.0], [101.0, 1.0] ], [ [102.0, 2.0], [103.0, 3.0] ] ] }
Координаты 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 – геометрия:
{ "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [100.0, 0.0] }, { "type": "LineString", "coordinates": [ [101.0, 0.0], [102.0, 1.0] ] } ] }
Спецификация формата GeoJSON – результат обсуждения в рассылке GeoJSON: http://lists.geojson.org/listinfo.cgi/geojson-geojson.org
Обсудить в форуме Комментариев 8
Последнее обновление: September 09 2012
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).