QGIS kullanarak öznitelik değerine dayalı olarak çokgen içinde düzenli aralıklı noktalar oluşturuluyor mu?


11

Bir çokgen içinde bireylerin sayısını temsil eden bir öznitelik değeri ekli bir çokgen katman var. QGIS 3.0 kullanıyorum.

Sayıları bir çokgenin içindeki noktalar ızgarası olarak görselleştirmem gerekiyor (yani 1 nokta = 100 kurbağa, tür tarafından renklendirilmiş). Noktaların mutlaka tüm poligonu işgal etmesi gerekmez ve tercihen belirli bir çözünürlükte düzgün bir ızgarayı temsil edebilmeleri için önceden tanımlanmış aralıklarla (yani 300 m) bir sentroid etrafında çizilir.

Şu anda bulduğum geçici çözüm, bir haritaya çizilen kapsam içinde ızgaralar oluşturmak için count parametresiyle "Normal noktalar" kullanmak, ardından algoritma tarafından oluşturulan ekstra noktaları silmek (algoritma bir ızgaraya yuvarlanıyor ve 17 yerine 20 puan alabilirsiniz) giriş). Bu istenen sonucu üretir, ancak her çokgen için düzenli noktalar için alanın boyutunun yanı sıra manuel özellik girişi ve oluşturulan noktaların temizlenmesini gerektirir. Ayrıca, aralık yerine sayımı belirtilen "Normal Noktalar" çalıştırdığım için, her çokgen farklı aralıklı noktalar alır.

Özetle: Her çokgen (toplu) için düzenli noktalar (nokta sayısı, çizilmiş kapsam)> Ek noktaları sil> # noktalarına nitelik değerleri atayın

Alternatif (düzensiz aralıklardan kaçınır, ancak daha fazla manipülasyon gerektirir):

Tüm katmanın ölçüsündeki normal noktalar (yani 300m olarak tanımlanan)> Çokgen boyutuna klipsleyin> İstediğiniz nokta sayısı elde edilene kadar her çokgendeki ekstra noktaları silin> noktalara nitelik değerleri atayın.

Geçici çözümlerimle ilgili temel sorun, verileri güncellemeyi ve çok sayıda çokgenle çalışmayı zorlaştıran çokgen çokgen işlemedir.

Benzer soru, QGIS'de çokgen içinde düzenli aralıklı, tanımlanmış nokta sayısı oluşturma olarak sorulmuştur , ancak özellikler farklıdır.

İstenen sonucun ekran görüntüsü:

Özellik tablosuL:


1
Sorunuzdaki resim sonuç olarak ne beklediğinizi gösteriyor mu? Renkli noktaların sayısı nereden geliyor? Katmanın özellik tablosunu ekleyebilir misiniz? Özellikle renkleri ve sayıları daha iyi anlamak için Edmonton ve Sherwood Park'ı içeren çokgenlerin özellikleri.
Kadir Şahbaz

1. Bu sadece gerçek çokgenler ile pek bir ilgisi olmayan maskelenmiş verilerdir, ama evet bu tür bir sonuç bekliyorum, ama çokgenin merkezi etrafında noktalar var. 2. Sayımlar, ilk önce çokgen başına doğru sayıda nokta almak ve sonra ifadeleri kullanarak niteliği / renkleri atamak için bunları bir sütunda topladığım üç sütun / tür türü olduğundan öznitelik tablosu sütunlarından gelir. edit: soruya excel tablosu eklendi , değerleri temsil etmiyor, ancak verilerimin yapısını temsil ediyor.
Ruslan

Yanıtlar:


5

QGIS 3, küme oluşturucuda grid adı verilen yeni bir yer değiştirme yöntemiyle birlikte gelir. Görünüşe göre bu ihtiyacınız olan şey. Çokgeninizin sentroidinde istenen noktaların sayısını oluşturun.

resim açıklamasını buraya girin

Sadece bir GUI aracı ile puan oluşturmak için bir yöntem farkında değilim, ama nispeten basit bir python komut dosyası bunu yapmalıdır.

