ArcPyを使用してcon()スクリプトを使用して新しいラスターを作成しますか?


8

私はPythonが初めてで、ラスター計算機スタイルのスクリプトをコーディングしようとしています。基本的に、値が0〜10,000のラスターを、特定の値の間に1が設定されたラスターに変換します。

私がPythonでそれをしたい理由は、最終的にこのプロセスを自動化して、さまざまな値(つまり、0から-10、-5から-25など)を選択し、最終的にはそれぞれ1のラスターになるようにするためです。 。私の目的は、これらをポリゴンに変換して、約800のシェープファイルで多数のベクタークリップ操作を実行できるようにすることです。

最後に新しいラスターを生成するスクリプトを記述しましたが、このグリッドが1でいっぱいではなく、値が0〜256であるため、コードのどこかにバグがあります。どなたでも見つけて頂ければありがたいです!誰かがコードを高速化する方法、または私がこれをすべて行う方法についてのより良いアイデアを持っているなら、それもまた興味深いことです。

これが私のコードです:

import arcpy
from arcpy import env
from arcpy.sa import *

arcpy.env.overwriteOutput = 1 #this also doesn't work by the way, I have also tried            
#TRUE, no errors come up but it still doesn't let me overwrite the output file

#Set environment settings
env.workspace = "C:/folderlocation where inRaster is stored"

# Set local variables
inRaster = Raster("inputraster")

# Check out Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# depths wanted from inputraster raster
var = [-2500,-3000] #min depth, max depth

#Execute and save Con
OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

OutRaster.save("C:/drivelocation/outputfilename")

あなたが言う行、arcpy.env.overwriteOutput = 1使用してみてください:arcpy.env.overwriteOutput = True Pythonは大文字と小文字を区別し、コメントにはTRUEがあります。
Fezter

残念ながら、それでも上書き関数を機能させることはできません。TrueはTRUEおよび1と同じ結果になり、エラーが発生します。OutRaster.save( "C:/ ...")RuntimeError:エラー000871:C:....:出力を削除できません?????????????????? これ以上のアイデア?
user12433

回答:


6

問題はこの表現にあると思います

OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

Conは次の形式を想定しています

Con(in_conditional_raster、in_true_raster_or_constant、{in_false_raster_or_constant}、{where_clause})

あなたの場合

Con((inRaster <= var[0])&(inRaster <= var[1]),1)

に分解することができます

  • in_conditional_raster、 (inRaster <= var[0])&(inRaster <= var[1])

  • in_true_raster_or_constant、 1

私はあなたが何をしようとしているのかについて少し混乱しています。次の両方の基準を満たす値を1にしたいようです

  • inRaster <= -2500
  • inRaster <= -3000

これら2つの式は、に縮小できますinRaster <= -3000

ここに画像の説明を入力してください

したがって、値が-3000以下のすべてのピクセルが1に変わりました。残りはそのままです。少なくともそれはあなたのコードが言うことです。ただし、このラスターの属性テーブルまたは実際のラスターファイル自体を送信しない限り、確実に知る方法はありません。

あなたが意味したと思います(inRaster <= var[0])&(inRaster > var[1])。そうすれば、-2500から-3000までの値をキャッチできます。

ここに画像の説明を入力してください

ところで、元のラスターの値の範囲は何ですか?


お返事ありがとうございます。今はかなりばかげています。私はコードでさまざまなことを試していたときに、大なり記号を小なり記号に反転させることができ、それを拾い上げていなかったと思います。コードを次のように変更すると、InConRaster =((inRaster <= var [0])&(inRaster> = var [1]))OutRaster = Con(InConRaster、1)が機能し、フォーマットのヒントをありがとうございます。参考までに、正しい記号で試してみたがcon式を変更しなかった場合はまだ機能しなかったため、これが必要な形式であるように見えます。助けに本当に感謝しています。ありがとう
user12433

どういたしまして:)チェックマークをクリックすることを忘れないでください;-)
RK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.