csvデータ(25,000行以上)を抽出するために、繰り返し大きなラスタ(300〜2500 Mb)を処理します。これらをプロットするために通常のGIS(ArcGIS、QGIS、Grass、...)を使用することは、実際には苦痛であり、データのサイズに関しては時間が紛らわしく、効率的な方法を探しています。Python - 大規模なGISデータセットプロット
コードが使用されます:
- GDALのラスタをインポートすると、ループの2D numpyのアレイ
- に使用してデータを抽出するために、この2D numpyのアレイで前処理するラスタ
- csvファイルを別の2D numpy配列
- pyqtgraphにインポートして、画像とその点をプロットします。
私は最初の段階を書きましたが、パフォーマンスは本当に高くありません。
私はこの種のスクリプトのパフォーマンスを改善するための提案/発言を探しています:)(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_()
こんにちは、私はENVI bil形式を使用しています。これは、xyzデータをBILファイルに保存し、GIS情報をhdrヘッダーファイルに保存するバイナリファイルです。 – boris
2次元アレイにデータをロードするには、500メガバイトのENVI BIL DEMに対して約40秒かかります。手動でのトリミングを避けるために、タスクを自動化することが考えられます。この自動化は、ここでの最初の段階では5~10分かかります。 – boris
どのラインが最も遅いか正確に教えていただけますか? (500 MBの場合は40秒かかりますか?) –