GeoJSON представляет собой формат обмена геопространственными данными, основанный на JSON и предназначенный для описания геометрии объектов, их свойств и группировки в коллекции. Формат используется в веб-картографии и является одним из ключевых способов передачи данных в библиотеки визуализации карт, включая MapLibre GL JS.
Любой GeoJSON-документ представляет собой JSON-объект, содержащий строго определённые поля верхнего уровня. Основные типы объектов:
Обязательное поле type определяет тип структуры.
FeatureCollection является контейнером для набора географических объектов.
{
"type": "FeatureCollection",
"features": []
}
Ключевым элементом является массив features, содержащий
объекты Feature.
Особенности структуры:
Feature объединяет геометрию и набор свойств, описывающих объект.
{
"type": "Feature",
"geometry": {},
"properties": {},
"id": "unique-id"
}
Содержит геометрический объект одного из поддерживаемых типов.
Произвольный объект JSON, описывающий атрибуты:
Пример:
"properties": {
"name": "Park",
"area": 1200,
"type": "recreation"
}
Идентификатор объекта используется для обновления данных и связывания с внешними системами.
Геометрия описывает форму объекта в пространстве. Все координаты задаются в формате WGS84 (EPSG:4326) и используют порядок:
[долгота, широта]
Одиночная точка:
{
"type": "Point",
"coordinates": [76.886, 43.238]
}
Используется для:
Ломаная линия, состоящая из упорядоченного набора точек:
{
"type": "LineString",
"coordinates": [
[76.88, 43.23],
[76.89, 43.24]
]
}
Применение:
Полигон задаётся массивом линейных колец. Первое кольцо — внешний контур, последующие — отверстия.
{
"type": "Polygon",
"coordinates": [
[
[76.88, 43.23],
[76.89, 43.23],
[76.89, 43.24],
[76.88, 43.24],
[76.88, 43.23]
]
]
}
Правила:
Мультигеометрии позволяют объединять несколько однотипных объектов:
MultiPoint
{
"type": "MultiPoint",
"coordinates": [
[76.88, 43.23],
[76.89, 43.24]
]
}
MultiLineString
{
"type": "MultiLineString",
"coordinates": [
[
[76.88, 43.23],
[76.89, 43.24]
],
[
[76.90, 43.25],
[76.91, 43.26]
]
]
}
MultiPolygon
{
"type": "MultiPolygon",
"coordinates": [
[
[
[76.88, 43.23],
[76.89, 43.23],
[76.89, 43.24],
[76.88, 43.24],
[76.88, 43.23]
]
]
]
}
Позволяет объединять разные типы геометрий в одном объекте:
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [76.88, 43.23]
},
{
"type": "LineString",
"coordinates": [
[76.88, 43.23],
[76.89, 43.24]
]
}
]
}
GeoJSON использует фиксированную систему координат:
Пример 3D:
"coordinates": [76.88, 43.23, 500]
Высота интерпретируется по-разному в зависимости от движка визуализации.
Bounding box описывает ограничивающий прямоугольник объекта:
"bbox": [76.88, 43.23, 76.91, 43.26]
Формат:
[minLon, minLat, maxLon, maxLat]
Используется для:
Ранее GeoJSON поддерживал описание системы координат через поле
crs, однако спецификация устарела, и большинство
современных библиотек игнорируют его.
В контексте MapLibre GL JS GeoJSON является основным форматом источников данных (sources).
Типичная интеграция осуществляется через geojson
source:
map.addSource("points", {
type: "geojson",
data: {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [76.886, 43.238]
},
properties: {
title: "Object A"
}
}
]
}
});
Данные GeoJSON используются для:
В MapLibre GL JS свойства properties напрямую
используются в стилях через выражения:
getmatchcaseinterpolateПример условного окрашивания:
paint: {
"circle-color": [
"match",
["get", "type"],
"park", "#00ff00",
"water", "#0000ff",
"#ff0000"
]
}
Используются для отображения объектов на карте:
Используются для:
Используются для:
При большом количестве точек MapLibre GL JS поддерживает кластеризацию:
map.addSource("clusters", {
type: "geojson",
data: geojsonData,
cluster: true,
clusterMaxZoom: 14,
clusterRadius: 50
});
Кластеры формируются на основе пространственной близости точек и уменьшают нагрузку на рендеринг.
GeoJSON допускает обновление через замену объекта
data:
source.setData(newGeojson);
Это используется для: