我处理重复大的栅格(300~2500 Mb)以提取csv数据(超过25.000行)。使用常规GIS(ArcGIS,QGIS,Grass,...)来绘制这些非常痛苦,并且在数据大小方面令人困惑,我正在寻找一种有效的方法来在光栅上绘制这些点。
代码将使用:
我写了第一阶段,表现不是很高。
我正在寻找建议/备注以改善这种脚本的性能:)(Cython,多处理,甚至是另一种语言,如果值得的话)。我在方法上真的很开心,我不是计算机科学家^^。
非常感谢,
鲍里斯
PS:这是代码,它尚未完成,但概述是:
import numpy as np
import gdal
import pyqtgraph as pg
print "import the bil file"
BilFile = gdal.Open("SRTM90_final_PP.bil")
print "extract data"
band = BilFile.GetRasterBand(1)
data = band.ReadAsArray()
print "Remove no data"
ndRowMin = -1
ndRowMax = -1
ndColMin = -1
ndColMax = 999999999
for i in range(data.shape[0]):
for j in range (data.shape[1]):
if((data[i][j] != -9999.) and (ndRowMin ==-1)):
ndRowMin = i-1
else:
if((data[i][j] == -9999.) and (j==data.shape[1]-1)):
ndRowMax = i
break
if((data[i][j] == -9999.) and (ndColMin+1 < j)):
ndColMin = j-1
if((data[i][j] == -9999.) and ndColMax > j):
ndColMax = j
dataP = data[ndRowMin:ndRowMax][ndColMin:ndColMax]
print dataP
pg.image(dataP)
pg.QtGui.QApplication.exec_()
答案 0 :(得分:1)
根据输入文件格式,Gdal可能需要将整个未压缩的图像加载到内存中,然后运行得非常慢。
在需要提取小块地图的大地图上进行多次测试后,我结束了将我的图像转换为未压缩的&#34; TIFF&#34;文件格式。 Gdal库(实际上是libtiff)似乎可以有效地读取TIFF,例如,库只会从磁盘中将所需的文件部分加载到内存中。
尝试将您的文件转换为TIFF或告诉我们有关您用作输入的输入文件格式的更多信息。
编辑:您回答该行是&#34; readarray()&#34;是最慢的。这证实这是你的文件加载缓慢,而不是裁剪。然后你只能转换文件或制作你自己的ENVI bil DEM文件解析器,它不会在RAM中加载所有内容。