流域集積グリッドと集水域を含むシェープファイルがあります。次に、それらに対していくつかの計算を行いたいので、特定の集水域に隣接するラスター内のセルからデータを抽出する必要があります。
そのプロセスでは、集水域ポリゴンの1つをマスクとして使用して、ラスターで[マスクによる抽出]を使用しようとします(後でループしますが、今は1回だけ作業する必要があります)。
問題は、元のラスターとマスキングポリゴンの両方と比較して、抽出されたラスターがセルの半分だけ左にシフトすることです。ラスターをポイントに変換し、後で他のポリゴンと交差させようとするので、これは私のプロセスの残りを台無しにしています。そして、抽出されたラスターが元のラスターと重なっていない限り、正しいポリゴンが得られません。
ポリゴンはラスターから作成されるため、元のラスターとポリゴンは完全に整列しています。どういうわけか投影図になんらかの変化があったかどうかを確認しようとしましたが、見つけることができません。また、新しいArcMapドキュメントを試し、すべてを数回再起動し(これにより、驚くほど頻繁に問題が解決します)、スクリプトを呼び出すのではなく、Pythonプロンプトからツールを実行しました。ツールボックスからマスクによる抽出ツールを実行しようとしても、同じ結果になりました。
これは、ArcMapのpythonプロンプトで使用する(非常に単純な)コードです。
inpgs = r'C:\GIS\Catchm_ex.shp'
flowacc = r'C:\GIS\flowacc'
arcpy.MakeFeatureLayer_management(inpgs, 'currentMask', '"HydroID" = 269634')
outRaster = arcpy.sa.ExtractByMask(flowacc, 'currentMask')
Windows 7、ArcInfo 10.0、Python 2.6を使用しています。
私は今、Extract by Polygonを試しましたが、それはうまくいくようです。ExtractByMaskでマシンが誤動作しているだけですか?唯一の欠点は、マスキングポリゴンの座標を取得する方法がわからないため、スクリプトでその関数を使用するときに問題が発生することです(9つのセルのみをカバーし、中心にポイントがある場合)。
次のコードを使用して、ポリゴンによる抽出で動作するようになりました(Esriのサポートページから変更)。残念ながら、これは私の問題を解決しません。出力(このツールとマスクによる抽出)がセルの半分だけ左にシフトする場合とシフトしない場合があります。ほとんどの場合はそうですが、実際には本来あるべき場所にあることもあります。
だから今、私は本当に混乱しています。これは私のコンピューターで起こっているのですか?他の誰かが同じことを経験している場合は、コメントを書き込んでください。私だけではないことを私に知らせてください:)私にとって、この問題はバグとしては大きすぎる問題であり、これが問題となっています途中で自分自身を作成したこと。
それを避ける方法に関するアイデアはありますか?
def ReadPoints(infc):
try:
import arcpy, numpy
except ImportError:
sys.exit('Unable to import arcpy')
# Identify the geometry field
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
points = []
# Create search cursor
rows = arcpy.SearchCursor(infc)
# Enter for loop for each feature/row
for row in rows:
# Create the geometry object
feat = row.getValue(shapefieldname)
partnum = 0
# Step through each part of the feature
for part in feat:
# Step through each vertex in the feature
for pnt in feat.getPart(partnum):
if pnt:
points.append([int(pnt.X), int(pnt.Y)])
pt = numpy.array(points)
pts = []
for i in range(len(pt)):
t = pt[i]
pts.append(arcpy.Point(t[0],t[1]))
return pts