Простой способ загрузки обрезанных спутниковых изображений с помощью Python и Google Earth Engine

Простой способ загрузить сотни обрезанных спутниковых изображений без извлечения всего растрового файла - Python & Google Earth Engine

Простой способ загрузить сотни обрезанных спутниковых изображений без извлечения всего растрового файла

Введение

Спутниковые изображения являются ценным источником данных для различных применений, таких как мониторинг землепользования, оценка урожайности сельскохозяйственных культур и планирование инфраструктуры. Однако получение отдельных обрезанных изображений из больших растровых файлов может быть сложным и трудоемким процессом.

В этой статье мы представим простой способ автоматической загрузки сотен обрезанных спутниковых изображений с использованием Python без извлечения всего растрового файла. Для этого мы будем использовать библиотеку rasterio для чтения и обработки спутниковых изображений и возможности облачной платформы Google Earth Engine (GEE) для быстрой и эффективной обрезки изображений.

Настройка

Прежде чем приступить к загрузке изображений, нам необходимо настроить среду Python и аутентифицироваться на GEE.

import rasterio
import geopandas as gpd
import ee

# Аутентификация на Google Earth Engine
ee.Initialize()

Чтение растрового файла

Теперь мы можем прочитать растровый файл, содержащий спутниковые изображения, используя rasterio.

# Путь к растровому файлу
raster_path = 'path/to/raster.tif'

# Чтение растрового файла
with rasterio.open(raster_path) as src:
    image_data = src.read(1)  # Чтение первой полосы (например, красный канал)
    image_meta = src.meta

Выбор интересующей области

Затем нам нужно определить интересующую область, из которой мы хотим вырезать изображения. В этом примере мы используем многоугольник, сохраненный в файле GeoJSON.

# Чтение файла GeoJSON
aoi_path = 'path/to/aoi.geojson'
aoi_data = gpd.read_file(aoi_path)

# Преобразование геометрии области интереса в объект GEE
geometry = ee.Geometry.MultiPolygon(aoi_data['geometry'])

Обрезка изображений в GEE

Мы можем использовать возможности GEE для быстрой обрезки изображений в пределах указанной области интереса.

# Создание коллекции GEE для обрезанных изображений
collection = ee.ImageCollection('collection-id').filterBounds(geometry)

# Задание размера обрезанных изображений
crop_size = 512

# Обрезка изображений
cropped_collection = collection.map(lambda img: img.clip(geometry).set('system:time_start', img.get('system:time_start')))

Загрузка обрезанных изображений

Наконец, мы можем скачать обрезанные изображения с использованием библиотеки rasterio.

# Итерация по коллекции обрезанных изображений
for i, img in enumerate(cropped_collection.toList(100)):

    # Получить свойства изображения
    properties = img.propertyNames().getInfo()
    timestamp = img.get('system:time_start').getInfo()

    # Определение имени файла
    output_filename = 'image_{}_{}.tif'.format(timestamp, i)

    # Загрузка обрезанного изображения
    download_img = ee.Image(img).getDownloadUrl({'name': output_filename})
    urllib.request.urlretrieve(download_img, output_filename)

Заключение

В этой статье мы разработали простой и эффективный способ автоматической загрузки сотен обрезанных спутниковых изображений без извлечения всего растрового файла. Используя возможности rasterio и GEE, мы смогли быстро и эффективно вырезать изображения в пределах указанной области интереса и сохранить их в отдельных растровых файлах. Этот метод может быть полезен для исследователей и специалистов, работающих с большими наборами данных спутниковых изображений.

To leave a comment you need to Login / Create account