with edit(point_layer):
    for polygon_feature in polygon_layer.getFeatures():
        point_feature = QgsFeature(point_layer.fields())
        point_feature.setGeometry(polygon_feature.geometry().centroid())

        point_feature['type'] = 'Frog'
        for i in range(polygon_feature['Frogs']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Cat'
        for i in range(polygon_feature['Cats']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Diplodoc'
        for i in range(polygon_feature['Diplodocs']):
            point_layer.addFeature(point_feature)

Deli olmak istiyorsanız, bunu özel bir işleme algoritmasına sarın.


Teşekkürler Matthias, diğer çözümlerden bile daha iyi görünüyor. Bunu başarmak için nitelik tablosuna dayalı olarak istenen nokta sayısını hızlı bir şekilde oluşturmanın bir yolunu önerebilir misiniz?
Ruslan

Küçük bir python betiği yazmak dışında kolay bir yöntemin farkında değilim. Kod tamamen test edilmemiştir, bu yüzden bazı yazım hataları olabilir;)
Matthias Kuhn

Tekrar teşekkürler. Muhtemelen birçok katman / uzantı vb. İçin benzer bir görselleştirme yapmak zorunda kalacağım, bu yüzden bunun için en az bir işleme modeli oluşturmaya çalışacağım.
Ruslan

5

Sarath SRK'nın cevabından ilham alan başka bir yol olabilir:

  1. Çokgenlerin sentroidi
  2. Kare ile bir ifade kullanan ve ölçeğinize uyum sağlayan tampon: yani (1000 * (sqrt ("Frogs" + "Cats" + "Diplodocs") / 2)) + 1 ve Segment = 1, Uç başlığı stili = Kare
  3. Tampon ölçeği ile uyumlu bir boşluk ile yeni Izgara noktası.
  4. Arabellek katmanıyla kesişmeyen noktayı sil (konuma göre seç)
  5. niteliğe göre birleştirme (arabellek veya orijinal çokgenlerin özelliği)

Yine de böyle bir şey olacak resim açıklamasını buraya girin

  1. "@Row_number" virgülüyle yeni bir alan oluşturmak için à grafiksel modelleyici kullanın resim açıklamasını buraya girin

  2. Arabellek katmanındaki bir yinelemeyle modeli yürütün resim açıklamasını buraya girin

  3. Tüm yeni katmanları birleştir

  4. ID_pt alanı alanınızın toplamından daha büyük olan tüm noktaları silin ("Kurbağalar" + "Kediler" + "Diplodocs")

  5. Kurallarla kategorilere ayırın (ör.
    • "ID_pt" <= "Kurbağalar"
    • "ID_pt"> "Kurbağalar" ve "ID_pt" <= ("Kediler" + "Kurbağalar")
    • "ID_pt"> ("Kediler" + "Kurbağalar") ve "ID_pt" <= ("Kediler" + "Kurbağalar" + "Diplodocs") resim açıklamasını buraya girin

Bunun için teşekkürler! Bunu bugün denemek için zamanım olmayacaktı, ancak istenen çıktıyı aldığınız düşünülürse uygulanabilir bir çözüm gibi görünüyor.
Ruslan

1

Bunun için geometri üreteçlerini kullanabilirsiniz.

  1. Her renk / özellik için bir tane olacak şekilde sembole 3 alt katman ekleyin.
  2. Her bir alt katman için bir çokgen oluşturan bir ifade oluşturun.
  3. Şimdi zor kısım, özniteliğe göre çokgen için kare parçalar üretin. Bu özel bir python ifade işlevi gerektirir sanırım.
  4. İsteğe bağlı olarak, çokgenlerin ölçeklendirmesini ve aralığını belirlemek için harita ölçeği için oluşturma değişkenlerini kullanın.

Maalesef, şu anda tam bir cevap için çok meşgulüm, ancak bu tariften bir şeyler pişirmeye çalışmak çok ilginç bir meydan okuma olacak. Belki birisi bize buna dayalı güzel bir çözüm sunmaya çalışır.
Matthias Kuhn

1

Bir çözüm, her bir çokgenin centroidinde noktaları olan bir nokta katmanı oluşturmak olabilir. Örnek olarak, Edmonton 25'in üst üste bindirilmiş noktasına eriştiniz: 5 kurbağa niteliği, 20 puan kedi ve 0 diplodocs.

Ardından, yerleştirme yöntemini ızgara olarak ayarlanmış nokta deplasman oluşturucusunu kullanarak efekti elde edebilmeniz gerekir.

Zorluk nokta katmanı oluşturmaktır ....


0

Katman özelliklerinde bulunan Pasta grafiğini kullanmak çok basit bir alternatif olabilir mi? Nitelikler ve boyutlar bir ifade ile belirlenebilir.

resim açıklamasını buraya girin


2
Verileri haritalamanın alternatif yollarını biliyorum. Sorunun amacı, görselleştirme iş akışını mümkün kılmaktır. Pasta grafikler gerçekten işe yaramıyor çünkü ızgaraya baktığınızda bireylerin sayısında çok iyi bir fikir ediniyorsunuz. Pasta grafiklerinden her çokgenin kesin bireysel sayılarını tahmin etmeye çalışmak neredeyse imkansızdır.
Ruslan

0

Noktaları çokgen sentroidden başlayarak spiral bir yolda oluşturabilirsiniz. Aşağıdaki Stack Overflow post eşitlikçi noktalar oluşturmak için python kod var ama boş zaman eksikliği verilen şu anda test edemez.


Yeterince yakın görünüyor, ancak soruda belirtildiği gibi bunu kodlamak / orada önerilen kodu değiştirmek için yeterli değilim.
Ruslan

Umarım yeterli bilgi ve zamana sahip biri
devreye girer

0

Senin durumunda,

  1. Tüm AOI için belirli bir mesafeyi kullanarak düzenli aralıklarla noktalar oluşturun
  2. Tüm çokgenler (giriş) için sentroid noktaları oluşturun.
  3. '1' segment değerine sahip Sabit mesafe arabelleğini kullanarak bu sentroid noktaları için tampon oluşturun . Daire yerine kare tampon oluşturur (Arabellek çokgenlerini döndürmek istiyorsanız Qgis'te döndürme aracını kullanın).
  4. Vektör -> Araştırma araçları -> Konuma göre seç (çokgenler kuralı içindeki noktalar) kullanarak arabellek çokgenlerinin içine düşen bir nokta seçimi oluşturun.
  5. Seçimi değiştirin ve arabellek çokgenlerinin dışındaki noktaları silin. Yani şimdi çokgenlerin sentroidi etrafında düzenli aralıklarla puanlar aldınız.
  6. Tüm noktalar için Çoğunluk özelliği verin ve diğer noktaların manuel olarak sınıflandırılması gerekir . Özellikleri kolayca güncellemek için QuickMultiAttributeEdit aracını kullanın.

Teşekkürler, bu işlem adımlarını azaltmış gibi görünüyor, ancak bu, manuel olarak seçme ihtiyacı olan sorunu çözmüyor (çokgenler içindeki tamponlar boyut olarak aynı olacaktır = çokgen başına aynı sayıda nokta), her biri için oluşturulan noktaları silme ve ilişkilendirme Bu ve iş akışımla ilgili ana sorun olan çokgenler.
Ruslan
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.