วิธีการค้นหาว่ารูปหลายเหลี่ยมมีรูที่ใช้เครื่องคิดเลขใน ArcGIS หรือไม่


10

ซอฟต์แวร์บุคคลที่สามบางตัวไม่สามารถจัดการรูปหลายเหลี่ยมที่มีรู (โดนัทรูปหลายเหลี่ยม) ในการค้นหาพวกเขาฉันมักจะใช้เครื่องคิดเลขฟิลด์ ArcView 3 เพราะ:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามเมื่อฉันพยายามทำสิ่งนี้ใน ArcGIS ฉันได้รับสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นคำถามคือทำอย่างไรให้ถูกต้องใน ArcGIS


ฉันประหลาดใจที่ไม่ได้ทำงานตามที่คาดไว้ดังนั้นฉันจึงขุดบางส่วน ปรากฎว่าโดนัทบางครั้งสามารถ (?) เป็นคุณสมบัติส่วนเดียวที่มีวงแหวนด้านใน - ดูประโยค / กราฟิกก่อนบล็อกรหัสสุดท้ายที่หน้านี้ ฉันยังเห็นเธรดเกี่ยวกับสคริปต์ที่จะตรวจจับพวกมันในไพ ธ อน แต่ไม่ใช่ในเครื่องคำนวณภาคสนาม
คริส W

ฉันสามารถทำได้โดยใช้รหัสบล็อก แต่มันน่าเกลียด สายหลัก prt = shp.getPart (0) feat = arcpy.Polygon (prt) มันเพียงพอที่จะคำนวณ feat.area และเปรียบเทียบกับ shp.area
FelixIP

แหล่งข้อมูลที่เกี่ยวข้อง: gis.stackexchange.com/questions/27255โซลูชันการเปรียบเทียบพื้นที่ของคุณอาจน่าเกลียด แต่ดูเหมือนว่ามันใช้งานได้และภายในเครื่องคำนวณภาคสนาม อาจเป็นการโพสต์ที่คุ้มค่าเป็นคำตอบ
คริส W

ฉันอยากให้เครดิตกับ @Hornbydd มากกว่าเพราะคำตอบของเขาเปรียบเทียบจำนวนเต็มของฉัน (ซึ่งฉันรู้มานานแล้ว) เกี่ยวข้องกับคู่
FelixIP

คำตอบ:


19

นับเป็นส่วนหนึ่งจะไม่ทำให้ได้คำตอบที่ถูกต้อง คุณสามารถมีรูปหลายเหลี่ยมหลายส่วนที่ไม่มีรู ดูภาพด้านล่างสำหรับสถานการณ์

รูปหลายเหลี่ยมหลายส่วน

นี่น่าจะเป็นคำถามง่ายๆ pre-ArcGIS 10 ที่คุณเรียกว่า ArcObjects เพื่อถามว่ารูปหลายเหลี่ยมมีรู แต่ ESRI ลบการสนับสนุนนี้มากในสภาพแวดล้อม VBScripting จนถึงจุดที่ไร้ประโยชน์จริงๆตอนนี้ ...

อย่างไรก็ตามคุณสามารถแก้คำถามนี้ด้วย Python:

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

ในกล่องนิพจน์คุณจะวางสิ่งต่อไปนี้:

hasHole(!Shape!)

ขอบคุณสำหรับคำตอบที่สง่างาม สิ่งที่ฉันใช้ในกรณีที่ไม่มี ArcView 3 มีความน่าเชื่อถือน้อยกว่าดูความคิดเห็นของฉันที่ @ChrisW
FelixIP

1

คุณหมายถึงความแตกต่างระหว่างสองนิพจน์หรือไม่? ถ้าใช่ดูเหมือนว่าด้านล่างใช้ Python เป็นตัวแยกวิเคราะห์ที่ที่ด้านบนใช้ VB หากต้องการเปลี่ยนแปลงสิ่งนี้ในหน้าต่าง Field Calculator ใน ArcGIS เพียงเลือก VB แทน Python และนิพจน์ด้านบนจะทำงาน


การแสดงออกใน VB โปรดคืออะไร
FelixIP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.