Спутниковые изображения являются ценным источником данных для различных применений, таких как мониторинг землепользования, оценка урожайности сельскохозяйственных культур и планирование инфраструктуры. Однако получение отдельных обрезанных изображений из больших растровых файлов может быть сложным и трудоемким процессом.
В этой статье мы представим простой способ автоматической загрузки сотен обрезанных спутниковых изображений с использованием 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 для обрезанных изображений
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, мы смогли быстро и эффективно вырезать изображения в пределах указанной области интереса и сохранить их в отдельных растровых файлах. Этот метод может быть полезен для исследователей и специалистов, работающих с большими наборами данных спутниковых изображений.