Lấy ranh giới của hình ảnh raster là đa giác trong ArcGIS Desktop?


28

Tôi có một hình ảnh raster hình chữ nhật trong ArcGIS Desktop.

Làm thế nào tôi có thể tạo ra một đa giác chỉ là phạm vi của hình ảnh raster?

Đó là, tôi muốn có một lớp đa giác với một hình tứ giác duy nhất là cạnh của hình ảnh.

Tôi đã thử chỉ đơn giản là thực hiện chuyển đổi Raster-> Đa giác, nhưng điều này cố gắng sử dụng dữ liệu trong hình ảnh để tạo đường viền - tất cả những gì tôi muốn là đường viền của cạnh của hình ảnh.

Tôi đang sử dụng ArcGIS Desktop 10.

Câu trả lời:


33

Nếu bạn có Nhà phân tích không gian thì bạn có thể:

  1. Nhân raster với 0 để tạo raster giá trị không đổi bằng Raster Calculator. (hãy chắc chắn chuyển đổi nó thành loại số nguyên hoặc bước 2 sẽ không hoạt động)
  2. Chuyển đổi kết quả của bước 1 thành đa giác bằng công cụ Raster thành Đa giác.

Giải pháp khác:

Nếu bạn có giấy phép Phân tích 3D thì bạn có thể sử dụng công cụ Raster Domain trong Phân tích 3D> Chuyển đổi> từ raster (tuy nhiên nó không có chức năng trơn tru)


12

Bạn có thể sử dụng công cụ Raster Domain từ 3D Analyst để tạo đa giác với cùng mức độ với dữ liệu raster của bạn


Chào mừng bạn đến với GIS SE! Bạn có thể vui lòng thêm tài liệu tham khảo cho câu trả lời của bạn? Bằng cách đó, nó sẽ vững chắc hơn.
RK

Công cụ Raster Domain đã làm công việc, hoàn hảo! Tạo một phác thảo hoặc ranh giới của dữ liệu raster.

1
Một lời cảnh báo về công cụ này - đa giác giới hạn được tạo là phạm vi dữ liệu raster của bạn bắt đầu và kết thúc tại pixel TRUNG TÂM, không phải cạnh ngoài của các pixel. Tôi vừa thử nó và nghĩ rằng nó trả lại hộp giới hạn bên ngoài của raster, nhưng khi bạn phóng to bạn sẽ thấy hộp giới hạn bắt đầu ở trung tâm pixel.
fbiles

Thực sự có một tham số cho phương thức IRasterDomainExtractor.ExtractDomain kiểm soát xem nó sử dụng trung tâm hay cạnh ngoài của các pixel / ô.
Preston

Đây là hoàn hảo! Một công cụ và tôi có một phác thảo đa giác của raster của tôi. Cảm ơn!
user3281667

11

Chỉ đơn giản là số hóa nó? Nhấp chuột nhấp chuột nhấp chuột nhấp chuột thực hiện.


8
Không thực sự chắc chắn tại sao tùy chọn này đã được bỏ phiếu. Bạn có thể tìm tọa độ của các góc phạm vi và tạo các đỉnh tại các tọa độ đó. Nó thậm chí có thể được sử dụng để phân tích. Nếu nó chỉ để hiển thị, nhấp chuột nhấp chuột nhấp chuột nhấp chuột hoạt động tuyệt vời.
Baltok

3
Tôi muốn nói bởi vì raster có thể là một hình dạng bất thường và, tùy thuộc vào sự phức tạp, có thể dẫn đến một công việc số hóa khá mệt mỏi
Phil Henley

4
Nhưng OP cho biết đó là hình chữ nhật. Có vẻ như một công việc khá đơn giản với tôi. Bằng cách phóng to và chính xác, sự khác biệt giữa phác thảo raster thực tế và phác thảo số hóa sẽ không đáng kể đối với bất kỳ ứng dụng trong thế giới thực nào.
Matt

10

Bạn có thể sử dụng công cụ Build Footprint trong Hộp công cụ quản lý dữ liệu. Bạn phải tạo một Bộ dữ liệu khảm từ raster của bạn.

Tạo một khảm mới trong Cơ sở dữ liệu địa lý tệp, thêm raster của bạn.

Mở khảm của bạn trong ArcMap và trích xuất dấu chân.

Đó là những gì tôi sẽ làm.


8

Tôi sử dụng kịch bản python đơn giản này, nó tạo ra một đa giác featureclass với phạm vi của tất cả các raster có trong một thư mục. Để sử dụng nó, bạn có thể tạo một công cụ trong ArcToolbox hoặc bạn chỉ cần thay đổi các biến InFolder và Dest (Destination).

import arcpy,os

InFolder = arcpy.GetParameterAsText(0)
Dest=arcpy.GetParameterAsText(1)

arcpy.env.workspace=InFolder
#The raster datasets in the input workspace
in_raster_datasets = arcpy.ListRasters()

arcpy.CreateFeatureclass_management(os.path.dirname(Dest),
                                   os.path.basename(Dest),
                                   "POLYGON")
arcpy.AddField_management(Dest,"RasterName", "String","","",250)
arcpy.AddField_management(Dest,"RasterPath", "String","","",250)

cursor = arcpy.InsertCursor(Dest)
point = arcpy.Point()
array = arcpy.Array()
corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]
for Ras in in_raster_datasets:
    feat = cursor.newRow()  
    r = arcpy.Raster(Ras)
    for corner in corners:    
        point.X = getattr(r.extent, "%s" % corner).X
        point.Y = getattr(r.extent, "%s" % corner).Y
        array.add(point)
    array.add(array.getObject(0))
    polygon = arcpy.Polygon(array)
    feat.shape = polygon
    feat.setValue("RasterName", Ras)
    feat.setValue("RasterPath", InFolder + "\\" + Ras)
    cursor.insertRow(feat)
    array.removeAll()
