Способ 1.
1) :
Код: Выделить всё
PATH=C:\OSGeo4W\apps\gdal-dev\bin\;%PATH%
set PYTHONPATH=C:\OSGeo4W\apps\gdal-dev\pymod
gdal_polygonize.py A2008137_Days_01.tif -f "ESRI Shapefile" Days01.shp "Active_fires" "fire_mask"
Запускаем скрипт и получаем на выходе файл Days01.shp.
2) Открываем шейп в любой ГИС, например в QGIS: 3) Открываем таблицу атрибутов и выбираем только те полигоны, для которых поле "fire_mask" равно 8 или 9:
Код: Выделить всё
fire_mask = 8 OR fire_mask = 9
5) Открываем получившийся шейп-файл: Таким образом задача решена.
Способ 2.
Воспользуемся скриптом classify.py.
1) Отредактируем его в соответствии с задачей:
Код: Выделить всё
import gdal
import gdalnumeric
try:
import numpy
except:
import Numeric as numpy
class_defs = [(8, 8,8), (9, 9, 9)]
src_ds = gdal.Open('A2008137_Days_01.tif')
xsize = src_ds.RasterXSize
ysize = src_ds.RasterYSize
src_image = gdalnumeric.LoadFile( 'A2008137_Days_01.tif' )
dst_image = numpy.zeros((ysize,xsize))
for class_info in class_defs:
class_id = class_info[0]
class_start = class_info[1]
class_end = class_info[2]
class_value = numpy.ones((ysize,xsize)) * class_id
mask = numpy.bitwise_and(
numpy.greater_equal(src_image,class_start),
numpy.less_equal(src_image,class_end))
dst_image = numpy.choose( mask, (dst_image,class_value) )
gdalnumeric.SaveArray( dst_image, 'classes.tif' )
Код: Выделить всё
gdal_translate -of GTiff -co "TFW=YES" A2008137_Days_01.tif A2008137_Days_01_tfw.tif
4) Снова воспользуемся утилитой gdal_polygonize:
Код: Выделить всё
PATH=C:\OSGeo4W\apps\gdal-dev\bin\;%PATH%
set PYTHONPATH=C:\OSGeo4W\apps\gdal-dev\pymod
gdal_polygonize.py classes.tif -f "ESRI Shapefile" classes.shp "Active_fires" "fire_mask"
На первый взгляд все хорошо, 2-й способ позволяет автоматизировать процесс векторизации растров, но есть небольшая проблема. Если в нашем случае посмотреть таблицу атрибутов шейп файла созданного первым способом и вторым - то мы увидим, что они отличаются. В таблице, полученной первым способом - 645 записей, а вторым - 649, причем эти 4 отличные записи имеют аттрибут 0. Да и сам шейп выглядит несколько странно: Есть какие-нибудь предположения, откуда взялись эти нулевые полигоны. Исходный растр во вложении.