GDAL (Библиотека абстракции геопространственных данных) — это мощная библиотека с открытым исходным кодом для работы с геопространственными данными. Одной из полезных функций GDAL является полигонизация, которая включает преобразование растровых данных в векторные полигоны. В этой статье мы рассмотрим различные методы полигонизации, доступные в GDAL, и приведем примеры кода, демонстрирующие их использование.
-
Обзор GDAL Polygonize:
Прежде чем углубляться в различные методы, давайте разберемся с основами GDAL Polygonize. Процесс полигонизации принимает растровое изображение в качестве входных данных и генерирует векторные полигоны, где каждый полигон представляет собой связанную область пикселей с одинаковым значением. Полученные полигоны можно дополнительно анализировать, визуализировать или использовать для пространственных операций. -
Метод 1: Полигонизация по умолчанию:
Метод полигонизации по умолчанию в GDAL автоматически присваивает уникальный идентификатор многоугольника каждой соединенной области пикселей с одинаковым значением. Вот пример фрагмента кода для выполнения полигонизации по умолчанию:
from osgeo import gdal, ogr
# Open the raster dataset
raster_ds = gdal.Open('input.tif')
# Create output shapefile
driver = ogr.GetDriverByName('ESRI Shapefile')
output_ds = driver.CreateDataSource('output.shp')
# Perform polygonization
gdal.Polygonize(raster_ds.GetRasterBand(1), None, output_ds.GetLayer(), 0, [], callback=None)
# Clean up
raster_ds = None
output_ds = None
- Метод 2: настройка атрибутов многоугольника.
Вы можете настроить атрибуты полученных многоугольников, предоставив определение поля и значения поля. Это позволяет связать дополнительную информацию с каждым полигоном. Вот пример фрагмента кода:
# ... (Same as Method 1)
# Define field name and type
field_name = 'class'
field_type = ogr.OFTString
# Create output layer with field definition
output_layer = output_ds.CreateLayer('output', geom_type=ogr.wkbPolygon)
field_defn = ogr.FieldDefn(field_name, field_type)
output_layer.CreateField(field_defn)
# Perform polygonization with custom field attribute
gdal.Polygonize(raster_ds.GetRasterBand(1), None, output_layer, 0, [], callback=None)
# ... (Same cleanup as Method 1)
- Метод 3. Упрощение геометрии полигонов.
GDAL Polygonize позволяет упростить геометрию получаемых полигонов с помощью классаgdal.PolygonizeOptions. Это может быть полезно при работе со сложными растровыми данными или с высоким разрешением. Вот пример фрагмента кода:
# ... (Same as Method 1)
# Set simplification options
options = gdal.PolygonizeOptions(simplify=True, tolerance=0.1)
# Perform polygonization with simplification
gdal.Polygonize(raster_ds.GetRasterBand(1), None, output_ds.GetLayer(), 0, [], options=options, callback=None)
# ... (Same cleanup as Method 1)
- Метод 4: Полигонизация с маскированием:
Вы можете применить маску к растровым данным перед полигонизацией, чтобы исключить определенные области из процесса. Это полезно, если вы хотите сосредоточиться на определенных областях интереса. Вот пример фрагмента кода:
# ... (Same as Method 1)
# Create mask raster
mask_ds = gdal.Open('mask.tif')
# Perform polygonization with masking
gdal.Polygonize(raster_ds.GetRasterBand(1), mask_ds.GetRasterBand(1), output_ds.GetLayer(), 0, [], callback=None)
# Clean up
# ... (Same cleanup as Method 1)
mask_ds = None
В этой статье мы рассмотрели различные методы полигонизации с использованием GDAL. Мы рассмотрели полигонизацию по умолчанию, настройку атрибутов полигона, упрощение геометрии полигона и полигонизацию с маскированием. Используя эти методы, вы можете извлекать ценную информацию из растровых данных и работать с векторными полигонами для дальнейшего анализа или визуализации.