Cách tìm nếu đa giác có lỗ bằng máy tính trường trong ArcGIS


10

Một số phần mềm của bên thứ 3 không thể xử lý đa giác có lỗ (đa giác donut). Để tìm thấy chúng, tôi luôn sử dụng máy tính trường ArcView 3, bởi vì:

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

tuy nhiên khi tôi cố gắng làm điều này trong ArcGIS, tôi nhận được điều này:

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

Vì vậy, câu hỏi là làm thế nào để làm cho nó đúng trong ArcGIS.


Tôi đã rất ngạc nhiên khi partcount không hoạt động như mong đợi, vì vậy tôi đã thực hiện một số hoạt động đào. Hóa ra đôi khi rõ ràng bánh rán có thể (?) Là các tính năng một phần với các vòng bên trong - xem câu / đồ họa trước khối mã cuối cùng tại trang này . Tôi cũng thấy một chủ đề về một kịch bản sẽ phát hiện ra chúng trong python, nhưng không phải trong máy tính trường.
Chris W

Tôi có thể làm điều đó bằng cách sử dụng một khối mã, nhưng nó thật xấu xí. Các dòng chính prt = shp.getPart (0) feat = arcpy.Polygon (prt). Nó là đủ để tính feat.area và so sánh nó với shp.area
FelixIP

Tài nguyên liên quan: gis.stackexchange.com/questions/27255 Giải pháp so sánh khu vực của bạn có thể xấu, nhưng có vẻ như nó hoạt động và trong Máy tính Trường. Có thể đáng đăng bài như một câu trả lời.
Chris W

Tôi thà cung cấp tín dụng cho @Hornbydd, bởi vì câu trả lời của anh ta so sánh các số nguyên, giao dịch của riêng tôi (mà tôi biết từ lâu) với các giao dịch nhân đôi
FelixIP

Câu trả lời:


19

Số phần sẽ không mang lại câu trả lời chính xác . Bạn có thể có một đa giác nhiều phần không có lỗ. Xem hình ảnh dưới đây cho kịch bản.

Đa giác nhiều phần

Đây có thể là một truy vấn đơn giản trước ArcGIS 10 vì bạn có thể đã gọi ArcObjects để hỏi xem đa giác có lỗ không nhưng ESRI đã loại bỏ phần lớn sự hỗ trợ này trong môi trường VBScripting đến mức bây giờ khá là vô dụng, thật đáng xấu hổ ...

Dù sao, bạn có thể giải quyết câu hỏi này với một số Python:

def hasHole(geom):
  parts = geom.partCount
  boundaries = geom.boundary().partCount
  if boundaries > parts:
    return 1
  else:
    return 0

Trong hộp biểu thức, bạn sẽ đặt như sau:

hasHole(!Shape!)

Cảm ơn câu trả lời tao nhã. Ứng dụng tôi sử dụng khi không có ArcView 3 ít đáng tin cậy hơn, hãy xem nhận xét của tôi tới
@ChrisW

1

Bạn đang đề cập đến sự khác biệt giữa hai biểu thức? Nếu có, có vẻ như phần dưới cùng đang sử dụng Python làm trình phân tích cú pháp trong đó phần trên cùng đang sử dụng VB. Để thay đổi điều này trong cửa sổ Máy tính Trường trong ArcGIS, chỉ cần chọn VB thay vì Python và biểu thức trên cùng sẽ hoạt động.


Xin vui lòng biểu hiện trong VB là gì
FelixIP 11/02/2015
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.