Cắt raster bằng nhiều bộ dữ liệu hoặc đa giác?


8

Tôi muốn quay một DEM bằng cách sử dụng một lưới các đa giác. Có thể dễ dàng hơn để sử dụng nhiều đa giác trong một tệp hình dạng, nhưng tôi chưa quản lý được điều này nên tôi đang cố gắng sử dụng vòng lặp for để tôi có thể lặp qua từng tập dữ liệu trong một gdb (mỗi tệp chỉ chứa một đa giác).

Đây là mã của tôi (thực hiện nó trong cửa sổ 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")

Mã của tôi không thực thi, tuy nhiên, nó chỉ nằm ở đó, chờ đợi điều gì khác ... nhưng sao? Tôi có thể làm cho nó hoạt động cho một clip, nhưng không phải với vòng lặp.

Tôi chắc chắn rằng tôi nên làm một cái gì đó khác cho đầu ra, để đặt tên cho mỗi raster mới theo lớp tính năng hoặc một cái gì đó ... nhưng một lần nữa, không biết làm thế nào. Xin vui lòng cho tôi biết nếu tôi nên thêm bất kỳ thông tin.


2
Trước tiên, có thể kiểm tra xem vòng lặp của bạn có hoạt động hay không bằng cách nhận xét Clip và đặt bản in hoặc AddMessage để xem liệu nó có phát ra tên của từng lớp tính năng OK không.
PolyGeo

Bạn có thể giải thích lý do tại sao bạn cần phải làm điều này? Trừ khi đầu ra là cần thiết để giao tiếp với các phần mềm khác, thường có rất nhiều hiệu quả hơn phương pháp để phân tích dữ liệu raster đa giác-by-đa giác, vì vậy có lẽ là câu trả lời tốt nhất cho câu hỏi của bạn là để đề nghị một cách tiếp cận hoàn toàn khác.
whuber

Xin lỗi vì đã đăng và chạy - cảm ơn mọi người vì sự giúp đỡ của bạn và tôi sẽ quay lại để theo dõi điều này, ngay khi tôi có thể.
Rosie Bell

wuber, tôi muốn làm điều này để tôi có thể cắt DEM của chúng tôi thành các phần có thể quản lý để sau đó tạo các đường viền và sau đó ghép lại với nhau. Có lẽ không phải là cách hiệu quả nhất để làm điều đó.
Rosie Bell

1
Phần mềm nào đang sử dụng? ArcGIS, QGIS, v.v?
Chad Cooper

Câu trả lời:


6

Một điều tôi nhận thấy là tham số thứ ba của bạn là đầu ra được mã hóa cứng (C: / data / lidar). Cách nó được viết bây giờ sẽ lặp qua từng tính năng của bạn và ghi đè đầu ra mỗi lần, nhưng vì bạn có thể không cho phép ghi đè tự động các tệp, nên điều này có khả năng bị treo. Hãy thử tạo một tên đầu ra duy nhất cho mỗi lần lặp:

#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")

Ngoài ra, tôi không chắc chắn rằng bạn có ý định đặt các đầu ra trong thư mục C: / data có tên là flipar ... lưu ý rằng tham số thứ ba trong clip là đường dẫn đầy đủ của raster đầu ra của bạn, không phải là thư mục mà nó sẽ được đặt trong. Nếu bạn không chỉ định một phần mở rộng trong tên đường dẫn đầu ra của mình và đặt chúng vào một thư mục tiêu chuẩn, thì đó sẽ là một lưới, vì vậy ngay bây giờ chương trình của bạn đang cố gắng tạo một bộ dữ liệu lưới mới có tên là 'lidar' trong C: / thư mục dữ liệu.


Rất cám ơn mbenedetti, đó là việc thiếu một cái tên duy nhất cho mỗi clip mới là một trong những vấn đề của tôi. Tôi cũng có một cái gì đó kỳ lạ xảy ra với nó là một gdb - khi tôi đã thử điều này bằng cách sử dụng shapefiles trong một thư mục, nó hoạt động tốt. Vì vậy, tôi có thể không có đường dẫn tệp đúng (không được sử dụng để làm việc với gdb).
Rosie Bell

5

dành cho những người tìm kiếm trong tương lai: Đây là phiên bản sửa đổi của tập lệnh phân tách raster USGS không yêu cầu bất cứ điều gì trên mức giấy phép ArcGIS Basic (ArcView):

"""
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

Một vài ý tưởng:

  1. Hãy dùng thử Công cụ phân tách Raster , có sẵn dưới dạng công cụ tập lệnh từ USGS (xem mã nguồn đính kèm).
  2. Để cắt / ốp lát raster đơn giản, hãy sử dụng công cụ ArcGIS 10.1 tích hợp có tên là Split Raster. Bạn có thể chia các raster theo số lượng gạch hoặc theo kích thước của gạch.

nhập mô tả hình ảnh ở đây

Mã nguồn cho công cụ phân chia raster 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)

Có giới hạn kích thước tệp cho Raster Split Tool không? Raster của tôi là 20,8 GB! Tôi tiếp tục nhận được "thất bại để thực hiện". Tất cả các tập tin có cùng một chiếu. Chạy ArcMap 10.1
Vô chủ

Bạn luôn có thể chạy nó ở chế độ xử lý địa lý nền 64 bit: resource.arcgis.com/en/help/main/10.1/index.html#//
Lỗi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.