यादृच्छिक बिंदु बहुभुज बनाना QGIS में सहजीवन भरें?


9

QGIS 2.18.3 का उपयोग करते हुए, मैं अपनी बहुभुज सहजीवन के लिए एक यादृच्छिक बिंदु पैटर्न लागू करना चाहूंगा। डिफॉल्ट स्टाइल मैनेजर का एक नियमित रूप से स्थान बिंदु पैटर्न होता है, जिसे सिमेट्री-25-50k कहा जाता है (कृपया नीचे चित्र देखें)। यह एक अच्छा शुरुआती बिंदु है, लेकिन स्पष्ट रूप से यादृच्छिक नहीं है।

यहाँ छवि विवरण दर्ज करें

वैकल्पिक रूप से, मैंने लेयर प्रॉपर्टीज़ (नीचे) के भीतर पॉइंट पैटर्न फिल विकल्पों की समीक्षा की है, लेकिन ऐसा कुछ भी नहीं प्रतीत होता है जो एक यादृच्छिक पैटर्न उत्पन्न करता हो।

यहाँ छवि विवरण दर्ज करें

ईएसआरआई आर्कमैप रैंडम पॉइंट सिम्बोलॉजी के लिए मुझे जो कुछ भी बनाना है, वह यहाँ दिखाया गया है:

यहाँ छवि विवरण दर्ज करें


एक संभावना (जो यादृच्छिकता पर अधिक नियंत्रण की अनुमति देती है, और पेड़ों की तरह असामान्य प्रतीकों का भी उपयोग करती है) एक एसवीजी बनाने के लिए इंकस्केप का उपयोग करना है (यादृच्छिकता के साथ टाइलों का उपयोग करके), और एक एसवीजी भरण का उपयोग करें।
स्टीवन

जवाबों:


12

आप निम्न चरणों का उपयोग करके यादृच्छिक बिंदु सहजीवन जोड़ सकते हैं:

  1. '+' बटन का उपयोग करके नई प्रतीक परत जोड़ें:

यहाँ छवि विवरण दर्ज करें

  1. 'लेयर पैटर्न फिल' के लिए सिंबल लेयर टाइप बदलें
  2. बाईं ओर के पेड़ में 'प्वाइंट पैटर्न फिल' हाइलाइट करें
  3. क्षैतिज और ऊर्ध्वाधर दूरी को उचित मानों में बदलें। इस उदाहरण में, मैंने दोनों की दूरी के लिए समान मान चुना2.0
  4. क्षैतिज विस्थापन और ऊर्ध्वाधर विस्थापन के तहत, निम्नलिखित कार्यों का उपयोग करें:

    5.1 क्षैतिज विस्थापन के लिए:

    randf(3,5) 

    5.2 ऊर्ध्वाधर विस्थापन के लिए

    randf(2,4) 
  5. बिंदु परत को डुप्लिकेट करें और क्षैतिज और ऊर्ध्वाधर दूरी को क्रमशः 6 और 3 में बदलें। क्षैतिज विस्थापन और ऊर्ध्वाधर विस्थापन के तहत, निम्नलिखित कार्यों का उपयोग करें:

    6.1 क्षैतिज विस्थापन के लिए:

    randf(0,1) 

    6.2 ऊर्ध्वाधर विस्थापन के लिए

    randf(1,2) 
  6. आपको प्रतीक का आकार 2 तक कम करना होगा Pixels

आप निम्न छवि में आउटपुट देख सकते हैं:

यहाँ छवि विवरण दर्ज करें

संगीतकार में, किंवदंती इस तरह दिखाई देगी:

यहाँ छवि विवरण दर्ज करें


2
यह बिल्ट-इन आर्क सिम्बोलोजी की यादृच्छिकता की काफी नकल नहीं करता है लेकिन यह एक अच्छा समाधान है। यादृच्छिकता को बढ़ाने के लिए, क्षैतिज और ऊर्ध्वाधर दूरी पर रैंडफ () फ़ंक्शन का उपयोग करें और कई बार डुप्लिकेट भी भरें।
एड रोलसन

