Растровая арифметика в QGIS с помощью RasterCalc

Обсуждение материалов сайта: вопросы, замечания, предложения
updates-bot
Bot
Сообщения: 276
Зарегистрирован: 03 фев 2008, 23:13
Репутация: 3

Растровая арифметика в QGIS с помощью RasterCalc

Сообщение updates-bot » 18 окт 2010, 04:34

Обсуждение статьи "Растровая арифметика в QGIS с помощью RasterCalc"

http://gis-lab.info/qa/rastercalc.html

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение kryl » 03 ноя 2010, 17:03

Не хочет работать с растром после атмосферной коррекции (значения каналов Float)

Код: Выделить всё

Ошибка при выполнении сценария Python:

Traceback (most recent call last):
  File "C:/Users/ws_3/.qgis/python/plugins\rastercalc\rastercalc.py", line 160, in run
    dlg = rastercalcdialog.RasterCalcDialog()
  File "C:/Users/ws_3/.qgis/python/plugins\rastercalc\rastercalcdialog.py", line 106, in __init__
    self.manageGui()
  File "C:/Users/ws_3/.qgis/python/plugins\rastercalc\rastercalcdialog.py", line 114, in manageGui
    self.layerNames = [ str( z.name() ) for z in self.mapLayers ]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0441' in position 21: ordinal not in range(128)

Версия Python:
2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]


Версия QGIS:
1.6.0-Trunk Trunk, 14423

Путь поиска Python: ['C:/OSGeo4W/apps/qgis-dev/./python', 'C:/Users/ws_3/.qgis/python', 'C:/Users/ws_3/.qgis/python/plugins', 'C:/OSGeo4W/apps/qgis-dev/./python/plugins', 'C:\\OSGeo4W\\apps\\gdal-17\\pymod', 'C:\\', 'C:\\Windows\\system32\\python25.zip', 'C:\\OSGeo4W\\apps\\Python25\\DLLs', 'C:\\OSGeo4W\\apps\\Python25\\lib', 'C:\\OSGeo4W\\apps\\Python25\\lib\\plat-win', 'C:\\OSGeo4W\\apps\\Python25\\lib\\lib-tk', 'C:\\OSGeo4W\\apps\\qgis-dev\\bin', 'C:\\OSGeo4W\\apps\\Python25', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\win32', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\win32\\lib', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\Pythonwin', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode', 'C:\\Users\\ws_3\\.qgis\\python\\plugins\\cadtools\\tools', 'C:\\OSGeo4W\\apps\\qgis-dev\\python\\plugins\\fTools\\tools', '/usr/share/qgis/python', '/usr/share/qgis/python', '.', 'C:\\Users\\ws_3\\.qgis\\python\\plugins\\ziplayers\\logic', 'C:\\Users\\ws_3\\.qgis\\python\\plugins\\ziplayers\\gui', '.']
Инфа о растре (слегка сокращенная):

Код: Выделить всё

Driver: HFA/Erdas Imagine Images (.img)
Files: D:/arcwork/yaroslavl2/space/l5cor/LT51780192007229MOR00/LT51780192007229MOR00ñ.img
Size is 8581, 7732
Coordinate System is:
PROJCS["UTM Zone 37, Northern Hemisphere",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            TOWGS84[0,0,0,0,0,0,0],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9108"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",39],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["Meter",1],
    AUTHORITY["EPSG","32637"]]
