बस ऑनलाइन स्क्रिप्ट मिली कि कुछ समायोजन के साथ 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)