del feat
del cursor  

có thể cho chúng tôi biết chi tiết cách sử dụng mã này. Tôi muốn sử dụng nó trên tập tin raster .asc. Hình ảnh của tôi là thư mục con khác nhau khác nhau.?
Đồ tể dữ liệu GIS

1
Trả lời từ jeb đã làm việc cho tôi, không có đủ đại diện để bỏ phiếu cho anh ấy. @GIS Data Butcher Lưu nguồn hoàn chỉnh vào một tập tin script.txt và thực thi nó từ Python Window trong ArcMap. Bạn có thể sử dụng lệnh sau trên Python Window để thực thi tập lệnh từ tệp. > execfile (r'd: \ temp \ script.py ')
Asad

hoàn hảo!! tôi tự hỏi, có cách nào để công cụ đọc thư mục con không?
raphael

@raphael, chắc chắn, bạn chỉ cần thực hiện tiêu chuẩn python os.listdir hoặc os.walk trong tập lệnh.
Jeb

@jeb vâng, tôi có khái niệm ... bot tôi rất mới về điều này, và không thể làm cho nó hoạt động ... bạn có thể giúp đỡ không?
raphael

4

Ngoài ra, một cách dễ dàng là sử dụng công cụ Reclassify trong đó bạn nên nhấp vào nút Phân loại và thay đổi số lượng lớp thành 1. Nhấp vào Ok. Bây giờ, raster đầu ra có thể được chuyển đổi dễ dàng bằng cách sử dụng Raster sang Công cụ chuyển đổi đa giác. ;)


4

Tôi nghĩ rằng việc phân loại lại và chuyển đổi raster thành đa giác có thể quá tốn thời gian. Theo tôi, cách dễ nhất để làm điều đó là:

  • Nhận maxX, maxY, minX, minY (điều này có thể được thực hiện bằng Python với lệnh mô tả)
  • Chạy Tạo Fishnet với phạm vi như trên và số lượng hàng / cột là 1

Nếu bạn có nhiều trình quét, điều này nên được thực hiện bằng Python và có thể tạo ra hàng trăm dấu chân trong vài giây.


0

Trong ArcCatalog, bạn có thể tạo một danh mục raster trong .gdb (Công cụ quản lý dữ liệu-> Raster). Không quản lý là tốt. Sau đó nhấp chuột phải và tải (nếu các trình raster chỉ ngồi trong một thư mục thì "tải từ không gian làm việc". Nếu bạn tải danh mục raster vào ArcMap, bạn có thể nhấp chuột phải-> dữ liệu-> xuất dấu chân, dưới dạng tệp hình dạng hoặc lớp tính năng. Tệp hình dạng sẽ có trường 'tên' được điền với tên của raster.

Danh mục Raster sẽ tự động hiển thị các phạm vi nhưng tôi cần gửi các phạm vi cho ai đó không sử dụng ArcGIS.


0

Sử dụng công cụ "Raster to Polygon" trong hộp công cụ chuyển đổi. Hãy chắc chắn bỏ chọn hộp đa giác đơn giản hóa. Điều này sẽ tạo ra chính xác những gì bạn muốn.


8
Bạn có chắc chắn điều này không chỉ tạo ra một mớ đa giác khổng lồ, một cho mỗi tập hợp các pixel có giá trị bằng nhau trong ảnh gốc không?
whuber

Bạn luôn có thể thêm một sự hòa tan sau này để có được mức độ poly. Tuy nhiên, tôi đặt cược giải pháp python được liệt kê bởi @jeb là nhanh hơn.
GeoJohn

0

Công cụ "Raster Domain" sẽ tạo ra một đa giác xung quanh một raster có hình dạng không đều. Tôi tin rằng nó đòi hỏi phải có giấy phép cho phần mở rộng phân tích 3d.


0

Sử dụng ArcCatalog là lựa chọn tốt nhất. Tạo một bộ dữ liệu khảm từ các trình quét có sẵn. Xác định "KHÔNG CÓ GIÁ TRỊ" trong khảm để tránh nền của raster không được đưa vào đa giác. Xây dựng dấu chân bằng phương pháp X quang. Mở bộ dữ liệu khảm trong ArcGIS và xuất Dấu chân vào tệp shp. Cách tuyệt vời để có được ranh giới khảm ...


0

Nếu bạn đang cố gắng để có được phác thảo của một raster DEM thì bạn sẽ cần phải làm như sau

Nếu bạn có Nhà phân tích không gian và Nhà phân tích 3d thì bạn có thể:

  1. nhân raster với 0 để tạo raster giá trị không đổi bằng Raster Calculator.
  2. Chuyển đổi kết quả của bước 1 thành số nguyên raster bằng cách sử dụng "INT (Tool)". Điều này là cần thiết cho bước tiếp theo.
  3. chuyển đổi kết quả của bước 2 thành đa giác bằng công cụ Raster sang Polygon (chỉ hoạt động với số nguyên raster).

Xin chào Seamster02, chào mừng bạn đến với Sàn giao dịch xếp chồng GIS :) Như đã viết, điều này không khác biệt đáng kể so với câu trả lời được chấp nhận, gis.stackexchange.com/a/22016/108 .
matt wilkie
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.