В этой статье рассмотрим как создать тематический геопортал на пример "Birds of the Fruska Gora National Park" на основании Darwin Core Archive скачанного из GBIF.
Для запуска такого Biodiversity Data Portal подойдет любой веб-хостинг. Данный метод использует парадигму Serverless GIS. Не нужно создавать ни каких баз данных или запускать специальное программное обеспечение на сервере или в Docker. Можно быстро запустить тематический геопортал без PostGIS, GeoServer и других сложных программ.
Этот Serverless GIS подход к создани веб ГИС особенно полезен для природоохраных организаций, проектов мониторинга видов, полевых экспедиций, локальных коллекций и демонстрационных геопорталов.
Будем действовать по следующему плану:
- Скачать нужные данные из GBIF.org
- Конвертировать Darwin Core Archive в минималистичное веб приложение с настройками по умолчанию.
- Настроим веб приложение при помощи файла настроек (Изменим заголовок, описание, скроем часть фильтров, ссылки на данные и некоторые другие элементы интерфейса).
- Добавим в приложение новые возможности при помощи ИИ кодинг агента.
- Загрузим готовое приложение на хостинг.
Получение данных из GBIF
Заходим на портал gbif.org и на главной странице видим строку поиска, в которой можно искать нужный таксон. Я указал таксон "aves" потому что сейчас решил создать геопортал "Birds of the Fruska Gora National Park".
После нажатия кнопки "Поиск" пересылается на страницу https://www.gbif.org/search?q=aves . На этой странице нужно нажать кнопку "Occurrences" в правой части экрана, потомучто нам нужны записи о конкреных встречах.
Нас перенаправляет на страницу https://www.gbif.org/occurrence/search?taxonKey=V2 . На этой странице представлены все записи птиц, которые имеются в базе данных GBIF.
Сначала выберем "Occurrence status": "Present".
Далее нам нужно выбрать только точки которые имеют координаты. Для этого применяем фильтр "Location" -> "Has coordinate" -> "Yes"
Потом можно отфильтровать оставшиеся точки по стране, региону, экстенту, полигону нарисованному на карте или загрузить свою территоию интереса в формате GeoJSON или WKT Geometry.
Я построил буфер 500 метров вокруг полигона Fruska Gora National Park и конвертировал его в GeoJSON в системе координат WGS84 (EPSG:4326).
Открыл созданный GeoJSON файл в текстовом редакторе и скопировал его содержимое в буфер обмена.
Далее на странице с Occurrences открыть фильтр "Location" и в открывшемся Pop-up перейти на вкладку "Geometry".
В область для вставки текста нужно вставить текст скопированный из GeoJSON файла и нажать кнопку "Add".
Если геометрия полигона содержит слишком много улов, вы увидите предупреждение "Geometry too large".
Можно автоматически упростить геометрию прямо здесь. Для этого нужно нажать кнопку "Simplify".
После упрощения геометрии, результат будет отображен в формате WKT. Нужно нажать кнопку "Apply".
Потом можно добавить фильтр "Basis of record". Для этого нажмите кномпку "More" -> "Basis of record" -> "Human observation" и "Machine observation".
На вкладке "Map" можно посмотреть предпросмотр полигона фильтрации и отфильтрованные данные на вебкарте. Отфильтрованные точки сгруппированы в несколько кластеров.
Потом переходим на вкладку "Download". Здесь нужно выбрать формат экспорта - "Darwin Core Archive".
На следующем этапе сразу переходите к кнопке "Continue to Terms". Никаких Extensions выберать не нужно.
На следующем шаге ставьте чекбоксы "Data Use Agreement" и "Data Citation" и нажимайте кнопку "Create download".
После этого будее перенаправлены на странцу загрузки. Нужно будет подождать некоторе время пока данные будут подготовлены. После того как Darwin Core Archive с отфильтрованными данными будет готов, вы получите сообщение на email. И на странице загрузки будет видна сводная информация о датасете и информация для цитирования.
В данном примере я использую датасет, который содежит 4,854 точек регистрации птиц на територии прилегающей к Fruska Gora National Park.
GBIF.org (5 August 2026) GBIF Occurrence Download https://doi.org/10.15468/dl.zqcmw5
Дальше нужно скачать архив и работать с ним локально.
Конвертировать Darwin Core Archive в безсерверное веб-приложение
Для конвертации нужно использовать конвертер https://github.com/ABiatov/dwca-cloud-geospatial
Этот конвертер можно использовать как приложение установленное на компьютер, так и онлайн в Google Colab notebook. Конвертер dwca-cloud-geospatial имеет GUI (Graphical User Interface), CLI (Command Line Interface) and Python API. Более развернутую инструкцию по различным вариантам испоьзования данного инструмента я описывал в статье "How to Convert and Stream Biodiversity Data with FlatGeobuf, GeoParquet, and Zero Infrastructure".
В этой статье я покажу только вариант с использованием GUI, потому что цель данной статьи кастомизация вьювера полученного в результате конвертации, без погружения в детали конвертации.
Для установки данного конвертера нужно открыть терминал и пошагово выполнить следующие команды:
git clone https://github.com/ABiatov/dwca-cloud-geospatial.git
cd dwca-cloud-geospatial
export REPO="$(pwd)"
python -m venv "${REPO}/.venv"
source "${REPO}/.venv/bin/activate"
python -m pip install --upgrade pip
python -m pip install -e "${REPO}[dev,flatgeobuf,validation]"
Если вы устанавливали ковертер ранее, то после запуска нужно только перейти в папку установки и активировать переменные окружения, чтоб система увидела команды конвертера.
cd dwca-cloud-geospatial
export REPO="$(pwd)"
python -m venv "${REPO}/.venv"
source "${REPO}/.venv/bin/activate"
Потом, для запуска графического интерфейса выполните в терминале команду:
dwca-cloud-geospatial-gui
Конвертер имеет очен простой интерфейс.
- input: путь к zip-файлу исходного Darwin Core Archive
- output: путь к папке куда будут экспортрованы результаты конвертации
- FlatGeobuf (чекбокс):указывает что нам нужно сохранить результат в формате FlatGeobuf для отображения данных на карте.
- GBIF DOI citation lookup (чекбокс): дополнительно запрашивает DOI цитату с сервера GBIF для конкретного архива.
- Overwrite existing output (чекбокс): рекомендую, чтоб небыло проблем с записью результата.
Если вам дополнительно нужен GeoParquet для предоставления доступа к данным или использования данных программно, то нужно поставить чекбоксы "GeoParquet" и "GeoParquet large-output mode (bbox+grid sort)".
Для старта конвертации нажмите кнопку "Convert".
Время выполнения конвертации зависит от объема данных.
В результате в папке будет созданы файлы данных, метаданных и файлы вьювера.
В результате конвертации создается веб-приложение, которое можно запускать в веб-браузере на localhost или загружать на вебхостинг.
Для простоты запуска на localhost и быстрого просмотра результатов кастомизации я использую плагин Live Server для VS Code. Вы можете обойтись без него, воспользовавшись инструкциями, которые дает ковертер.
Веб-приложение имеет заголовок по умолчанию, и описание приложения по умолчнию. Также на левой панели есть четыре вкладки: "Dataset info", "Filters", "List of records", "Download".
Настройка веб-приложения
Настройка приложения производится в файле manifest.json .
Откройте файл manifest.json в текстовом редакторе. Я рекомендую использовать для работы с ним VS Code или любой другой редактор с подсветкой синтаксиса.
Изменение названия приложения
В файле найдите ключ "map_title". Замените дефолтное название приложении на ваше собственное название. В моем случае я записал название "Birds of the Fruska Gora National Park" вместо "Custom map title, edit it in manifest.json".
"map_title": "Birds of the Fruska Gora National Park",
Сохраните правки в файле и потом перезагрузите страницу с приложением в браузере.
Кастомизация "App Description"
Если нажать на кнопку "App Description", то откроется попап в котором можно разместить дополнительную информацию о приложении.
App Description поддержиает ограниченный набор html тегов: p, b, i, h2, h3, h4, a, img, br, ol, ul, li, table, tr, td, iframe, center, small.
Для изменения "App Description" найдите ключ "appDescription" в файле manifest.json .
Замените его содержимое вашим кастомным HTML-текстом. Учтите что содержимое нужно записать в одну строку и кавычки внутри строки нужно экранировать при помощи обратного слеша.
Пример моего кастомного "App Description":
"appDescription": "<center><h2>Demonstration project \"Birds of the Fruska Gora National Park.\"</h2></center></p>This portal was created using the dwca-cloud-geospatial tool and data from <a href=\"https://www.gbif.org\" target=\"_blank\">GBIF.org</a></p><p>The demonstration site is <b>Fruska Gora National Park</b> (<a href=\"https://npfruskagora.co.rs/\" target=\"_blank\">website</a>, <a href=\"https://www.facebook.com/fruskagora1960\" target=\"_blank\">Facebook</a>, <a href=\"https://www.instagram.com/fruskagoranp/\" target=\"_blank\">Instagram</a>).</p><center><img src=\"https://fruskagoranovisajt.rs/wp-content/uploads/2026/01/kiselez.jpg\" alt=\"Fruska Gora National Park Logo\" width=\"400\"></center><p>Fruska Gora National Park is located in the northern part of Serbia, in the province of Vojvodina. It is known for its rich biodiversity, including a variety of bird species, making it an important area for bird conservation and research.</p><p>The national park's polygon was taken from the <a href=\"https://www.protectedplanet.net/country/SRB\" target=\"_blank\">Protected Planet</a> portal.</p>",
Сохраните правки и перезагрузите страницу в браузере.
Скрыть отдельные элементы интерфейса, фильтры и данные
Для того чтоб скрывать все панели их содержимое в файле manifest.json предусмотрен целый набор ключей в разделе "visibility".
Меняя значения "is_visible": true на "is_visible": false можно скрывать отдельные элементы на панелях и целые панели. Также можно отключить окрытие popup при клике на точку на карте.
Сохраните правки и перезагрузите страницу в браузере.
На этом этапе приложение уже настроено и может использоваться как локальный Biodiversity Data Portal.
Расширение функционала приложения при помощи ИИ
Полученное приложение является удобной отправной точкой для кастомизации и расширения функционала, которое необходимо вам в вашем локальном проекте.
Сейчас при помощи ИИ можно быстро добавлять различный функционал в это приложение. Для этого буквально нужно выполнить один промпт.
На пример я хочу добавить полигон национального парка Fruska Gora как отдельный слой на вебкарту.
Для начала я копирую GeoJSON файл полигона нацпарка np-frushka-gora.geojson в папку data.
Потом, для редактирования приложения я использую Codex, который подключен у меня в VS Code при помощи официальный плагин "Codex – OpenAI’s coding agent". Вы можете любой другой ИИ coding agent.
Открываю папку с приложением в VS Code и пишу промпт для Codex:
# Add the Fruska Gora National Park polygon to the web map as a separate layer.
Context:
- `index.html`
- `app.js`
Layer to add: `data/np-frushka-gora.geojson`
Layer fill opacity 0.2. Layer stroke width 2 and non-transparent.
This layer is enabled by default when loading the map.
Add a simple menu where I can toggle this layer on and off.
The added layer should be located below the layer of points loaded from the FGB file.
Codex модифицирует файлы приложения и добавит новый слой в приложение и сосдаст чекбокс лоя управления видимостью слоя. Далее можно настраивать отображение слоя и виджета управления слоями.
Аналогичным способом можно вносить другие правки, например, можно добавить космические снимки в базовые карты.
Загрузка на хостинг
Для публикации приложения в интеренете нужно просто скопировать файлы приложения и данные на хостинг. При этом нужно сохранить относительные пути между файлами.
Для загрузки можно использовать FTP клиент или веб интерфейс хостинга.
Созданное приложение я загрузил на AWS S3 Storage: https://abspatial.s3.amazonaws.com/birds-fruskagora/index.html
Выводы
Из Darwin Core Archive можно быстро получить самостоятельный тематический геопортал, который не требует базы данных, PostGIS, GeoServer или серверной логики. Данные хранятся в статических файлах, а карта и интерфейс работают непосредственно в браузере.
Такой подход хорошо подходит для небольших и средних тематических наборов данных: проектов национальных парков, мониторинга видов, экспедиций, локальных коллекций и демонстрационных порталов. Портал легко разместить на обычном статическом хостинге, в том числе AWS S3, GitHub Pages или на виртуальном хостинге.
Файл manifest.json позволяет адаптировать готовое приложение без программирования, а coding agent помогает расширить его: добавить тематические слои, переключатели, новые базовые карты и элементы интерфейса.
При публикации важно сохранить структуру каталогов и относительные пути к данным. Для крупных, часто обновляемых наборов данных, сложного поиска, авторизации или редактирования данных в браузере уже может потребоваться серверная архитектура и полноценная геопространственная база данных.
Весь процесс описанный в данной статье вы можете посмотреть в видео, на английском языке:























Комментариев нет:
Отправить комментарий