Время прочтения: 5 минут
Недавно в телеграм-чате спбгеотех я увидела вопрос про разницу двух форматов данных, используемых в вебе, и он поставил меня в тупик. Основная моя профессиональная деятельность уже несколько лет лежит вне поля веб-картографии, и я поняла, что начала выпадать из быстро развивающейся сферы. С одной стороны, ну и ладно бы с ним, не зря существуют специализации и каждый находит для себя интересную сферу. С другой стороны, любопытство взяло верх.
Эта статья — попытка объять необъятное и разобраться, что за форматы сейчас используются в сфере веб-геотехнологий. Она не претендует на полноту, но может стать хорошим стартом для тех, кто захочет разобраться подробнее, или интересным чтением для расширения кругозора. На вопрос из чата я не отвечу — для этого нужно иметь опыт работы с этими форматами, но, надеюсь, вы вместе со мной почувствуете себя на волне геотехнологий.
Форматы в веб
В оригинальном сообщении, которое привлекло мое внимание, автор спрашивал о FlatGeobuf и GeoParquet. С них я и начала освежать знания.
Почему вообще они существуют и зачем? Проектов в вебе становится все больше, в том числе и геотехнологических. Просто показать картинки уже недостаточно — людям нужно быстрее, оптимальнее с точки зрения места для хранения, красивее, безопаснее с точки зрения доступа к данным. Новые форматы постепенно закрывают эти потребности, открывая новые возможности отображения и обработки пространственных данных в вебе.
Когда нам нужно отобразить на веб-карте пять точек кофеен, никакие оптимизированные форматы нам не потребуются, будет достаточно GeoJSON. Но когда мы захотим отображать, а еще желательно анализировать, на веб-карте места общественного питания на всю Россию, то тут уже GeoJSON нам не товарищ. В зависимости от сложности задач, мы скорее всего выберем векторные тайлы или flatgeobuf.
FlatGeobuf
FlatGeobuf (.fgb) — бинарный формат векторных данных. Хотя это относительно новый формат, он уже поддерживается в GDAL (а значит и в QGIS). Не буду (да и не смогу правильно) заниматься сложным техническим описание преимуществ и недостатков для программистов, опишу своими словами. А тех, кто хорошо разбирается в программировании и хочет деталей, — прошу в блог worace.works.
По-простому:
- формат не текстовый, как, например, GeoJSON, а бинарный. Это значит, что, к сожалению, вы не сможете его открыть в текстовом редакторе и понять, что там за данные, но, к счастью, это сильно уменьшает объем хранимых данных и скорость чтения
- flatgeobuf основывается на библиотеке flatbuffers для эффективного кодирования геометрий (Efficient Geometry Encoding). Обычно в больших векторных данных именно геометрия занимает больше всего места и вызывает сложности в чтении. Геометрия из FlatGeobuf легко и быстро читается любыми языками программирования, независимо от их особенностей (но есть нюансы)
- встроенный пространственный индекс. Знаю, звучит не ново. Но разработчики формата пошли дальше и сделали RTree индекс оптимизированным для удаленного чтения. Вот оно! Мы наконец-то добрались до того, почему это формат называется оптимизированным под веб-использование. Если вам интересна математическая сторона вопроса, еще раз приглашу вас в блог, где это более подробно описано и есть дополнительные ссылки
- из-за особенности хранения данных, программно “дешево” запросить отдельный объект, т.е. строку, но “дорого” запросить конкретный атрибут, т.е. колонку
Итого:
- формат бинарный, что делает его компактным
- оптимизирован для хранения геометрии и содержит специально созданное индексирование для быстрого обращения к объектам по географическому охвату
Из неозвученных минусов:
1) все оптимизации касаются только геометрии, а у векторных файлов часто много атрибутивной информации, которую может оказаться долго и тяжело подтянуть вместе с геометрией
2) создание сложной схемы индексирования не предполагает редактирование файла, поэтому такой формат можно использовать только со статичными (не изменяющимися со временем) данными.
GeoParquet
GeoParquet – сильно сжатый формат хранения табличных данных. Это не самостоятельный формат, а дополнение к формату Apache Parquet, который в оригинале оптимизирован для работы с табличными данными. GeoParquet лишь обеспечивает возможность добавления столбца с геометрией, а также ее параметров, например, системы координат. В гайде по веб-ориентированным форматам приводится хороший пример, чтобы лучше понять эту надстройку: Apache Parquet это как TIFF, который обзавелся привязкой и стал GeoTIFF (GeoParquet).
Как и FlatGeobuf, Geoparquet поддерживается в GDAL. Геометрия хранится в бинарном формате WKB (Well-Known Binary).
- по умолчанию формат эффективно сжат, что отличает его от многих форматов, в том числе и от flatgeobuf, в котором вообще сжатие не предусмотрено
- пока нет пространственного индекса. Разработчики рекомендуют для ускорения работы просто хранить разные регионы в разных файлах
- не поддерживает изменения, также как и flatgeobuf
- может храниться как набор нескольких файлов. Это актуально, когда нужно хранить и записывать много данных, а так как файл нельзя изменять после записи, то такие «архивы» из нескольких файлов становятся незаменимыми. В случае такого «архива» создается один файл метаданных, в котором хранится информация о каждом файле в архиве, чтобы при чтении было легко найти нужный
- почему формат считается оптимизированным для веб-решений? В отличие от FlatGeobuf, он построен по колонкам (атрибутам), где все строки разбиты на блоки для упрощения чтения. Подробнее можете почитать в гайде. Но самое главное отличие от всех остальных форматов в том, что в общем случае можно оптимизировать фильтрацию только по одной колонке. При обращении к данным из этого формата делается один простой запрос, тогда как в базах данных делается много маленьких (потому что у них индексация обычно настроена на несколько атрибутов). Именно это и облегчает работу с данными в вебе в этом формате.
Схема хранения данных в GeoParquet с сайта Cloud-Optimized Geospatial Formats Guide - GeoParquet (cloudnativegeo.org) (файл GeoParquet - группа строк - группа колонки/атрибута - атрибут геометрии - значения внутри группы атрибута (4 строки/объекта) - файл метаданных)
Если коротко, то GeoParquet подойдет для работы с табличными данными и/или, когда вы работаете с фреймворками Hadoop или Spark (большие инструменты для обработки и анализа данных). А FlatGeobuf подойдет, когда вы хотите быстро доставить на веб-карту векторные данные. Кажется, что это главное их различие, которое можно считать с описания форматов. А как оно на самом деле, вы разберетесь только на практике с реальными проектами.
Конечно, форматов намного больше. Из популярных, которые не разобраны в этой статье, например, COG (Cloud Optimized GeoTIFF) и PBF (векторные тайлы). У всех есть свои преимущества и недостатки, которые имеют различный вес в зависимости от проекта, ситуации и архитектуры решения.
Источники
Материал подготовила Наталья Волгушева