複数のデータセットまたはポリゴンによるラスターのクリッピング?


8

ポリゴンのグリッドを使用してDEMをクリップしたいと思います。おそらく1つのシェープファイルで複数のポリゴンを使用する方が簡単ですが、これを管理していないため、forループを使用してgdbの各データセットをループできるようにしています(それぞれに1つのポリゴンしか含まれていません)。

これが私のコードです(Pythonウィンドウで実行してください)。

#creating a workspace and a list of feature classes
arcpy.env.workspace = "C:/data/lidar/lidar.gdb"
fcs = arcpy.ListFeatureClasses()

#looping through each feature class and creating a raster based on the extent of   
#feature class

for fc in fcs:
    arcpy.Clip_management("perth", "#", "C:/data/lidar", fc, "", "ClippingGeometry")

私のコードは実行されませんが、そこに座って、何かを待っています...しかし、何ですか?1つのクリップで機能させることはできますが、ループでは機能しません。

新しいラスターにフィーチャクラスなどで名前を付けるには、出力に対して別のことをする必要があると思いますが、繰り返しになりますが、方法はわかりません。さらに情報を追加する必要があるかどうかをお知らせください。


2
おそらく、最初に、ClipをコメントアウトしてprintまたはAddMessageを配置することによりループが機能しているかどうかをテストし、各フィーチャクラスの名前が出力されるかどうかを確認します。
PolyGeo

このクリッピングを行う必要がある理由を説明していただけますか?他のソフトウェアとの通信に出力が必要でない限り、通常、ラスタデータをポリゴンごとに分析する方法ははるかに効率的です。おそらく、質問に対する最良の答えは、異なるアプローチをすべて提案することです。
whuber

投稿と実行についての謝罪-皆様のご協力に感謝します。できるだけ早くフォローアップします。
Rosie Bell

wuber、私はこれをやりたかったので、DEMを扱いやすいチャンクにスライスして、輪郭を作成してから、ステッチして戻しました。おそらく、最も効率的な方法ではありません。
Rosie Bell、

1
どのソフトウェアを使用していますか?ArcGIS、QGISなど?
チャドクーパー

回答:


6

私が気づいたことの1つは、3番目のパラメーターがハードコードされた出力(C:/ data / lidar)であることです。現在、その記述方法は各機能をループし、毎回出力を上書きしますが、ファイルの自動上書きを許可していない可能性があるため、これがハングアップする可能性があります。各反復に対して一意の出力名を作成してみてください。

#creating a workspace and a list of feature classes
arcpy.env.workspace = "C:/data/lidar/lidar.gdb"
fcs = arcpy.ListFeatureClasses()

#looping through each feature class and creating a raster based on the extent of   
#feature class

i=0
for fc in fcs:
    outputPath = "C:/data/lidar" + str(i)
    i+=1
    arcpy.Clip_management("perth", "#", outputPath, fc, "", "ClippingGeometry")

また、出力をLIDARという名前のC:/ dataフォルダーに配置するつもりかどうかはわかりません...クリップの3番目のパラメーターは出力ラスターの完全なパスであり、配置されるフォルダーではないことに注意してください出力パス名に拡張子を指定せずに標準フォルダーに配置すると、グリッドになります。そのため、現在プログラムはCで 'lidar'という名前の新しいグリッドデータセットを作成しようとしています。 / dataフォルダー。


mbenedettiに感謝します。私の問題の1つであったのは、新しいクリップごとに一意の名前がないことでした。私はそれがgdbであることで奇妙なことが起こっていました-代わりにフォルダー内のシェープファイルを使用してこれを試したところ、うまくいきました。だから私はおそらく正しいファイルパスを持っていませんでした(gdbでの作業には慣れていません)。
Rosie Bell

5

将来のシーカー向け:ArcGIS Basic(ArcView)ライセンスレベル以上のものを必要としないUSGSラスター分割ツールスクリプトの変更バージョンを次に示します。

"""
Raster Split Tool 6/16/2011
ArcGIS 10 Script Tool
Python 2.6.5

Contact:
Douglas A. Olsen
Geographer
Upper Midwest Environmental Sciences Center
U.S. Geological Survey
2630 Fanta Reed Road
La Crosse, Wisconsin 54603
Phone: 608.781.6333

#####
modified 2015-04-15 by Jeremiah Poling (jpoling@anra.org)
Now using only tools available at the ArcGIS Basic license level 
#####

"""
import arcpy
from arcpy import env
import os

