大きいシェープファイルからラスター


13

大きなシェープファイル(1 GB)があり、ラスタライズする必要があります。私はすでに以下を試しました。

1.)これを使用してGRASSにインポートするv.in.ogrと、次のエラーメッセージが表示されて失敗しました:エラー:G_realloc:break_polygons.c:188で498240036バイトを割り当てることができません

2.)私の2番目のアイデアは、PostGISを使用することでした。シェープファイルをインポートし、グリッドのX、Y位置でリサンプリングしてから、これらのポイントをエクスポートして、Xyzからグリッドを作成します。シェイプファイル(ポリゴンとポイント)を正常にインポートしましたが、30万ポイントの100万ポリゴンの交差は非常に遅いようです。私は次のPostGIS文を使用しましたが、改善の余地があるかもしれません。

select polygons.land_id,grid.geom from grid,polygons where grid.geom && polygons.geom and within(grid.geom,polygons.geom)

3.)simplify()PostGIS でも使用しようとしました。しかし、私は多くの小さなポリゴンを失いました(つまり、小さなポリゴンのみで覆われていた一部の領域はヌルになりました)。

どんなアイデアでも大歓迎です。


1
どのGRASSバージョンを使用しましたか?少なくとも6.4でなければなりません。GRASS 7では、示された問題を克服するのに役立つベクトルマップにも大きなファイルサポートが実装されていることに注意してください(また、はるかに高速です)。
-markusN

現在GRASS 6.4を使用しています。ヒントをありがとう、すぐに7に更新します。
ヨハネス

最新のプリコンパイル済みwinGRASS 7バイナリは、こちらから入手できます:wingrass.fsv.cvut.cz/grass70
markusN

回答:


14

gdal_rasterizeを試すことができますが、このような大きなシェープファイルでは使用していませんので、GRASSで行ったのと同じ問題が発生する可能性があります。私は次のように動作するはずです(GDAL> = 1.8.0で):

gdal_rasterize -a AN_ATTRIB -l THE_LAYER -a_nodata -9999 -a_srs EPSG:27700 -co TILED=YES -tr 10 10 -ot Float32 src.shp dest.tif

もちろん、ソースシェープファイルに応じていくつかのオプションをいじる必要があります。最も重要なパラメーターは、ピクセルの解像度を指定する-trです。それなしでは、非常に大きなラスターで自分自身を見つけるかもしれません...

GRASSに固執したい場合は、ラスタライズの範囲を小さく設定して、プロセスを管理可能なチャンクに分割してから、ラスタを1つにモザイク化します。


1
gdal rasterizeは約5分ですべて完了しました:)。どうもありがとう!
ヨハネス

涼しい!私はそれが働いてうれしいです。
MerseyViking

3

最初の目的に関して、より多くのRAMまたはスワップディスクスペースがあるマシンでv.in.ogrコマンドを実行してみてください?

そうでない場合は、多くのファイルに分割して、それぞれをラスタライズしてから、再度マージします。


1

ラスタライズを行う際により詳細な制御が必要な場合は、ボンネットの下でGDALを使用するperrygeoのpoly_density.pyスクリプトを確認してくださいgdal_rasterize


0

切り裂きジャックのように、部品ごとに行います。postgisから草のデータインポートのスライスをエクスポートして変換します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.