Управление пространственными данными для информационной панели My Wildfire Detection
10 февраля 2023 г.Несколько недель назад я поделился историей создания панели управления Fire Alert. Если вы не знакомы с ним, вы можете прочитать о это сейчас.
Как я объяснил в своем предыдущем посте, я работаю со спутниковыми данными НАСА, которые любезно предоставлены через открытый API. Два спутника, «Аква» и «Терра», снабжены камерами для обнаружения тепла, способными обнаруживать существенные перепады температуры на уровне земли, таким образом изолируя горячие точки, которые, наиболее вероятно, являются лесными пожарами. Типичный отчет со спутников выглядит так:
| Поле | Значение | |----|----| | Широта | 36,79887 | | Долгота | 12.01467 | | Время | 01.18.2023 12:21 |
Эти важные необработанные данные не могут быть напрямую переведены на карту как есть. Есть несколько проблем с ним:
* конечная точка API не сохраняет память о предыдущих вызовах и неизбежно возвращает одни и те же наблюдения несколько раз. Я хочу распознавать эти экземпляры как известные точки доступа, не вызывая новых предупреждений;
* спутники, пролетающие над Землей в разное время, обнаружат участки горячей земли на месте известных горячих точек. Скорее всего, все наблюдения касаются одного события, которое все еще продолжается. Я хочу сравнить новые данные с предыдущими наблюдениями;
* горячая точка могла резко исчезнуть из обзора со спутника: возможно, пожар прекратился, но возможно, что плотный дым или облака скрывают реальную ситуацию на местности. Поэтому я хочу, чтобы активные области имели некоторую липкость и оставались на панели инструментов, даже если о них ненадолго не сообщается.
Анализируя эти требования, я понял, что мне нужно подходящее определение для события горячей точки, которое идет дальше, чем простое наблюдение в определенный момент времени. С этой целью я лично разработал грубую эвристику: событие горячей точки определяется любым количеством наблюдений, происходящих в радиусе 2 км и в пределах 24-часового временного окна.
Почему цифра 2 км? Что ж, в оптимальных условиях степень детализации исходных данных составляет 1 км, поэтому я дал себе небольшую слабину и удвоил это число, чтобы ограничить ложные срабатывания. Однако ошибка спутника может быть намного больше (до 5 км), если определенная часть изображения находится на краях выполняемого сканирования. Это отклонение можно объяснить, но пока я решил не усложнять его.
Общий рабочий процесс
Учитывая вышеупомянутые предпосылки, теперь я могу правильно объяснить, как работает прием данных в Fire Alert. Прежде всего, я ежечасно вызываю спутниковый API для получения обновленных данных по заданной области. Я получу отчет с определенным количеством наблюдений. Как упоминалось выше, я хочу убедиться, что каждая обрабатываемая запись действительно уникальна: я комбинирую широту, долготу и время наблюдения, чтобы получить уникальный ключ и отфильтровать случайные дубликаты.
На этом этапе я всегда обращаю внимание на новое местоположение точки доступа. Это важно для прослеживаемости, а также для сбора исторических данных с течением времени и возможности проведения дальнейшего анализа в будущем. Я верю, что осенью, после сезона лесных пожаров, у меня будет больше важных наблюдений, чтобы лучше узнать об этом явлении.
Последним шагом рабочего процесса является применение моей эвристики. Я ищу все недавние пожары, которые были зарегистрированы в радиусе 2 км от нового наблюдения: если я что-то нахожу, это означает, что, скорее всего, в этом месте все еще продолжается пожар, и мне нужно обновить существующую точку доступа. В противном случае я позвоню в колокольчик и сообщу о событии новой точки доступа как на панели управления Fire Alert, так и в специальном канале Telegram.
Работа с пространственными данными
Из-за характера моего приложения мне нужно было правильно обрабатывать, сохранять и сопоставлять пространственные данные. Учитывая, что я работаю с довольно небольшими расстояниями, расстояние между двумя парами координат можно приблизительно вычислить, как если бы Земля была плоской (равнопрямоугольное приближение).
Однако было бы довольно громоздко и неэффективно искать все точки в пределах определенного радиуса, как я делаю с моей эвристикой, и затрудняет расширение приборной панели новыми функциями, такими как поиск событий в определенных географических областях, таких как некоторые национальные дикие животные. парк или, скажем, над территорией Греции.
Другими словами, мне нужна была Географическая информационная система или ГИС. К счастью, Postgres поддерживает модуль ГИС, который неудивительно называется PostGIS. Плагин позволяет использовать новые интересные типы данных, такие как GEOMETRY
(объект, живущий на декартовой плоскости) или GEOGRAPHY
(объект, лучше всего представленный на поверхности Земли). Например, событие горячей точки можно легко сохранить в виде записи в следующей таблице:
https://gist.github.com/Ipanov7/7d1f95921c7631cbe46a5dba7342210e#file-hotspot-sql< /p>
Используя дополнительные методы, такие как ST_Distance
и ST_GeogFromText
(для анализа строкового представления объекта GEOGRAPHY
), становится тривиальным выбор всех событий горячих точек в местонахождении. новых наблюдений:
https://gist.github.com/Ipanov7/2ffcc8a7543fcf83cbe3d257d6dccc19#file-select-hotspot- расстояние-sql
Настройка PostGIS требует определенных настроек. Чтобы включить его в своем экземпляре RDS, я выполнил следующие инструкции.
Заключение
В этом посте я подробно рассказал о своей работе с панелью управления Fire Alert. Я считаю, что это дает необходимую ясность и контекст для самых любознательных пользователей, а также прозрачность того, как это работает.
Если вы являетесь экспертом в обработке геопространственных данных и у вас есть мнение или, что еще лучше, ценный совет, которым вы можете поделиться, пожалуйста, не стесняйтесь делать это в комментариях или по электронной почте. Ваши предложения будут высоко оценены!
И последнее, но не менее важное: если вы были заинтригованы этой статьей, но никогда не посещали настоящую панель Fire Alert**, вы можете исправить это прямо сейчас.
Также опубликовано здесь. а>
Главное изображение источник.
Ссылки
- Я создал инструмент для отслеживания лесных пожаров: вот почему< /а>
- Расчет расстояния, пеленга и других параметров между точками широты/долготы
- Управление пространственными данными с расширением PostGIS
Оригинал