# Get Split Shapfile Name
splitShape = arcpy.GetParameterAsText(0)
# Get Field Name
splitField = arcpy.GetParameterAsText(1)
# Get Output Directory
outDirectory = arcpy.GetParameterAsText(2)
# Get Raster to Split
splitRaster = arcpy.GetParameterAsText(3)
# Get type of output tif, img, or GRID
rasterType = arcpy.GetParameterAsText(4)
# Set Workspace environment
env.workspace = outDirectory

# Loop through the rows in the clipping shapefile
cursor = arcpy.SearchCursor(splitShape)
for row in cursor:
    resultName = row.getValue(splitField)

    # Create feature layer of current clipping polygon
    whereClause = '"' + splitField + '" = ' + "'" + resultName + "'"
    arcpy.MakeFeatureLayer_management(splitShape, 'currentMask', whereClause)

    # Replace spaces with underscores
    resultName = resultName.replace(' ','_')

    # Remove .shp suffix
    if resultName[-4:] == '.shp':
        resultName = resultName[:-4]

    arcpy.AddMessage("Processing: " + resultName)

    if rasterType == 'img':
        resultName = resultName + "." + rasterType
    elif rasterType == 'tif':
        resultName = resultName + "." + rasterType
    else:
        print ('No extension')

    # Save the clipped raster
    arcpy.Clip_management(
        in_raster = splitRaster,
        rectangle = "#",
        out_raster = resultName,
        in_template_dataset = 'currentMask',
        nodata_value="255",
        clipping_geometry="ClippingGeometry",
        maintain_clipping_extent="NO_MAINTAIN_EXTENT"
        )

    if arcpy.Exists('currentMask'):
        arcpy.Delete_management('currentMask')

4

いくつかのアイデア:

  1. USGSからスクリプトツールとして入手可能なRaster Split Toolを試してください(添付のソースコードを参照)。
  2. 単純なラスタークリッピング/タイリングには、Split Rasterと呼ばれる組み込みのArcGIS 10.1ツールを使用します。タイルの数またはタイルのサイズでラスターを分割できます。

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

USGSラスター分割ツールのソースコード:

"""
Raster Split Tool 6/16/2011
ArcGIS 10 Script Tool
Python 2.6.5

Contact:
Douglas A. Olsen
Geographer
Upper Midwest Environmental Sciences Center
U.S. Geological Survey
2630 Fanta Reed Road
La Crosse, Wisconsin 54603
Phone: 608.781.6333
"""
import arcpy
from arcpy import env
import os
from arcpy.sa import *

# Get Shapefile Name
inShape = arcpy.GetParameterAsText(0)
# Get Split Shapfile Name
splitShape = arcpy.GetParameterAsText(1)
# Get Field Name
splitField = arcpy.GetParameterAsText(2)
# Get Output Directory
outDirectory = arcpy.GetParameterAsText(3)
# Get Raster to Split
splitRaster = arcpy.GetParameterAsText(4)
# Get type of output tif, img, or GRID
rasterType = arcpy.GetParameterAsText(5)
# Set Workspace environment
env.workspace = outDirectory

# Run Split command on Input Shapefile
arcpy.Split_analysis(inShape, splitShape, splitField, outDirectory)

# Loop through a list of feature classes in the workspace
for fc in arcpy.ListFeatureClasses():

    # Execute ExtractByMask
    rfc = ExtractByMask(splitRaster, fc)

    # Clean up shp file from work directory
    arcpy.Delete_management(fc, "")    

    arcpy.AddMessage("Processing: " + fc)

    # Replace spaces with underscores
    fc = fc.replace(' ','_')

    # Remove .shp suffix
    fc = fc[:-4]

    # Trim to 13 chars
    fc = fc[0:13]

    if rasterType == 'img':
        fc = fc + "." + rasterType
    elif rasterType == 'tif':
        fc = fc + "." + rasterType
    else:
        print ('No extension')

    # Save the output
    rfc.save(fc)

ラスター分割ツールのファイルサイズに制限はありますか?私のラスターは20.8 GBです。「実行に失敗」し続けます。すべてのファイルの投影法は同じです。実行中のArcMap 10.1
遺棄

あなたは、常に64ビットバックグラウンドジオプロセシングモードで実行することができます:resources.arcgis.com/en/help/main/10.1/index.html#//...
アーロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.