3
GDALとPython:特定の値を持つすべてのセルの座標を取得する方法は?
私が持っているARC / INFOバイナリグリッドを具体的には、ArcGISのは累積ラスタを流し--- ---と私は特定の値(または値の範囲で)を有する全ての細胞を同定したいと思います。最終的に、これらのセルを表すポイントのシェープファイルが欲しいです。 QGISを使用してhdr.adfを開き、この結果を取得できます。ワークフローは次のとおりです。 QGIS>ラスターメニュー>ラスター計算機(すべてのポイントを目標値でマーク) QGIS>ラスターメニュー>ポリゴン化 QGIS>ベクトルメニュー>ジオメトリサブメニュー>ポリゴン重心 重心を編集して、不要なポリ重心を削除します(これらの重心= 0) このアプローチは「仕事をします」が、削除しなければならない2つのファイルを作成し、重心のシェイプファイルから不要なレコードを削除する必要があるため、私には魅力的ではありません(つまり、それらは0です)。 既存の質問は、この主題に近づくが、それは、ArcGISの/ ArcPyに合わせだ、と私はFOSSのスペースに滞在したいと思います。 ラスターのセル値を調べる既存のGDAL / Pythonレシピ/スクリプトがあり、ターゲット値(またはターゲット範囲内の値)が見つかった場合、レコードがシェープファイルに追加されますか?これにより、UIの相互作用が回避されるだけでなく、単一のパスでクリーンな結果が作成されます。 Chris Garrardのプレゼンテーションの1つに対して作業することでショットを撮りましたが、ラスター作業は私の操舵室にありません。また、弱いコードで質問を混乱させたくありません。 正確なデータセットを使用したい場合は、ここに.zipとして配置します。 [メモの編集]後世のためにこれを残してください。om_hennersとのコメント交換を参照してください。基本的に、x / y(行/列)の値は反転しました。元の答えには次の行がありました: (y_index, x_index) = np.nonzero(a == 1000) このように反転します: (x_index, y_index) = np.nonzero(a == 1000) スクリーンショットに示されている問題に初めて遭遇したとき、ジオメトリを誤って実装したかどうか疑問に思い、次の行でx / y座標値を反転させて実験しました。 point.SetPoint(0, x, y) ..なので.. point.SetPoint(0, y, x) しかし、それはうまくいきませんでした。そして、om_hennersのNumpy式で値を反転させようとは考えていませんでした。どちらの行で値を反転しても同等であると間違って信じていました。私は、本当の問題がに関する考えるx_sizeとy_size、それぞれの値、30および-30行と列のインデックスは、細胞のための計算点の座標に使用されている場合に適用されます。 [オリジナル編集] @ om_henners、ogr(invisibleroads.com、Chris Garrard)を使用してポイントシェープファイルを作成するためのいくつかのレシピと協力して、あなたのソリューションを試していますが、ポイントがライン通過を越えて反映されるかのように表示される問題があります315/135度まで。 …