Tạo cộng sinh điểm đa giác điền ngẫu nhiên trong QGIS?


9

Sử dụng QGIS 2.18.3, tôi muốn áp dụng một mẫu điểm ngẫu nhiên cho hệ thống ký hiệu đa giác của mình. Trình quản lý kiểu mặc định có mẫu điểm được đặt cách đều đặn , được gọi là Nghĩa trang-25-50k (vui lòng xem hình ảnh bên dưới). Đây là một điểm khởi đầu tốt, nhưng rõ ràng không phải là ngẫu nhiên.

nhập mô tả hình ảnh ở đây

Ngoài ra, tôi đã xem xét các tùy chọn điền vào Mô hình điểm trong Thuộc tính lớp (bên dưới), nhưng không có gì xuất hiện sẽ tạo ra một mẫu ngẫu nhiên.

nhập mô tả hình ảnh ở đây

Điều tôi cần tạo lại là hệ thống ký hiệu điểm ngẫu nhiên ESRI Arcmap, được hiển thị ở đây:

nhập mô tả hình ảnh ở đây


một khả năng (cho phép kiểm soát nhiều hơn về tính ngẫu nhiên và cũng sử dụng các ký hiệu viết tắt như cây) là sử dụng inkscape để tạo một SVG (sử dụng các bản sao được lát gạch một cách ngẫu nhiên) và sử dụng điền vào SVG.
Steven Kay

Câu trả lời:


12

Bạn có thể thêm ký hiệu điểm ngẫu nhiên bằng các bước sau:

  1. Thêm lớp biểu tượng mới bằng nút '+':

nhập mô tả hình ảnh ở đây

  1. Thay đổi loại lớp Biểu tượng thành 'Điền vào mẫu điểm'
  2. Đánh dấu 'Điểm mẫu điền' vào cây bên trái
  3. Thay đổi khoảng cách ngang và dọc thành giá trị hợp lý. Trong ví dụ này, tôi đã chọn cùng một giá trị cho cả hai khoảng cách2.0
  4. Trong chuyển vị ngang và dịch chuyển dọc, sử dụng các chức năng sau:

    5.1 Đối với chuyển vị ngang:

    randf(3,5) 

    5.2 Đối với dịch chuyển dọc

    randf(2,4) 
  5. Nhân đôi lớp điểm và thay đổi khoảng cách ngang và dọc thành 6 và 3, tương ứng. Trong chuyển vị ngang và dịch chuyển dọc, sử dụng các chức năng sau:

    6.1 Đối với chuyển vị ngang:

    randf(0,1) 

    6.2 Đối với dịch chuyển dọc

    randf(1,2) 
  6. Bạn cần giảm kích thước ký hiệu xuống 2 Pixels

Bạn có thể thấy đầu ra trong hình ảnh sau đây:

nhập mô tả hình ảnh ở đây

Trong nhà soạn nhạc, huyền thoại sẽ như thế này:

nhập mô tả hình ảnh ở đây


2
Nó không hoàn toàn trùng lặp tính ngẫu nhiên của hệ thống ký hiệu Arc tích hợp nhưng đó là một giải pháp tốt. Để tăng tính ngẫu nhiên, hãy sử dụng hàm randf () trên khoảng cách ngang và dọc và cũng nhân đôi số lần điền.
Ed Rollason

1
@EdRollason Cảm ơn bình luận của bạn. Nó cũng là một ý tưởng tốt để thêm một vài lớp với hàm randf ().
ahmadhanb

1
@ahmadhanb Giải pháp thú vị, được đánh dấu!
mgri

2

một kỹ thuật khác liên quan đến việc sử dụng InkScape để tạo SVG và sử dụng lớp điền SVG trong QGIS.

Nó cho phép kiểm soát nhiều hơn về hệ thống ký hiệu (ví dụ: bạn có thể vẽ các cây rải rác ngẫu nhiên, không chỉ các điểm) và kiểm soát nhiều hơn về khoảng cách

  • Trong Inkscape, vẽ một vòng tròn / cây và chọn đối tượng
  • Chỉnh sửa> Bản sao> Bản sao lát gạch
  • Tạo (giả sử) 5 x 5 hoặc 10 x 10 nhân bản. Đó là một ý tưởng tốt để giữ kích thước của lưới nhỏ vì QGIS sẽ đấu tranh nếu bạn có quá nhiều biểu tượng.
  • Trong tab Shift, chọn một cái gì đó như thế này ... sử dụng các cài đặt mặc định là được, nhưng thay đổi cài đặt Ngẫu nhiên để thêm 'jitter'.

Thử nghiệm với các cài đặt, bạn luôn có thể nhấp vào Removenếu kết quả không tốt.

nhập mô tả hình ảnh ở đây

  • Nhấn vào đây Create.
  • Chọn tất cả các bản sao lát gạch bằng cách sử dụng CtrlA
  • CtrlShiftD để đưa lên các thuộc tính tài liệu
  • Chọn Thay đổi kích thước trang để vẽ hoặc chọn
  • Lưu dưới dạng SVG, nhưng đảm bảo bạn sử dụng định dạng SVG đơn giản
  • Bây giờ hãy mang vào QGIS dưới dạng điền biểu tượng SVG.

Đây là một trong đó tôi đã tạo ra một lưới ngẫu nhiên 5 x 5 bản sao của một trong những cây dựng sẵn của QGIS. Bằng cách thử nghiệm với khoảng cách và jitter, bạn có thể có được vẻ ngoài khác nhau. Bạn cũng có thể thử nghiệm với Dịch chuyển ngang của QGIS . Bằng cách đặt khoảng cách đó xuống một nửa khoảng cách theo chiều ngang, nó sẽ phá vỡ giao diện "lát gạch" (tạo ra một mô hình như những viên gạch trong tường)

nhập mô tả hình ảnh ở đây


0

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.