1
@EdRollason आपकी टिप्पणी के लिए धन्यवाद। रैंडफ () फ़ंक्शन के साथ कई परतों को जोड़ना भी एक अच्छा विचार है।
अहमदनब

1
@ahmadhanb दिलचस्प समाधान, बुकमार्क!
माजरी

2

एक अन्य तकनीक में एसवीजी बनाने के लिए इंकस्केप का उपयोग करना, और क्यूजीआईएस में एक एसवीजी फिल परत का उपयोग करना शामिल है।

यह सहजीवन पर अधिक नियंत्रण की अनुमति देता है (जैसे आप बेतरतीब ढंग से बिखरे हुए पेड़ों को आकर्षित कर सकते हैं, न कि केवल अंक) और रिक्ति पर अधिक नियंत्रण

  • Inkscape में, एक सर्कल / ट्री ड्रा करें, और ऑब्जेक्ट का चयन करें
  • संपादित करें> क्लोन> टाइल वाले क्लोन
  • 5 x 5 या 10x10 टाइल वाले क्लोन बनाएं (कहें) ग्रिड का आकार छोटा रखना एक अच्छा विचार है क्योंकि यदि आपके पास बहुत सारे प्रतीक हैं तो QGIS संघर्ष करेगा।
  • Shift टैब में, ऐसा कुछ चुनें ... डिफ़ॉल्ट सेटिंग्स का उपयोग करना ठीक है, लेकिन 'घबराना' जोड़ने के लिए रैंडमाइज़ सेटिंग बदलें ।

सेटिंग्स के साथ प्रयोग करें, Removeयदि परिणाम अच्छा नहीं है तो आप हमेशा क्लिक कर सकते हैं ।

यहाँ छवि विवरण दर्ज करें

  • क्लिक करें Create
  • का उपयोग कर सभी टाइलों क्लोन का चयन करें CtrlA
  • CtrlShiftD दस्तावेज़ गुण लाने के लिए
  • का चयन करें ड्राइंग या चयन करने के लिए आकार पेज
  • एसवीजी के रूप में सहेजें, लेकिन सुनिश्चित करें कि आप सरल एसवीजी प्रारूप का उपयोग करते हैं
  • अब SVG सिंबल फिल के रूप में QGIS में लाएं।

यहाँ एक है जहाँ मैंने QGIS निर्मित पेड़ों में से 5 x 5 प्रतियों का एक यादृच्छिक ग्रिड बनाया है। रिक्ति और घबराहट के साथ प्रयोग करके आप अलग-अलग दिख सकते हैं। आप QGIS के क्षैतिज विस्थापन के साथ भी प्रयोग कर सकते हैं । उस क्षैतिज दूरी को आधा करने के लिए, यह "टाइल" लुक को तोड़ता है (एक दीवार में ईंटों जैसा पैटर्न देता है)

यहाँ छवि विवरण दर्ज करें


1

बस ऑनलाइन स्क्रिप्ट मिली कि कुछ समायोजन के साथ qgis 3.5.x के साथ काम करें

मैं मूल पोस्ट खो दिया इसलिए लेखक को श्रेय नहीं दिया जा सकता।

आप क्या कर रहे हैं:

  • भरण लेयर बनाकर इसे "ज्योमेट्री जनरेटर" में बदलें
  • "ज्यामिति प्रकार" को बिंदुओं में बदलें
  • अभिव्यक्ति के लिए टेक्स्ट फ़ील्ड पर "सिग्मा" बटन पर क्लिक करें
  • "अभिव्यक्ति संवाद" विंडो में "फ़ंक्शन संपादक" टैब बदलें और वहां नीचे दिए गए कोड को पेस्ट करें
  • अब "एक्सप्रेशन डायलॉग" पर वापस फंक्शन कॉल को इस तरह पेस्ट करें: fillGrid (0.001,0.001,1) (पहले 2 मान यादृच्छिक आकार हैं)
  • परिवर्तन सहेजें और दृश्य अपडेट करें।
  • बहुत बढ़िया यादृच्छिक बिंदु हैं।

स्क्रिप्ट के मूल लेखक का धन्यवाद।

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.