QGIS'de rastgele nokta çokgen dolgu sembolojisi mi oluşturuyorsunuz?


9

QGIS 2.18.3 kullanarak, poligon sembolojime rastgele bir nokta deseni uygulamak istiyorum. Varsayılan Stil Yöneticisi, Mezarlık-25-50k adlı düzenli aralıklı bir nokta desenine sahiptir (lütfen aşağıdaki resme bakın). Bu iyi bir başlangıç ​​noktası, ama açıkçası rastgele değil.

resim açıklamasını buraya girin

Alternatif olarak, Katman Özellikleri'nde (aşağıda) Nokta Deseni dolgu seçeneklerini gözden geçirdim, ancak rastgele bir desen oluşturacak hiçbir şey görünmüyor.

resim açıklamasını buraya girin

Yeniden oluşturmam gereken, burada gösterilen ESRI Arcmap rastgele nokta sembolojisidir:

resim açıklamasını buraya girin


bir olasılık (rasgelelik üzerinde daha fazla kontrole izin veren ve aynı zamanda ağaçlar gibi ani semboller kullanan) bir SVG (rasgele döşenmiş klonlar kullanarak) oluşturmak ve bir SVG dolgusu kullanmak için inkscape kullanmaktır.
Steven Kay

Yanıtlar:


12

Aşağıdaki adımları kullanarak rastgele nokta sembolojisi ekleyebilirsiniz:

  1. '+' Düğmesini kullanarak yeni simge katmanı ekleyin:

resim açıklamasını buraya girin

  1. Sembol katmanı türünü 'Nokta deseni dolgusu' olarak değiştirin
  2. Sol yan ağaçta 'Nokta deseni dolgusu' seçeneğini vurgulayın
  3. Yatay ve dikey mesafeleri makul değerlere değiştirin. Bu örnekte, her iki mesafe için de aynı değeri seçtim.2.0
  4. Yatay yer değiştirme ve dikey yer değiştirme altında aşağıdaki işlevleri kullanın:

    5.1 Yatay yer değiştirme için:

    randf(3,5) 

    5.2 Dikey yer değiştirme için

    randf(2,4) 
  5. Nokta katmanını çoğaltın ve yatay ve dikey mesafeleri sırasıyla 6 ve 3 olarak değiştirin. Yatay yer değiştirme ve dikey yer değiştirme altında aşağıdaki işlevleri kullanın:

    6.1 Yatay yer değiştirme için:

    randf(0,1) 

    6.2 Dikey yer değiştirme için

    randf(1,2) 
  6. Sembol boyutunu 2'ye düşürmeniz gerekir Pixels

Çıktıyı aşağıdaki görüntüde görebilirsiniz:

resim açıklamasını buraya girin

Bestecide, efsane şöyle görünecektir:

resim açıklamasını buraya girin


2
Yerleşik Arc sembolojisinin rasgeleliğini çoğaltmaz, ancak bu güzel bir çözümdür. Rasgeleliği artırmak için, yatay ve dikey mesafelerde randf () işlevini kullanın ve dolguyu birkaç kez çoğaltın.
Ed Rollason

1
@EdRollason Yorumunuz için teşekkür ederiz. Ayrıca randf () işlevine sahip birkaç katman eklemek de iyi bir fikirdir.
ahmadhanb

1
@ahmadhanb İlginç bir çözüm, yer imi eklendi!
mgri

2

başka bir teknik, bir SVG oluşturmak için InkScape'in ve QGIS'de bir SVG dolgu katmanının kullanılmasını içerir.

Semboloji üzerinde daha fazla kontrol sağlar (örneğin, sadece noktalar değil rastgele dağılmış ağaçlar çizebilirsiniz) ve aralık üzerinde daha fazla kontrol sağlar

  • Inkscape'de bir daire / ağaç çizin ve nesneyi seçin
  • Düzenle> Klon> Döşenmiş klonlar
  • 5 x 5 veya 10x10 kiremitli klonlar oluşturun (deyin). Çok fazla sembolünüz varsa QGIS mücadele edeceğinden ızgaranın boyutunu küçük tutmak iyi bir fikirdir.
  • Shift sekmesinde, böyle bir şey seçin ... varsayılan ayarları kullan tamam, ancak 'titreşim' eklemek için Rastgele ayarını değiştirin .

