Çokgen'in ArcGIS'te alan hesap makinesini kullanarak bir deliği olup olmadığını bulma


10

Bazı üçüncü taraf yazılımları delikli çokgenleri (çörek çokgenleri) işleyemez. Onları bulmak için her zaman ArcView 3 alan hesap makinesini kullanırım, çünkü:

resim açıklamasını buraya girin

Ancak bunu ArcGIS'te yapmaya çalıştığımda şunu alıyorum:

resim açıklamasını buraya girin

Soru şu: ArcGIS'te bunu nasıl doğru yapacağız.


Partcount'un beklendiği gibi çalışmadığına şaşırdım, bu yüzden biraz kazma yaptım. Görünüşe göre çöreklerin bazen (?) İç halkalarla tek parça özellikler olabileceği ortaya çıkıyor - bu sayfadaki son kod bloğundan önce cümle / grafiğe bakın . Ben de gördüm bir iş parçacığı ama, Python onları tespit edecek bir komut dosyası hakkında değil saha hesap makinesi.
Chris W

Bir kod bloğu kullanarak yapabilirim, ama çirkin. Ana hatlar prt = shp.getPart (0) feat = arcpy.Polygon (prt). Feat.area'yı hesaplamak ve shp.area ile karşılaştırmak yeterlidir
FelixIP

İlgili kaynak: gis.stackexchange.com/questions/27255 Alan karşılaştırma çözümünüz çirkin olabilir, ancak işe yarar ve Alan Hesaplayıcı içinde görünüyor. Cevap olarak göndermeye değer olabilir.
Chris W

@Hornbydd'e kredi vermeyi tercih ederim, çünkü cevabı tamsayıları karşılaştırıyor, kendi (uzun zaman önce biliyordum) çiftler ile
ilgileniyor

Yanıtlar:


19

Parça sayısı doğru cevabı vermeyecektir . Deliksiz çok parçalı bir çokgen olabilir. Senaryo için aşağıdaki resme bakın.

Çok parçalı çokgenler

Çokgen bir delik olup olmadığını sormak için ArcObjects'i arayabileceğiniz için ArcGbIS 10 öncesi basit bir sorgu olurdu, ancak ESRI VBScripting ortamında bu desteğin çoğunu şimdi oldukça işe yaramaz, utanç verici bir noktaya kadar kaldırmıştı. ...

Her neyse, bu soruyu bazı Python ile çözebilirsiniz:

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

İfade kutusuna aşağıdakileri yerleştirirsiniz:

hasHole(!Shape!)

Zarif cevap için teşekkürler. ArcView 3'ün yokluğunda kullandığım daha az güvenilirdi, @ChrisW
FelixIP

1

İki ifade arasındaki farka mı atıfta bulunuyorsunuz? Cevabınız evet ise, alt kısım ayrıştırıcı olarak Python kullanıyor ve üstte VB kullanıyor. Bunu ArcGIS'teki Alan Hesaplayıcı penceresinde değiştirmek için, Python yerine VB'yi seçmeniz yeterlidir ve en üstteki ifade çalışmalıdır.


VB lütfen ifade nedir
FelixIP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.