ArcGIS Desktop kullanarak bir Shapefile'dan çakışan çokgenleri sayıyor musunuz?


10

16.400 çokgen içeren bir şekil dosyam var. Her çokgen, bir kuş türünün tüm dünya için genişlemesini gösterir.

resim açıklamasını buraya girin

Şimdi örtüşen çokgenleri saymalıyım. Sendika ile denedim ve dağıttım (birliği sayın), ancak sendika çok fazla çokgen için çalışmıyor.

Sonra kıtaları kırpmaya çalıştım, ancak çok sayıda çokgen nedeniyle bu da çalışmıyor. Üstelik bu yöntemi de denedim , başarılı olamadı.

Bu nedenle, size 16400 çokgen bir şekil dosyasındaysa, çakışan çokgenleri saymanın bir yolu olduğunu soruyorum.

10.0 ile çalışıyorum ve 10.2 ile çalışabiliyorum. Bir ArcPy çözümü de harika.

Şu anda bir ağ oluşturmayı düşünüyorum ve 16400 çokgenleri ile shp satırları üzerinde yineleme yapıyorum ve çokgen bu hücrede ise ve bir sonraki satırı (çokgen) almak için bir fishnet hücresinin değer alanına 1 yazıyorum ve bu da fishnet hücre sayısında +1 varsa.

Ama bunun iyi bir çözüm olup olmadığını ve nasıl gerçekleştirileceğini bilmiyorum. Ya da bu yaklaşımı kullanabilmek için R öğrenmem gerekiyor .

Sonuç: Üst üste binenlerden yeni çokgenlere sahip olduğunuz bir şekil ve örtüşmelerin sayıldığı bir alan olmalıdır.

Sonuçta, aynı yerde kaç kuş türünün bulunduğunu görebileceğiniz bir şekil dosyası olmalıdır.


veri kümenizin boyutu nedeniyle sorununuz bir sorundur. Yanıtlar (ve önerdiğiniz bağlantı) doğrudur, ancak bellek sorunlarınız olacaktır. Belki milyarlarca şerit çokgeninin oluşmasını önlemek için ilk önce verilerinizle birkaç yüz metre (beklenen hassasiyete dayalı olarak) bir entegrasyon deneyebilirsiniz. Verilerinizi değiştireceğinden, için bir kopya üzerinde çalıştığınızdan emin olun.
radouxju

1
Şekil dosyamızı bölgesel şekil dosyalarına ayırın, ardından bölgesel şekil dosyalarında analizi çalıştırın, ardından tam dosyayı tekrar almak için bunları çözün.
til_b

Bu şekli sadece bir ülkeyle kesmeye çalıştım ama 999999 hatasını geri aldım.
Nora

1
Çokgenlerinizin karmaşıklığını azaltmak için Zar aracına baktınız mı ? Ayrıca sadece verilerinizi kırpmaya çalışan bir 999999 hatası alıyorsanız, herhangi bir görüş fırlatıp atmadığını görmek için kontrol geometrisi aracını denediniz mi?
Hornbydd

2
Veriler üzerinde kısmi bir Geometri kontrolü yaptım ve çok fazla kesişim var. Şunu öneririm 1. Maksimum RAM kullanımı ve büyük sayfa dosyası sağlayın 2. geometriyi onarın 3. Gerekirse, çokgenleri basitleştirin 3. Verileri 1 / 3s veya 1 / 4s olarak ayarlayın (veya gerekliyse) 4. Union-Dissolve-Rasterize iş akışını çalıştırın gibi bu cevap 5. Sum Rasterle.
Cotton.Rockwood

Yanıtlar:


9

Sayılan Çakışan Özellikler (Analiz) aracını kullanmanızı öneririm .

Giriş özelliklerinden düzlemsel örtüşen özellikler üretir. Çakışan özelliklerin sayısı çıktı özelliklerine yazılır.

resim açıklamasını buraya girin


Ben de denedim, ve benim shp (çok büyük) için çalışmıyor. cevap verdiğiniz için teşekkürler
Nora

1
@Aaron bağlantı öldü. Şimdi Pro'da bu uygulama var: pro.arcgis.com/en/pro-app/tool-reference/analysis/…
Albert

1
Teşekkürler @Albert, yayın önerilerinize göre güncellendi.
Aaron

5

Arcpy geometri belirteçlerini kullanarak, şöyle bir şey deneyebilirsiniz:

resim açıklamasını buraya girin

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

Yukarıdaki örnek veriler için, kod aşağıdaki çakışma sayılarını döndürür: resim açıklamasını buraya girin

Olduğu gibi kod, yalnızca en az bir çakışması olan çokgenler için sayıları döndürür.