Ayarlarla denemeler yapın Remove, sonuç iyi değilse her zaman tıklayabilirsiniz .

resim açıklamasını buraya girin

  • Tıklayın Create.
  • Tüm döşenmiş klonları kullanarak CtrlA
  • CtrlShiftD belge özelliklerini getirmek
  • Sayfayı çizime veya seçime yeniden boyutlandır'ı seçin
  • SVG olarak kaydedin, ancak Basit SVG biçimini kullandığınızdan emin olun
  • Şimdi QGIS'i bir SVG sembol dolgusu olarak getirin.

İşte QGIS yerleşik ağaçlarından birinin 5 x 5 kopyasından oluşan rastgele bir ızgara oluşturduğum yer. Aralık ve titreme ile deney yaparak farklı görünümler elde edebilirsiniz. QGIS'in Yatay Yer Değiştirme özelliğini de deneyebilirsiniz . Bunu yatay mesafenin yarısına ayarlayarak, "döşenmiş" görünümü ayırır (duvara tuğla gibi bir desen verir)

resim açıklamasını buraya girin


1

Sadece bazı ayarlamalar ile qgis 3.5.x ile çalışan çevrimiçi komut dosyası bulundu

Orijinal yazıyı kaybettim, bu yüzden yazara kredi veremem.

Yaptığınız şey:

  • dolgu katmanı oluştur "geometri üreteci" olarak değiştir
  • "geometri tipini" noktalara değiştir
  • ifade için metin alanının sağındaki "sigma" düğmesini tıklayın
  • "ifade iletişim kutusu" penceresinde sekmeyi "İşlev düzenleyici" olarak değiştirin ve aşağıdaki kodu buraya yapıştırın
  • Şimdi "ifade iletişim kutusuna" işlev çağrısını şu şekilde yapıştırın: fillGrid (0.001,0.001,1) (ilk 2 değer rastgele boyuttur)
  • Değişiklikleri kaydedin ve görünümü güncelleyin.
  • Harika rastgele noktalar var.

Senaryonun orijinal yazarı sayesinde.

from qgis.core import *
from qgis.gui import *
import math
import random

"""
Define a grid based on the interval and the bounding box of
the feature. Grid will minimally cover the feature and be centre aligned

Create a multi-point geometry at the grid intersections where
the grid is enclosed by the feature - i.e. apply a clipping mask

Random value determines amount of randomness in X/Y within its
grid square a particular feature is allowed to have
"""
@qgsfunction(args='auto', group='Custom')
def fillGrid(xInterval, yInterval, rand, feature, parent):
  box = feature.geometry().boundingBox()

  #Create a grid that minimally covers the boundary
  #using the supplied intervals and centre it
  countX = math.ceil(box.width() / xInterval)
  countY = math.ceil(box.height() / yInterval)

  #Align the grid
  gridX = countX * xInterval
  gridY = countY * yInterval
  dX= gridX - box.width()
  dY= gridY - box.height()
  xMin = box.xMinimum() - (dX/2)
  yMin = box.yMinimum() - (dY/2)

  points = []
  #+1 to draw a symbol on the n+1th grid element
  for xOff in range(countX+1):
    for yOff in range(countY+1):

      ptX = xMin + xOff*(xInterval) + rand * random.uniform(0,xInterval)
      ptY = yMin + yOff*(yInterval) + rand * random.uniform(0,xInterval)

      pt = QgsPointXY(ptX,ptY)
      point = QgsGeometry.fromPointXY(pt)
      if feature.geometry().contains(point):
        points.append(pt)

  return QgsGeometry.fromMultiPointXY(points)
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.