我必须对30个大shapefile(> 800万个像元)的每62列进行栅格化,从而产生1860个栅格。
我可以轻松,快速地以较小的形状(约8000个特征)在R中执行此操作。但是,当仅尝试在R中加载这种大形状时,我花了2个小时,占用了16G RAM和64G交换空间的47%。调用rasterize函数时,由于内存原因,它无法运行。 但是我发现QGIS可以非常快地完成它,但是对于每个列一次,这使我花了很多时间来运行它。 我尝试使用QGIS中的Python控制台和循环来遍历列,但没有成功。
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,
。我说得对吗?
能否请您帮我提供这段代码?谢谢!
答案 0 :(得分:0)
在layer
中,您仅使用字符串定义了罚款的路径。一个简单的Python字符串没有属性'attributes'。您需要首先实际创建图层:
layer_path = "/home/klab-guest/Documents/shared-klab/PAM/Grid/grid_pam_1988.shp"
layer = iface.addVectorLayer(layer_path, "pam", "ogr")
attrs = layer.attributes()