Мне нужно растеризовать каждые 62 столбца 30 больших шейп-файлов (> 8 миллионов ячеек), в результате чего получается 1860 растров.
Я могу сделать это в R с меньшими фигурами (~ 8000 объектов) довольно легко и быстро. Тем не менее, когда я просто пытался загрузить эту большую фигуру в R, мне потребовалось 2 часа, 16G RAM и 47% моего 64G-свопинга. При вызове функции растеризации она не может работать из-за памяти.
Однако я понял, что QGIS может сделать это довольно быстро, но для каждого столбца одновременно, что потребовало бы мне жизни, чтобы запустить это.
Я пытался использовать консоль Python в QGIS с циклом для перебора столбцов, но безуспешно.
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import processing
import sys
layer = "path/to/my.shp"
iface.addVectorLayer(layer, "pam", "ogr")
attrs = layer.attributes()
extent = layer.extent()
xmin = extent.xMinimum()
xmax = extent.xMaximum()
ymin = extent.yMinimum()
ymax = extent.yMaximum()
for n in attrs:
processing.runalg("gdalogr:rasterize",
{"INPUT":layer,
"FIELD":n,
"DIMENSIONS":0,
"WIDTH":0.008333,
"HEIGHT":0.008333,
"RAST_EXT":"%f,%f,%f,%f"% (xmin, xmax, ymin, ymax),
"TFW":1,
"RTYPE":5,
"NO_DATA":0,
"COMPRESS":0,
"JPEGCOMPRESSION":1,
"ZLEVEL":1,
"PREDICTOR":1,
"TILED":False,
"BIGTIFF":2,
"EXTRA": '',
"OUTPUT":output/dir/test.tif})
Сначала я получаю следующую ошибку:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/tmp/tmpMAXfPw.py", line 11, in <module>
attrs = layer.attributes()
AttributeError: 'str' object has no attribute 'attributes'
Тогда, похоже, gdalogr: rasterize не может справиться с этим FIELD = n,
. Я прав?
Не могли бы вы помочь мне с этим кодом? Спасибо!