Нашел идеальный сервис для скачивания видео с YouTube
https://ytdlp.online/
По сути это просто веб-обертка для Python библиотеки
Прямо в браузере отображается выполняемая команда. Можно ее повторить у себя на локальном компе.
Так же там можно скачать последнюю версию библиотеки
Самый прикол в том что из-за того что сервис бесплатный, его создатели максимально с экономили затраты сервиса и реализовали скачивание видео в открытую папку, которая автоматически отчишается каждый час. И если перейти по адресу https://ytdlp.online/download/ можно увидеть что другие пользователи скачивали за последний час 😈
Сервис бесплатный.
Можно задонатить создателям через крипту или PayPel
#YouTube #video #download
https://ytdlp.online/
По сути это просто веб-обертка для Python библиотеки
yt-dlp при помощи которой можно качать видео при помощи Python скриптов или команды в терминале.Прямо в браузере отображается выполняемая команда. Можно ее повторить у себя на локальном компе.
Так же там можно скачать последнюю версию библиотеки
yt-dlp для разных операционных систем, чтоб скачивать видео прямиком себе на комп.Самый прикол в том что из-за того что сервис бесплатный, его создатели максимально с экономили затраты сервиса и реализовали скачивание видео в открытую папку, которая автоматически отчишается каждый час. И если перейти по адресу https://ytdlp.online/download/ можно увидеть что другие пользователи скачивали за последний час 😈
Сервис бесплатный.
Можно задонатить создателям через крипту или PayPel
#YouTube #video #download
👍2
Супер быстрая обрезка видео (ffmpeg + Python)
Сегодня обрезал видеозаписи некоторых мастерклассов с конференции Природоохранных ГИС Украины, для загрузки их на Ютуб канал. И сделал для себя величайшее открытие!
Раньше для обрезки видео использовал такие програмы как Openshot Video Editor или DaVinci Resolve. И эти программы дают мощный функционал для монтажа, но если нужно просто вырезать фрагмент, то они излишни. И конвертация больших видео занимает очень много времени, иногда часы.
Если нужно просто обрезать с видео по заданным секундам, то это можно сделать в 1000 раз быстрее при помощи программы ffmpeg, и автоматизировать обработку множества видео при помощи Python.
Ниже приведу код при помощи которого можно пакетно нарезать множество видео.
Шаги по подготовке:
0. Устанавливаете программу
1. Выписывате с какой по какую секунду нужно вырезать какое видео и куда сохранить фрагмент.
2. Записываете выписанную информацию в словарь
3. Запускаете скрипт. Он циклом проходит по всем словарям в списке, и вырезает нужные фрагменты.
Вырезать 2 видео разрешением 2560 x 1600 по полтора часа каждое заняло 4 секунды, всего ЧЕТЫРЕ секунды !!!
Фактически это просто обертка при помощи Python и subprocess вокруг команды:
Пояснения:
*
*
*
*
Кстати, первое из вырезанных видео про Обнаружение деревьев на космоснимках при помощи нейронных сетей (U-net) уже на ютуб канале: https://youtu.be/v09eLAgUFgs
Подписывайтесь на ютуб канал. В этом году были мощнейшие мастерклассы!
Постепенно всех их опубликуем.
#python #ffmpeg #video #video_editing
Сегодня обрезал видеозаписи некоторых мастерклассов с конференции Природоохранных ГИС Украины, для загрузки их на Ютуб канал. И сделал для себя величайшее открытие!
Раньше для обрезки видео использовал такие програмы как Openshot Video Editor или DaVinci Resolve. И эти программы дают мощный функционал для монтажа, но если нужно просто вырезать фрагмент, то они излишни. И конвертация больших видео занимает очень много времени, иногда часы.
Если нужно просто обрезать с видео по заданным секундам, то это можно сделать в 1000 раз быстрее при помощи программы ffmpeg, и автоматизировать обработку множества видео при помощи Python.
Ниже приведу код при помощи которого можно пакетно нарезать множество видео.
Шаги по подготовке:
0. Устанавливаете программу
ffmpeg1. Выписывате с какой по какую секунду нужно вырезать какое видео и куда сохранить фрагмент.
2. Записываете выписанную информацию в словарь
list_clip_settings3. Запускаете скрипт. Он циклом проходит по всем словарям в списке, и вырезает нужные фрагменты.
Вырезать 2 видео разрешением 2560 x 1600 по полтора часа каждое заняло 4 секунды, всего ЧЕТЫРЕ секунды !!!
import subprocess
from time import perf_counter
def fmt(seconds: float) -> str:
"""Форматирование секунд в HH:MM:SS."""
total = int(round(seconds))
h, rem = divmod(total, 3600)
m, s = divmod(rem, 60)
return f"{h:02d}:{m:02d}:{s:02d}"
list_clip_settings = [
{
"input": "video_source/20250723_Polischuk_Svidzinska.mp4",
"output": "video_masterklasses/20250723_Polishchuk_Olexandr-Tree_detection_for_help_U-net.mp4",
"start": "00:00:51",
"end": "01:31:17"
},
{
"input": "video_source/20250723_Polischuk_Svidzinska.mp4",
"output": "video_masterklasses/20250723_Svidzinska_Daria-analiz_prostorovo-chasovih_trendiv.mp4",
"start": "01:31:32",
"end": "02:55:22"
}
]
total_start = perf_counter()
for i in list_clip_settings:
input = i.get("input")
output = i.get("output")
start = i.get("start")
end = i.get("end")
cmd = [
"ffmpeg",
"-ss", start,
"-to", end,
"-i", str(input),
"-c", "copy",
"-map", "0",
"-movflags", "+faststart",
str(output)
]
t0 = perf_counter()
subprocess.run(cmd, check=True)
elapsed = perf_counter() - t0
print(f"Файл {str(output)} готов. Время на клип: {fmt(elapsed)}")
total_elapsed = perf_counter() - total_start
print("Готово!")
print(f"Общее затраченное время: {fmt(total_elapsed)}\n")
Фактически это просто обертка при помощи Python и subprocess вокруг команды:
ffmpeg -ss 01:31:32 -to 02:55:22 -i "path_to/input_file.mp4" -c copy -map 0 -movflags +faststart "path_to/output_file.mp4"
Пояснения:
*
-c copy — без перекодирования (качество 1:1, очень быстро).*
-ss и -to — время начала/конца от исходного видео.*
-map 0 — берём все дорожки из исходника (видео+аудио).*
-movflags +faststart — удобнее для проигрывания/загрузки (метаданные впереди).Кстати, первое из вырезанных видео про Обнаружение деревьев на космоснимках при помощи нейронных сетей (U-net) уже на ютуб канале: https://youtu.be/v09eLAgUFgs
Подписывайтесь на ютуб канал. В этом году были мощнейшие мастерклассы!
Постепенно всех их опубликуем.
#python #ffmpeg #video #video_editing
YouTube
Детекція дерев за допомогою U-net (Поліщук Олександр )
Як знайти дерева на супутникових знімках за допомогою нейромереж? У цьому майстер-класі Поліщук Олександр показує повний практичний пайплайн детекції дерев із використанням U-Net для семантичної сегментації — від підготовки даних до тренування моделі й перегляду…
🔥3❤1
Веб-приложение - вьювер влажности почвы.
Хорошо видно climate change. Влажность почвы резко падает после 2020 года. Особенно хорошо видно по северным регионам.
---
Сегодня изучал возможности работы с динамическим выбором и анализом данных при помощи слайдера в GEE, и создал такое веб-приложение:
https://gee-antonbiatov.projects.earthengine.app/view/smap-soil-moisture-0-100cm
Исходные данные обновляются каждые 3 часа. Но для удобства отображения данные усреднены за каждые 10 дней.
Можно кликнуть по карте и получить график как менялась влажность почвы с марта 2015 г., усредненная за период в 10 дней.
Т.к. это дейтвительно Big Data надо подождать пока будет проведен анализ и построится график.
Внизу страницы есть слайдер, двигая который можно на карте отобразить данные за разные даты.
🌟И самое главное!
Можете использовать исходный скрипт, подставив свои данные (температуру, NDVI etc.).
Там я все подробно описал:
https://code.earthengine.google.com/b0836e84583b15c49e0bd28a1311bba6
#gee #climate
Хорошо видно climate change. Влажность почвы резко падает после 2020 года. Особенно хорошо видно по северным регионам.
---
Сегодня изучал возможности работы с динамическим выбором и анализом данных при помощи слайдера в GEE, и создал такое веб-приложение:
https://gee-antonbiatov.projects.earthengine.app/view/smap-soil-moisture-0-100cm
Исходные данные обновляются каждые 3 часа. Но для удобства отображения данные усреднены за каждые 10 дней.
Можно кликнуть по карте и получить график как менялась влажность почвы с марта 2015 г., усредненная за период в 10 дней.
Т.к. это дейтвительно Big Data надо подождать пока будет проведен анализ и построится график.
Внизу страницы есть слайдер, двигая который можно на карте отобразить данные за разные даты.
🌟И самое главное!
Можете использовать исходный скрипт, подставив свои данные (температуру, NDVI etc.).
Там я все подробно описал:
https://code.earthengine.google.com/b0836e84583b15c49e0bd28a1311bba6
#gee #climate
🔥2
Фильтрация спекл-шумов на снимках Sentinel-1 в GEE
Работая над мониторингом лесопотерь по Sentinel-1, наткнулся на интересную статью о подготовке данных: https://doi.org/10.3390/rs13101954
.
Радарные снимки содержат спекл-шум (“соль и перец”) — результат интерференции отражённых микроволн от множества мелких объектов в пикселе. Для его снижения применяют фильтрацию.
Я сравнил разные алгоритмы (ядро 9 пикселей) на лесах, вырубках и населённых пунктах. Лучшие результаты дали Boxcar и GAMMA MAP. Lee показал средний результат, Refined Lee и Improved Lee Sigma — хуже, причём последний работал медленно.
Скрипты примененных мной фильтров в комментариях к оригинальному посту: https://t.me/gis_notes/8
#gee #sar #sentinel_1
Работая над мониторингом лесопотерь по Sentinel-1, наткнулся на интересную статью о подготовке данных: https://doi.org/10.3390/rs13101954
.
Радарные снимки содержат спекл-шум (“соль и перец”) — результат интерференции отражённых микроволн от множества мелких объектов в пикселе. Для его снижения применяют фильтрацию.
Я сравнил разные алгоритмы (ядро 9 пикселей) на лесах, вырубках и населённых пунктах. Лучшие результаты дали Boxcar и GAMMA MAP. Lee показал средний результат, Refined Lee и Improved Lee Sigma — хуже, причём последний работал медленно.
Скрипты примененных мной фильтров в комментариях к оригинальному посту: https://t.me/gis_notes/8
#gee #sar #sentinel_1
🔥3
Собрал простой вьювер лесопотерь по данным Sentinel-1 которые появились за прошедший год. Вьювер со шторокой - левая чать карты 2024-10-03, правая - 2025-10-04
https://gee-antonbiatov.projects.earthengine.app/view/galamsey2024-2025v01
даже не ожидал что на столько просто получиться выявить лесопотери (без машинлёнинга, только растровый калькулятор). Ключевые моменты описал в комментах к этому посту https://t.me/gis_notes/9
#gee #sar #sentinel_1 #forest #changedetection
https://gee-antonbiatov.projects.earthengine.app/view/galamsey2024-2025v01
даже не ожидал что на столько просто получиться выявить лесопотери (без машинлёнинга, только растровый калькулятор). Ключевые моменты описал в комментах к этому посту https://t.me/gis_notes/9
#gee #sar #sentinel_1 #forest #changedetection
🔥6🎄1
Скачать растр температуры поверхности по данным Landsat 8/9
Собрал простое приложение
1) нарисовать полигон на карте
2) настроить параметры поиска и запустить поиск снимков.
3) Выбрать один из найденных снимков
4) Отобразить на карте
5) Экспортировать GeoTiff
https://gee-antonbiatov.projects.earthengine.app/view/l8l9temperaturedownloader
Разница между данными полученными по Landsat 8 и 9 до 2-х градусов Цельсия. Что может быть обусловлено разным временем съемки.
#gee #landsat #temperature
Собрал простое приложение
1) нарисовать полигон на карте
2) настроить параметры поиска и запустить поиск снимков.
3) Выбрать один из найденных снимков
4) Отобразить на карте
5) Экспортировать GeoTiff
https://gee-antonbiatov.projects.earthengine.app/view/l8l9temperaturedownloader
Разница между данными полученными по Landsat 8 и 9 до 2-х градусов Цельсия. Что может быть обусловлено разным временем съемки.
#gee #landsat #temperature
🔥4
Наткнулся на геопортал где можно скачать ЦМР и ЦММ 50см/пиксел и классифицированное c RGB данными облако точек с детализацией 10 точек на 1м²
Можно по экспериментировать с такими данными.
Круто видны рельеф и старые дороги под сплошным лесным покровом.
И еще на портале интересно реализовано предоставление пользователю заказа с протухающими ссылками с таймером.
https://cdd.dgterritorio.gov.pt/dgt-fe
#data #lidar #dem #portugal
Можно по экспериментировать с такими данными.
Круто видны рельеф и старые дороги под сплошным лесным покровом.
И еще на портале интересно реализовано предоставление пользователю заказа с протухающими ссылками с таймером.
https://cdd.dgterritorio.gov.pt/dgt-fe
#data #lidar #dem #portugal
Очень рекомендую обратить внимание на файловый формат FlatGeobuf
Это один из довольно новых Cloud-Optimized Geospatial форматов. И можно прямо в QGIS подключить такие файлы по ссылке из интерента, и будут скачиваться и отображаться только фичи, которые попадают в область отображаемую на карте.
Вторая полезная функция, как по мне :
Очень удобно обменивать данные между R <- -> QGIS и поддерживает пространственные запросы прямо при чтении файла.
Т.е. можно читать не весь файл а только объекты в вашей зоне интереса.
И это можно делать не только с локальным файлом а и с файлом из интернета по ссылке.
В примере ниже чтение FlatGeobuf файла в R не полностью, а частично по зоне интереса
Подробнее про него можно почитать на официальных сайтах:
https://flatgeobuf.org/
https://guide.cloudnativegeo.org/flatgeobuf/intro.html
#R #FlatGeobuf #CloudOptimized
Это один из довольно новых Cloud-Optimized Geospatial форматов. И можно прямо в QGIS подключить такие файлы по ссылке из интерента, и будут скачиваться и отображаться только фичи, которые попадают в область отображаемую на карте.
Вторая полезная функция, как по мне :
Очень удобно обменивать данные между R <- -> QGIS и поддерживает пространственные запросы прямо при чтении файла.
Т.е. можно читать не весь файл а только объекты в вашей зоне интереса.
И это можно делать не только с локальным файлом а и с файлом из интернета по ссылке.
В примере ниже чтение FlatGeobuf файла в R не полностью, а частично по зоне интереса
wkt и потом запись FlatGeobuf файла из simple features (sf)library(sf)
# Чтение FlatGeobuf файла по ссылке из интернета
geobuf_url <- "https://esa-worldcover.s3.eu-central-1.amazonaws.com/esa_worldcover_grid_composites.fgb"
wkt <- "POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))"
# чтение всего файла из интернета
data <- read_sf(geobuf_url)
# Частичное чтение файла из интернета с фильтром по полигону
data_filtred <- read_sf(geobuf_url,
wkt_filter = wkt)
# Просмотр прочитанных данных
plot(data$geometry, col="blue")
plot(data_filtred$geometry, col="red", add = T)
# Запись FlatGeobuf файла локально в файловую систему
write_sf(data_filtred,
dsn="C:/Temp/my_data.fgb",
driver="FlatGeobuf",
delete_dsn= TRUE) # overwrite file
Подробнее про него можно почитать на официальных сайтах:
https://flatgeobuf.org/
https://guide.cloudnativegeo.org/flatgeobuf/intro.html
#R #FlatGeobuf #CloudOptimized
🔥4
установка QGIS в изолированную Conda среду
Иногда нужно собрать какую-то комбинацию очень специфических python библиотек для работы некоторых QGIS плагинов, при этом чтоб не поломалось то что и так работает.
И для этого хорошо подходит установка QGIS и необходимых дополнительных инструментов в изолированную от основной операционной системы среду.
Для этого нужно использовать Anaconda или Miniconda (инструкций по их установке множество)
Далее нужно запустить терминал в Anaconda-Navigator или в любом IDE «Интегрированная среда разработки», я использую Visual Studio Code.
Там при запуске нужно выбрать среду conda если она сама не подхватится.
далее в терминале вводить по очереди команды и дожидаться их выполнения. В этом примере я устанавливаю софт необходимый мне для расчетов потенциала солнечной энергии на крышах зданий:
дальше устанавливаем необходимые плагины через юзер интерфейс. в данном случае я доставляю UMEP и UMEP for processing. Но такой подход актуален и для установки других сложных плагинов типа PCRaster или Geo-SAM и т.д.
#qgis #pdal #conda #umep #install
Иногда нужно собрать какую-то комбинацию очень специфических python библиотек для работы некоторых QGIS плагинов, при этом чтоб не поломалось то что и так работает.
И для этого хорошо подходит установка QGIS и необходимых дополнительных инструментов в изолированную от основной операционной системы среду.
Для этого нужно использовать Anaconda или Miniconda (инструкций по их установке множество)
Далее нужно запустить терминал в Anaconda-Navigator или в любом IDE «Интегрированная среда разработки», я использую Visual Studio Code.
Там при запуске нужно выбрать среду conda если она сама не подхватится.
далее в терминале вводить по очереди команды и дожидаться их выполнения. В этом примере я устанавливаю софт необходимый мне для расчетов потенциала солнечной энергии на крышах зданий:
# создание среды qgis4solar_energy и установка туда QGIS LTR
conda create -n qgis4solar_energy -c conda-forge python=3.11 qgis=3.40.3
# подтвердить установку нажав "y"
# активировать среду
conda activate qgis4solar_energy
# проверим версию установленного QGIS
qgis --version
# устанавливаю другие необходимые тулы и библиотеки в эту же среду
# Solar / PDAL
conda install -n qgis4solar_energy -c conda-forge pysolar python-pdal
# SuPy зависимости
conda install -n qgis4solar_energy -c conda-forge \
pandas matplotlib chardet scipy pydantic \
f90wrap=0.2.16 dask f90nml seaborn cdsapi xarray \
multiprocess click lmfit numdifftools pvlib platypus-opt
# UMEP зависимости и немного больше
conda install -n qgis4solar_energy -c conda-forge \
numba=0.59.0 jaydebeapi=1.2.3 netCDF4 openpyxl rioxarray \
rasterio geopandas numpy laspy scipy shapely scikit-learn scikit-image
# можно устанавить библиотеки и чере pip если их нет в conda репозитории
python -m pip install xlrd xlwt xlutils ipykernel
python -m pip install "supy==2024.5.24.dev" atmosp target-py
# теперь можно запустить QGIS набрав в терминале:
qgis
дальше устанавливаем необходимые плагины через юзер интерфейс. в данном случае я доставляю UMEP и UMEP for processing. Но такой подход актуален и для установки других сложных плагинов типа PCRaster или Geo-SAM и т.д.
#qgis #pdal #conda #umep #install
🔥6👍1
PMTiles - Еще один крутой Cloud Optimized формат созданный для простой публикации геоданных в интернет.
Этот формат нацелен на отображения геоданных в браузере и представляет собой пирамиды тайлов собранные в единый файл.
Этот формат может хранить как векторные так и растровые тайлы. И способен содержать очень довольно большие данные внутри себя, и на клиент отдавать только нужные тайлы по GET запросу от клиента, без скачивания всего файла .pmtiles
Это позволяет публиковать даже очень большие растры и векторы без использования специальных программ или веб сервисов для рендеринга данных типа Geoserver, NextGIS web, ArcGIS Online etc.
Просто загружаете file.pmtiles на веб-хостинг или файловое хранилище типа AWS S3 и прямой URL-ссылкой на файл подключаете в свое приложение на MapLibre или Leaflet.
Базовые команды по созданию PMTiles:
1. Векторные PMTiles из векторного GeoJSON файла. Понадобится утилита
2. Растровые PMTiles из GeoTIFF файла. Понадобится утилита
Резюме: PMTiles Это очень крутой формат, если вам надо просто опубликовать векторные или растровые карты, и не хочется париться с установкой и настройкой geosever или аналога, или использовать сторонние Веб-ГИС сервисы.
Вот пример приложения в котором я подключил 23 растра (исходные Geotiff были по 1 Гб, а PMTiles получились по 500 Мб каждый), и 23 PMTiles с векторными тайлами внутри, по несколько мегабайт каждый. В итоге в облако было загружено более 13 Gb данных. Зацените скорость рендеринга: https://fra1.digitaloceanspaces.com/abspatial/demo/ghana-galamsey/index.html
Пошаговая инструкция по установке необходимого софта, скрипты генерации pmtiles на python, ключевые настройки при конвертации и примеры подключения в веб-приложение размещу в комментариях к оригинальному посту https://t.me/gis_notes/20
#web #rendering #CloudOptumized #tiles #PMTiles #vectortiles #tippecanoe #rio
Этот формат нацелен на отображения геоданных в браузере и представляет собой пирамиды тайлов собранные в единый файл.
Этот формат может хранить как векторные так и растровые тайлы. И способен содержать очень довольно большие данные внутри себя, и на клиент отдавать только нужные тайлы по GET запросу от клиента, без скачивания всего файла .pmtiles
Это позволяет публиковать даже очень большие растры и векторы без использования специальных программ или веб сервисов для рендеринга данных типа Geoserver, NextGIS web, ArcGIS Online etc.
Просто загружаете file.pmtiles на веб-хостинг или файловое хранилище типа AWS S3 и прямой URL-ссылкой на файл подключаете в свое приложение на MapLibre или Leaflet.
Базовые команды по созданию PMTiles:
1. Векторные PMTiles из векторного GeoJSON файла. Понадобится утилита
tippecanoe https://github.com/mapbox/tippecanoetippecanoe -zg --projection=EPSG:4326 -o "path/output_file.pmtiles" -l layer_name --coalesce-densest-as-needed --extend-zooms-if-still-dropping "path/input_file.geojson"
2. Растровые PMTiles из GeoTIFF файла. Понадобится утилита
rio pmtiles https://pypi.org/project/rio-pmtiles/rio pmtiles "path/input_file.tif" "path/otput_file.pmtiles" --format PNG --resampling nearest
Резюме: PMTiles Это очень крутой формат, если вам надо просто опубликовать векторные или растровые карты, и не хочется париться с установкой и настройкой geosever или аналога, или использовать сторонние Веб-ГИС сервисы.
Вот пример приложения в котором я подключил 23 растра (исходные Geotiff были по 1 Гб, а PMTiles получились по 500 Мб каждый), и 23 PMTiles с векторными тайлами внутри, по несколько мегабайт каждый. В итоге в облако было загружено более 13 Gb данных. Зацените скорость рендеринга: https://fra1.digitaloceanspaces.com/abspatial/demo/ghana-galamsey/index.html
Пошаговая инструкция по установке необходимого софта, скрипты генерации pmtiles на python, ключевые настройки при конвертации и примеры подключения в веб-приложение размещу в комментариях к оригинальному посту https://t.me/gis_notes/20
#web #rendering #CloudOptumized #tiles #PMTiles #vectortiles #tippecanoe #rio
GitHub
GitHub - mapbox/tippecanoe: Build vector tilesets from large collections of GeoJSON features.
Build vector tilesets from large collections of GeoJSON features. - mapbox/tippecanoe
🔥3
Grasslands датасеты в GEE
Наткнулся на интересные датасеты - результат работы Global Pasture Watch (Land and Carbon Lab)
Там доволно неплохо детектированы луга и степи стран Восточной Европы. Правда почти все они относятся к классу "Cultivated grassland" и только совсем малая часть относится к "Natural/Semi-natural grassland". Если сравнивать данные за разные даты, хорошо видна динамика потерь грасландов.
Временной диапазон: 2000–2022
Шаг прогноза: 1 год
Разрешение: 30 м/пикс
GPW Annual Dominant Class of Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_grassland_c
GPW Annual Probabilities of Cultivated Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_cultiv-grassland_p
GPW Annual Probabilities of Natural/Semi-natural Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_nat-semi-grassland_p
На страницах описания в GEE также есть ссылки на страницы от куда можно качнуть данные одним файлом на много гигабайт каждый.
Еще лично у меня вызвало интерес что эти датасеты построены на базе данных GLAD Landsat ARD-2 images Давно приматриваюсь к этому продукту и инструменту.
В этом примере объеденил визуализацию всех этих трех датасетов:
#gee #data #landcover #landuse #grassland
Наткнулся на интересные датасеты - результат работы Global Pasture Watch (Land and Carbon Lab)
Там доволно неплохо детектированы луга и степи стран Восточной Европы. Правда почти все они относятся к классу "Cultivated grassland" и только совсем малая часть относится к "Natural/Semi-natural grassland". Если сравнивать данные за разные даты, хорошо видна динамика потерь грасландов.
Временной диапазон: 2000–2022
Шаг прогноза: 1 год
Разрешение: 30 м/пикс
GPW Annual Dominant Class of Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_grassland_c
GPW Annual Probabilities of Cultivated Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_cultiv-grassland_p
GPW Annual Probabilities of Natural/Semi-natural Grasslands v1:
https://developers.google.com/earth-engine/datasets/catalog/projects_global-pasture-watch_assets_ggc-30m_v1_nat-semi-grassland_p
На страницах описания в GEE также есть ссылки на страницы от куда можно качнуть данные одним файлом на много гигабайт каждый.
Еще лично у меня вызвало интерес что эти датасеты построены на базе данных GLAD Landsat ARD-2 images Давно приматриваюсь к этому продукту и инструменту.
В этом примере объеденил визуализацию всех этих трех датасетов:
Map.setCenter(39.927, 48.231, 7);
Map.setOptions("HYBRID");
// Annual Probabilities of Cultivated Grasslands
var cultiv_grassland = ee.ImageCollection(
"projects/global-pasture-watch/assets/ggc-30m/v1/cultiv-grassland_p"
)
var min_prob = 32 // Probability threshold
var visParams = {min: 15, max: 85, palette: 'f5f5f5,fdaf27,ae7947,3a2200'}
var cultiv_grassland_2022 = cultiv_grassland.filterDate('2022-01-01', '2023-01-01').first();
Map.addLayer(
cultiv_grassland_2022.mask(cultiv_grassland_2022.gte(min_prob)),
visParams, 'Cultivated grassland prob. (2022)'
);
var cultiv_grassland_2000 = cultiv_grassland.filterDate('2000-01-01', '2001-01-01').first();
Map.addLayer(
cultiv_grassland_2000.mask(cultiv_grassland_2000.gte(min_prob)),
visParams, 'Cultivated grassland prob. (2000)',
false
);
// Annual Probabilities of Natural/Semi-natural Grasslands
var nat_semi_grassland = ee.ImageCollection(
"projects/global-pasture-watch/assets/ggc-30m/v1/nat-semi-grassland_p"
)
var min_prob = 42 // Probability threshold
var visParams = {min: 15, max: 85, palette: 'f7f1e5,af8260,803d3b,322c2b'}
var nat_semi_grassland_2022 = nat_semi_grassland.filterDate('2022-01-01', '2023-01-01').first();
Map.addLayer(
nat_semi_grassland_2022.mask(nat_semi_grassland_2022.gte(min_prob)),
visParams, 'Natural/Semi-natural grassland prob. (2022)'
);
var nat_semi_grassland_2000 = nat_semi_grassland.filterDate('2000-01-01', '2001-01-01').first();
Map.addLayer(
nat_semi_grassland_2000.mask(nat_semi_grassland_2000.gte(min_prob)),
visParams, 'Natural/Semi-natural grassland prob. (2000)',
false
);
// Annual Dominant Class of Grasslands
var domi_grassland = ee.ImageCollection(
"projects/global-pasture-watch/assets/ggc-30m/v1/grassland_c"
);
var visParams = {"opacity":1, "min":1,"max":2,"palette":["ffcd73","ff9916"]};
var domi_grassland_2022 = domi_grassland.filterDate('2022-01-01', '2023-01-01').first();
Map.addLayer(
domi_grassland_2022.selfMask(),
visParams, 'Dominant grassland class (2022)'
);
var domi_grassland_2000 = domi_grassland.filterDate('2000-01-01', '2001-01-01').first();
Map.addLayer(
domi_grassland_2000.selfMask(),
visParams, 'Dominant grassland class (2000)',
false
);
#gee #data #landcover #landuse #grassland
Google for Developers
GPW Annual Dominant Class of Grasslands v1
This dataset provides global annual dominant class maps of grasslands (cultivated and natural/semi-natural) from 2000 to 2022 at 30-m spatial resolution. Produced by the Land & Carbon Lab Global Pasture Watch initiative, the mapped grassland extent includes…
🔥6
Как скачать ArcGIS Feature layer на Python и экспортировать в GeoPackage.
Столкнулся с такой задачей и пободавшись с этой проблемой день нашел элегантное решение.
Предварительные шаги на скриншоте.
Важно скопировать ссылку на шаге "3" с правильной цифрой в конце.
#python #download #data #arcgis #agol
Столкнулся с такой задачей и пободавшись с этой проблемой день нашел элегантное решение.
Предварительные шаги на скриншоте.
Важно скопировать ссылку на шаге "3" с правильной цифрой в конце.
import pyogrio
OUT_GPKG = "arcgis_feature_layer.gpkg"
LAYER = "arcgis_feature_layer"
URL_service = "https://services.arcgis.com/mMUesHYPkXjaFGfS/ArcGIS/rest/services/Manitoba_Provincial_Forests___Version_6/FeatureServer/1"
url = (
f"{URL_service}"
"/query"
"?where=1%3D1"
"&outFields=*"
"&returnGeometry=true"
"&outSR=4326"
"&f=pjson" # ВАЖНО: ESRI JSON, не geojson
)
# ВАЖНО: префикс ESRIJSON: заставляет GDAL открыть именно этим драйвером
gdf = pyogrio.read_dataframe("ESRIJSON:" + url)
# Экспорт
gdf.to_file(
OUT_GPKG,
driver="GPKG",
layer=LAYER,
index=True,
mode="w",
engine="pyogrio"
)
#python #download #data #arcgis #agol
🔥4
Автоматическая корегистрация растров на Python
Если нужно совместить несколько немного разъехавшихся растров, на пример ортофотопланы за разные даты или ортофотоплан и космоснимок, без ручной привязки по точкам помогает AROSICS
больше примеров и описания параметров в коментариях к оригинальному посту>>
#python #raster #changedetection
Если нужно совместить несколько немного разъехавшихся растров, на пример ортофотопланы за разные даты или ортофотоплан и космоснимок, без ручной привязки по точкам помогает AROSICS
from arosics import COREG
INPUT_RASTER_1 = "orthophoto_025m.tif"
INPUT_RASTER_2 = "demo_sat_google_1m.tif"
OUTPUT_RASTER_1 = "sat_google_025m.tif"
# 1. Очистка лишних метаданных статистики
!gdal_edit.py -unsetstats {INPUT_RASTER_1}
!gdal_edit.py -unsetstats {INPUT_RASTER_2}
# 2. Инициализация AROSICS с параметрами ресемплинга
cr = COREG(INPUT_RASTER_1, INPUT_RASTER_2,
ws=(512, 512),
path_out=OUTPUT_RASTER_1,
max_shift=25,
resamp_alg_deshift='cubic',
match_gsd=True,
align_grids=True
)
# 3. Расчет сдвига
cr.calculate_spatial_shifts()
# 4. Применение сдвига и ресемплинга
cr.correct_shifts()
больше примеров и описания параметров в коментариях к оригинальному посту>>
#python #raster #changedetection
🔥6
Как создать DEM из облака точек или использоваие пайплайнов PDAL в python.
PDAL (Point Data Abstraction Library) — это библиотека для работы с облаками точекю.
Особеность в том что работает в конвеере который описывает шаги в JSON
Примеры скриптов для обрезки LAZ по полигону и генерации ЦМР в комментариях к оригинальному посту>>
#pdal #lidar #dem #dsm #pointcloud
PDAL (Point Data Abstraction Library) — это библиотека для работы с облаками точекю.
Особеность в том что работает в конвеере который описывает шаги в JSON
import json
import pdal
# Обрезка облака точек по экстенту
pipeline_clip_by_extent = [
{
"type": "readers.las",
"filename": input_laz_file
},
{
"type": "filters.crop",
"bounds": f"([{minx},{maxx}],[{miny},{maxy}])"
},
{
"type": "writers.las",
"filename": clipped_by_bbox_file
}
]
pipeline_json = json.dumps(pipeline_clip_by_extent)
print(pipeline_json)
pipeline = pdal.Pipeline(pipeline_json)
count = pipeline.execute()
arrays = pipeline.arrays
metadata = pipeline.metadata
log = pipeline.log
print(count)
Примеры скриптов для обрезки LAZ по полигону и генерации ЦМР в комментариях к оригинальному посту>>
#pdal #lidar #dem #dsm #pointcloud
👍4🔥2