@ Nxau: Tamam, sanırım sonucun nasıl görünmesi gerektiğini açıklamak için bir hata yaptım. Çakışanlardan yeni çokgenlerin olduğu bir şekil olmalıdır. Örneğin, resminizde 4 ve 5 numaralı daireler çakışıyor. Yeni şeklin üç çokgeni olmalıdır. (Sendika bu büyük şekil için çalışmıyor). Üst üste binen alan bir alanda 2 değerine sahip olmalı ve geri kalan 4 ve 5 daireleri de bu alanda 1 değerine sahip olmalıdır. Sonuçta, aynı yerde kaç kuş türünün bulunduğunu görebileceğiniz bir şekil dosyası olmalıdır. Senaryonuz için teşekkürler!
Nora

5

Çok basit bir yöntem:

  1. Şekil dosyasını kendisiyle birleştirin;
  2. Çok parçalı çıktıyı tek parçaya dönüştürün ;
  3. Çakışmaları saymak için uzamsal birleştirme aracını kullanın (ARE_IDENTICAL_TO eşleme seçeneğini kullanın);
  4. join_countAlanı kullanarak sembolize edin .

resim açıklamasını buraya girin


1

Sanırım şu yöntemi denediniz: ArcGIS Desktop'ta çokgen çakışmalarını sayma ve rasterleştirme?

16.400 çokgen o kadar da değil. Ancak, potansiyel çözümlerden biri, düzenli bir Mekansal Katılma yapmaktır. İçinde ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join.

Hem targetve joinözelliklerini aynı veri kümesine ayarlayın ve bir çıktı belirtin. Ayarların geri kalanını bırakın.

Birkaç dakika sonra "birleştirme sayısı" sütunu içeren bir şekil dosyasını geri almanız gerekir. Bundan 1 çıkarın (açıkçası her özelliğin kendisi kesişmesi gerekir) ve bu her çokgen için "örtüşmeler" (aslında kesişir) sayısı olmalıdır.

Az önce yaptım


Evet, yaklaşımı zaten linkten denedim. Ancak bu shp için sendika kullanmak imkansız. Uzamsal Birleştirmeyi Deniyorum Bunu geri aldım: HATA 000426: Bellek Yetersiz.
Nora

Sadece 4GB RAM ile bir makinede çalıştırıyorum ve yaklaşık 5 kat daha fazla özelliğe sahiptim, bu yüzden çok daha düşük bir sayı ile çalışmamasına şaşırdım. Verilerinizde çok fazla köşe noktası olabilir (benimki yaklaşık 60 MB'dı; .shp dosyanız ne kadar büyük?). Genelleştirmeyi deneyin.
CBS-Jonathan

Sadece shp bir fgdb'de ise fgdb 1,73 GB'a sahiptir. Bir klasörde şeklin 2,00 GB'si vardır.
Nora

Bu veri setini de kullandım ve sorunların çoğunun ortaya çıktığını düşünüyorum çünkü çokgenlerin çok azının birçok parçası var. Çözünürlük ile birlikte bu çok bellek yoğun bir görev yapar.
Cotton.Rockwood

@ Cotton.Rockwood: Ve çözümü R'de buluyorsunuz, değil mi? Ben 'katılmak sayısı' değeri ile raster için çokgen daha 500 poligon (33 seçim) girişi ile 'Çakışan Çokgenler Saymak' araç kutusu kullanmayı düşünüyorum ve sonunda raster (ModelBuilder) hesaplamak. Uzun zaman alıyor ...
Nora

1

"Çakışan Çokgenleri Say" aracını indirip denedim. Çalışabilir, ancak çok uzun zaman alır (muhtemelen dosya boyutu nedeniyle, ancak FC girişimin yalnızca <5.000 kaydı vardı).

Bu aracın çalışmasını beklerken başka bir ArcMap penceresi açtım ve istediğim şeyi elde etmek için sadece birkaç hızlı adım attı. 1) Uzamsal Birleştirme - Hedef ve Birleştirme Özellikleri ile aynı özellik sınıfını kullanarak ve "Bire Çok Katıl" seçeneğini seçin. 2) Çözün - son adımdaki çıktıyı kullanarak. Çözme alanı olarak "TARGET_FID" kullanın ve istatistikler için "Join_Count" alanını TOPLA veya "JOIN_FID" alanını COUNT yapabilirsiniz. 3) 2. adımdaki çıktı dosyasında, her özellik birbiriyle kesiştiği için alan hesap makinesini istatistik alanından ("SUM_Join_Count" veya "COUNT_JOIN_FID") 1 çıkarın.

Bu yöntemi "Çakışan Çokgen Say" aracı üzerinden kullanmanızı öneririm. Bu Join-> Dissolve yöntemine başlamadan önce COP aracını ~ 5 dakika çalıştırmaya başladım ve bana "Üst üste binen çokgen sayımı" aracı bile bitmeden bunu yazmak için yeterli zaman verdi.

Bu yardımcı olur umarım!

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.