Origin = (413679.767395963720000,6621345.494110753800000)
Pixel Size = (30.000000000000000,-30.000000000000000)
Corner Coordinates:
Upper Left  (  413679.767, 6621345.494) ( 37d27'54.84"E, 59d43'15.82"N)
Lower Left  (  413679.767, 6389385.494) ( 37d33'14.85"E, 57d38'18.63"N)
Upper Right (  671109.767, 6621345.494) ( 42d 2'25.65"E, 59d41'41.34"N)
Lower Right (  671109.767, 6389385.494) ( 41d51'52.51"E, 57d36'51.54"N)
Center      (  542394.767, 6505365.494) ( 39d43'52.62"E, 58d41'11.07"N)
Band 1 Block=512x512 Type=Float32, ColorInterp=Undefined
  Description = Layer_1
  Min=0.000 Max=0.342 
  Minimum=0.000, Maximum=0.342, Mean=0.098, StdDev=0.010
  Overviews: 4291x3866, 2146x1933, 1073x967, 537x484, 269x242, 135x121, 68x61
  Metadata:
    STATISTICS_MINIMUM=3.3208416425623e-006
    STATISTICS_MAXIMUM=0.34183913469315
    STATISTICS_MEAN=0.097974001067624
    STATISTICS_MEDIAN=0.09480934733952
    STATISTICS_MODE=0.092138755043806
    STATISTICS_STDDEV=0.010419113221324
    STATISTICS_HISTONUMBINS=256
    STATISTICS_HISTOMIN=3.3208416425623e-006
    STATISTICS_HISTOMAX=0.34183913469315
    STATISTICS_SKIPFACTORX=2
    STATISTICS_SKIPFACTORY=2
    STATISTICS_EXCLUDEDVALUES=0
    LAYER_TYPE=athematic
    STATISTICS_HISTOBINVALUES=10736|1504|1040|916|644|680|572|536|564|628|708|560|588|564|644|780|2544|14160|17764|9616|5332|3424|2904|2196|1908|1736|1452|960|544|388|292|716|2012|2740|6900|11272|18020|16264|10960|9204|6404|4020|2192|2376|2232|2300|2200|2532|2996|2772|2536|3328|5252|6624|7392|7624|6192|4928|4052|3456|2576|2560|15528|123368|474556|1050524|1620932|2156696|2801436|3090948|2962460|2691028|2445744|2167564|1752536|1339576|1084976|947172|868868|817836|729064|582868|464828|382572|221532|288648|246340|216352|193832|175524|160572|142724|125320|111028|101336|93340|81320|67728|56876|50204|46100|41916|34268|26904|21316|18404|16556|14200|10924|7972|5960|4896|4072|3464|2364|1608|1228|980|728|588|452|384|340|244|260|240|232|100|132|76|76|52|56|32|24|16|32|4|16|4|4|8|8|12|8|0|8|12|4|8|4|8|0|0|8|0|8|0|12|4|8|0|0|4|0|0|0|4|0|8|0|4|4|0|0|0|0|0|0|0|12|0|0|0|0|0|0|4|0|0|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|4|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4|
  Image Structure Metadata:
    COMPRESSION=RLE


Band 2 Block=512x512 Type=Float32, ColorInterp=Undefined
  Description = Layer_2
  Min=0.000 Max=0.528 
  Minimum=0.000, Maximum=0.528, Mean=0.081, StdDev=0.013
  Overviews: 4291x3866, 2146x1933, 1073x967, 537x484, 269x242, 135x121, 68x61
  Metadata:
    STATISTICS_MINIMUM=2.9177457690821e-005
    STATISTICS_MAXIMUM=0.52833443880081
    STATISTICS_MEAN=0.081114446210786
    STATISTICS_MEDIAN=0.076385797261189
    STATISTICS_MODE=0.070194719979824
    STATISTICS_STDDEV=0.013150569806751
    STATISTICS_HISTONUMBINS=256
    STATISTICS_HISTOMIN=2.9177457690821e-005
    STATISTICS_HISTOMAX=0.52833443880081
    STATISTICS_SKIPFACTORX=2
    STATISTICS_SKIPFACTORY=2
    STATISTICS_EXCLUDEDVALUES=0
    LAYER_TYPE=athematic
    STATISTICS_HISTOBINVALUES=9228|1028|560|932|668|832|624|736|8060|28760|7808|6468|4560|3324|3896|1612|5432|10144|17164|25224|8992|7252|6860|7912|10276|6784|7556|10448|9312|12396|12004|58932|913448|2404960|6169956|3602532|3004264|1957324|1502892|1706636|1082964|1106924|1022656|1466964|990464|1074624|953956|882576|995628|453008|341572|241636|203068|262784|159796|111656|88508|67160|81868|47596|39268|33700|29128|33448|14560|11960|9768|12524|6684|5648|5000|4404|4836|2844|2368|2008|1804|2112|1216|940|864|788|1064|564|440|484|404|400|220|180|128|176|160|132|84|88|112|60|40|40|60|48|40|52|28|36|36|32|20|40|20|56|28|28|32|20|36|40|28|32|16|20|28|20|28|44|16|20|20|16|20|20|32|24|8|16|8|8|16|16|16|12|4|32|8|28|16|12|12|36|8|16|8|16|12|16|12|20|12|20|4|0|20|12|24|20|8|4|16|20|8|20|8|24|8|24|4|12|16|16|12|12|12|28|12|12|8|8|20|8|20|20|16|28|20|8|4|20|4|8|20|20|20|16|24|4|20|4|12|20|12|12|16|8|12|4|4|16|4|4|4|4|8|0|8|4|4|8|4|8|8|8|4|0|4|4|4|4|0|12|0|24|4|4|12|8|16|20|16|8|0|0|8|0|8|8|
  Image Structure Metadata:
    COMPRESSION=RLE
<GDALRasterAttributeTable Row0Min="2.917745769082103e-005" BinSize="0.002071785338600475">
 

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение kryl » 03 ноя 2010, 17:48

Разобрался. Дело в русской "с" в названии файла

Код: Выделить всё

LT51780192007229MOR00ñ.img

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Статьи: 31
Проекты: 4/1
Репутация: 32
Откуда: Ukraine

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Voltron » 19 фев 2011, 16:20

Доступен RasterCalc 0.2. В этой версии появились операторы сравнения и условные операторы.Также исправлены старые ошибки и добавлены новые :-)

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3321
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 494
Ваше звание: Author
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Denis Rykov » 13 апр 2011, 11:17

Очень удобный инструмент, спасибо! А планируется ли возможность добавления пакетной обработки растров в RasterCalc?
Spatial is now, more than ever, just another column- The Geometry Column.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Статьи: 31
Проекты: 4/1
Репутация: 32
Откуда: Ukraine

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Voltron » 13 апр 2011, 13:34

Пожалуйста :-). Вот уж не думал, что после появления в QGIS «родного» калькулятора, RasterCalc будет нужен кому-то, кроме автора.

Возможность пакетной обработки не планировалась, но если она нужна — запланируем. Как я понял, интересует возможность применения одного и того же выражения к нескольким выбранным растрам, правильно?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3321
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 494
Ваше звание: Author
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Denis Rykov » 13 апр 2011, 13:39

Так точно. А можно как-то воспользоваться плагином в обход QGIS? То есть, например, вызвать его из консоли и передать на вход нужное выражение.

А инструмент и вправду очень удобный и умеет кое-что, чего нет во встроенном калькуляторе.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8910
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Максим Дубинин » 13 апр 2011, 14:22

о, нас и на stack exchange, круто.

Я поддерживаю что нужен консольный растеркальк и напоминаю, что калькулятор растров был одним из гсоковских заданий для гдал, (nb: деньги нашим программирующим студентам не нужны, пнем их еще раз за лень). Но тут нужно крепко подумать, так как сейчас и в ядре кугиса есть растеркальк.
пристегивайтесь, турбулентность прямо по курсу

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Статьи: 31
Проекты: 4/1
Репутация: 32
Откуда: Ukraine

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Voltron » 13 апр 2011, 15:29

В данный момент обходного варианта не существует, но есть несколько скриптов для GDAL разной степени продвинутости, реализующих растровую арифметику. Кугисовский калькулятор вынесен в API (пока только для C++), если его вынесут и в Python, то можно будет писать скрипты, но они будут привязаны к наличию в системе QGIS.

Если и делать консольный калькулятор, то с минимальными зависимостями (в идеале, только GDAL). Мне кажется, что отдельный калькулятор вещь нужная и должна существовать не зависимо от калькуляторов в QGIS.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8910
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Максим Дубинин » 13 апр 2011, 19:51

Voltron писал(а):Мне кажется, что отдельный калькулятор вещь нужная и должна существовать не зависимо от калькуляторов в QGIS.
так точно
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Loup
Интересующийся
Сообщения: 30
Зарегистрирован: 23 ноя 2010, 18:20
Репутация: 1

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Loup » 14 апр 2011, 18:22

На всякий случай:

Код: Выделить всё

Ошибка при выполнении сценария Python:
...
UnicodeEncodeError: 'ascii' codec can't encode characters ... in position ...: ordinal not in range(128)
Ошибка появляется при использовании русских символов не только в имени файла, но и в пути к нему, например "D:\Дешифрирование\..."

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Статьи: 4
Проекты: 1
Репутация: 235
Откуда: Ханты-Мансийск
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение bolotoved » 26 сен 2011, 16:10

Если нужно из многоканального растра удалить пиксели по маскирующему растру с определенным значением, то правильной ли будет следующая команда:

Код: Выделить всё

ne ( [mask]@1, 1, [raster])
?

При выполнении данной команды вылезает ошибка:

Код: Выделить всё

Ошибка при выполнении сценария Python:

Traceback (most recent call last):
  File "C:/Documents and Settings/admin/.qgis/python/plugins\rastercalc\rastercalcdialog.py", line 270, in accept
    result = rastercalcengine.evaluateStack( tmpStack, iter, sizeX, blk )
  File "C:/Documents and Settings/admin/.qgis/python/plugins\rastercalc\rastercalcengine.py", line 229, in evaluateStack
    return func[ op ]( inRaster, compare, replace )
  File "C:/Documents and Settings/admin/.qgis/python/plugins\rastercalc\rastercalcengine.py", line 95, in not_equal
    numpy.putmask( raster, tmp, replace )
ValueError: setting an array element with a sequence.

Версия Python:
2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]


Версия:
1.8.0-Trunk Trunk, 67dfd2e

Путь поиска Python: ['C:/OSGeo4W/apps/qgis-dev/./python', 'C:/Documents and Settings/admin/.qgis/python', 'C:/Documents and Settings/admin/.qgis/python/plugins', 'C:/OSGeo4W/apps/qgis-dev/./python/plugins', 'C:\\OSGeo4W\\bin\\python25.zip', 'C:\\OSGeo4W\\apps\\Python25\\DLLs', 'C:\\OSGeo4W\\apps\\Python25\\lib', 'C:\\OSGeo4W\\apps\\Python25\\lib\\plat-win', 'C:\\OSGeo4W\\apps\\Python25\\lib\\lib-tk', 'C:\\OSGeo4W\\apps\\qgis-dev\\bin', 'C:\\OSGeo4W\\apps\\Python25', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\win32', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\win32\\lib', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\Pythonwin', 'C:\\OSGeo4W\\apps\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode', 'C:\\OSGeo4W\\apps\\qgis-dev\\python\\plugins\\fTools\\tools', 'E:/IMAGES_POOL/DTClass/Project']

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Статьи: 31
Проекты: 4/1
Репутация: 32
Откуда: Ukraine

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Voltron » 26 сен 2011, 18:51

Общедоступная версия RasterCalc работает только с одноканальными изображениями. Т.е. в вашем случаем необходимо обработать каждый канал отдельно, а потом собрать их вместе при помощи gdal_merge

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Статьи: 10
Проекты: 3/1
Репутация: 97
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение SS_Rebelious » 27 авг 2012, 13:23

А можно ли комбинировать несколько операций в одном выражении? Например, к пикселям со значением x прибавить значение y, а пиксели со значением > z присвоить значения другого растра? Или без промежуточных растров не обойтись?

UPD: использую например, такое выражение (не совсем такое, как в описании выше):
gt((([hydro_poly]@1=0) +1)@1, 10, 0)
лог ошибкиПоказать

Код: Выделить всё

An error has occured while executing Python code:

Traceback (most recent call last):
  File "/home/yury/.qgis//python/plugins/rastercalc/rastercalcdialog.py", line 269, in accept
    result = rastercalcengine.evaluateStack( tmpStack, iter, sizeX, blk )
  File "/home/yury/.qgis//python/plugins/rastercalc/rastercalcengine.py", line 209, in evaluateStack
    inRaster = evaluateStack( s, row, size, count )
  File "/home/yury/.qgis//python/plugins/rastercalc/rastercalcengine.py", line 223, in evaluateStack
    return returnBand( lay, num, row, size, count )
  File "/home/yury/.qgis//python/plugins/rastercalc/rastercalcengine.py", line 74, in returnBand
    return rasterUtils.getRasterBand( layerName, bandNum, row, size, count )
  File "/home/yury/.qgis//python/plugins/rastercalc/rastercalcutils.py", line 254, in getRasterBand
    gdalData = gdal.Open( str( rasterList[ name ].source() ) )
TypeError: unhashable type: 'numpy.ndarray'

Python version:
2.7.2 (default, Aug 19 2011, 20:41:43) [GCC]


QGIS version:
1.8.0-Lisboa Lisboa, exported

Python path: ['/home/yury/.qgis//python/plugins/sextante', '/home/yury/.qgis//python/plugins/sextante_taudem', '/usr/share/qgis/python', '/home/yury/.qgis//python', '/home/yury/.qgis//python/plugins', '/usr/share/qgis/python/plugins', '/windows/D/\xd0\x9c\xd0\xbe\xd0\xb8 \xd0\xb4\xd0\xbe\xd0\xba\xd1\x83\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x82\xd1\x8b', '/usr/share/qgis/python/qgis', '/usr/share/qgis/python', '/usr/lib/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/PIL', '/usr/local/lib64/python2.7/site-packages', '/usr/local/lib/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info', '/home/yury/.qgis/python/plugins/imgboundary/logic', '/home/yury/.qgis/python/plugins/imgboundary/gui', '.', '/usr/share/qgis/python', '/usr/share/qgis/python/plugins/fTools/tools', '/home/yury/.qgis/python/plugins/openlayersov/logic', '/home/yury/.qgis/python/plugins/openlayersov/gui']
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Статьи: 31
Проекты: 4/1
Репутация: 32
Откуда: Ukraine

Re: Растровая арифметика в QGIS с помощью RasterCalc

Сообщение Voltron » 28 авг 2012, 12:53

SS_Rebelious писал(а):А можно ли комбинировать несколько операций в одном выражении?
Можно. Например, расчет NDVI состоит из нескольких операций (вычитание, сложение, деление )
SS_Rebelious писал(а):UPD: использую например, такое выражение (не совсем такое, как в описании выше):
gt((([hydro_poly]@1=0) +1)@1, 10, 0)
Тут что-то совсем страшное написано. В грамматике RasterCalc таких вещей как присваивание нет.

Ответить

Вернуться в «Материалы сайта»