Chỉ tìm thấy tập lệnh trực tuyến với một số điều chỉnh hoạt động với qgis 3.5.x
Tôi bị mất bài gốc nên không thể tin vào tác giả.
Những gì bạn làm là:
- tạo lớp điền thay đổi nó thành "trình tạo hình học"
- thay đổi "kiểu hình học" thành điểm
- đối với biểu thức, nhấp vào nút "sigma" ngay đến trường văn bản
- trong tab "hộp thoại biểu thức" thay đổi cửa sổ thành "Trình soạn thảo hàm" và dán mã bên dưới vào đó
- Bây giờ quay lại "hộp thoại biểu thức" dán lệnh gọi hàm như thế: fillGrid (0,001,0.001,1) (2 giá trị đầu tiên là kích thước ngẫu nhiên)
- Lưu các thay đổi và cập nhật xem.
- Điểm ngẫu nhiên tuyệt vời là ở đó.
Cảm ơn tác giả ban đầu của kịch bản.
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)