Tạo các điểm cách đều nhau bên trong đa giác dựa trên giá trị thuộc tính bằng cách sử dụng QGIS?


11

Tôi có một lớp đa giác với một giá trị thuộc tính được đính kèm đại diện cho số lượng cá nhân bên trong một đa giác. Tôi đang sử dụng QGIS 3.0.

Tôi cần hình dung các số đếm dưới dạng một lưới các điểm bên trong một đa giác (tức là 1 điểm = 100 con ếch, được tô màu bởi specie). Các điểm không nhất thiết phải chiếm toàn bộ đa giác, và tốt nhất là được vẽ xung quanh một tâm với khoảng cách được xác định trước (nghĩa là 300 m), để chúng có thể biểu thị một lưới gọn gàng ở độ phân giải cụ thể.

Cách giải quyết hiện tại tôi thấy là sử dụng "Điểm thông thường", với tham số đếm, để tạo lưới trong phạm vi được vẽ trên bản đồ, sau đó xóa các điểm bổ sung được tạo bởi thuật toán (vòng thuật toán vào lưới và bạn có thể nhận được 20 điểm thay vì 17 điểm đầu vào). Điều này tạo ra kết quả mong muốn, nhưng yêu cầu vẽ phạm vi diện tích cho các điểm thông thường cho mỗi đa giác, cũng như nhập thuộc tính thủ công và dọn sạch các điểm được tạo. Hơn nữa, vì tôi đang chạy "Điểm thông thường" với số lượng được chỉ định, thay vì khoảng cách, mỗi đa giác có các điểm cách nhau khác nhau.

Tóm lại: Điểm thông thường (xác định # điểm, phạm vi được vẽ) cho mỗi đa giác (lô)> Xóa điểm bổ sung> gán giá trị thuộc tính cho # điểm

Thay thế (tránh khoảng cách không đều, nhưng đòi hỏi nhiều thao tác hơn):

Các điểm thông thường (khoảng cách xác định tức là 300m) trong phạm vi của toàn bộ lớp> Clip đến phạm vi đa giác> Xóa các điểm bổ sung trong mỗi đa giác cho đến khi bạn nhận được # điểm mong muốn> gán giá trị thuộc tính cho các điểm.

Vấn đề chính với cách giải quyết của tôi là xử lý đa giác, khiến việc cập nhật dữ liệu và làm việc với số lượng đa giác lớn hơn.

Câu hỏi tương tự đã được hỏi khi Tạo khoảng cách đều đặn, được xác định # điểm trong đa giác trong QGIS , nhưng chi tiết cụ thể thì khác.

Ảnh chụp màn hình của kết quả mong muốn:

Bảng thuộc tínhL:


1
Có phải hình ảnh trong câu hỏi của bạn đại diện cho những gì bạn mong đợi như là kết quả? Số điểm màu đến từ đâu? Bạn có thể thêm bảng thuộc tính của lớp? Đặc biệt là các thuộc tính của đa giác bao gồm Edmonton và Sherwood Park, để hiểu rõ hơn về màu sắc và số lượng.
Kadir ahbaz

1. Đây chỉ là dữ liệu bị che giấu không liên quan nhiều đến đa giác thực tế, nhưng vâng tôi mong đợi loại kết quả đó, nhưng với các chấm xung quanh trung tâm của đa giác. 2. Đếm đến từ các cột của bảng thuộc tính, vì có ba cột / loại điểm tôi đã tổng hợp chúng thành một cột để trước tiên lấy đúng số điểm trên mỗi đa giác và sau đó gán thuộc tính / màu bằng biểu thức. chỉnh sửa: thêm bảng excel vào câu hỏi, không đại diện cho các giá trị, nhưng đại diện cho cấu trúc dữ liệu của tôi.
Ruslan

Câu trả lời:


5

QGIS 3 đi kèm với một phương thức dịch chuyển mới trong trình kết xuất cụm được gọi là lưới. Có vẻ như đây là khá nhiều những gì bạn cần. Chỉ cần tạo số lượng điểm mong muốn tại tâm của đa giác của bạn.

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

Tôi không biết một phương pháp để tạo các điểm chỉ bằng một công cụ gui, nhưng một kịch bản python tương đối đơn giản sẽ làm điều đó.

with edit(point_layer):
    for polygon_feature in polygon_layer.getFeatures():
        point_feature = QgsFeature(point_layer.fields())
        point_feature.setGeometry(polygon_feature.geometry().centroid())

        point_feature['type'] = 'Frog'
        for i in range(polygon_feature['Frogs']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Cat'
        for i in range(polygon_feature['Cats']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Diplodoc'
        for i in range(polygon_feature['Diplodocs']):
            point_layer.addFeature(point_feature)

Nếu bạn muốn phát điên, hãy gói nó trong một thuật toán xử lý tùy chỉnh.


Cảm ơn Matthias, điều đó dường như thậm chí còn tốt hơn các giải pháp khác. Bạn có thể đề xuất một cách nhanh chóng tạo # điểm mong muốn dựa trên bảng thuộc tính để đạt được điều này không?
Ruslan

Tôi không biết về một phương pháp dễ dàng ngoài việc viết một tập lệnh python nhỏ. Mã này hoàn toàn chưa được kiểm tra, vì vậy có thể có một số lỗi chính tả;)
Matthias Kuhn

Cảm ơn một lần nữa. Tôi có thể sẽ phải thực hiện một hình ảnh tương tự cho nhiều lớp / phạm vi, v.v. vì vậy tôi sẽ cố gắng xây dựng ít nhất một mô hình xử lý cho việc này.
Ruslan

5

Có thể là một cách khác truyền cảm hứng bởi câu trả lời của Sarath SRK:

  1. Centroid của đa giác
  2. Bộ đệm sử dụng biểu thức với hình vuông và để điều chỉnh theo tỷ lệ của bạn: tức là (1000 * (sqrt ("Ếch" + "Mèo" + "Thẻ") / 2)) + 1 và Phân đoạn = 1, Kết thúc kiểu mũ = Hình vuông
  3. Điểm lưới mới với khoảng cách kết hợp với tỷ lệ của bộ đệm.
  4. Xóa điểm không giao nhau với lớp đệm (chọn theo vị trí)
  5. tham gia thuộc tính theo vị trí (Thuộc tính của bộ đệm hoặc đa giác ban đầu)

Tuy nhiên, bạn sẽ có một cái gì đó như thế này nhập mô tả hình ảnh ở đây

  1. Sử dụng một trình tạo mô hình đồ họa để tạo một trường mới với lệnh "@row_number" nhập mô tả hình ảnh ở đây

  2. Thực hiện mô hình với một lần lặp trên lớp đệm nhập mô tả hình ảnh ở đây

  3. Hợp nhất tất cả các lớp mới

  4. Xóa tất cả các điểm với trường ID_pt lớn hơn tổng trường của bạn ("Ếch" + "Mèo" + "Danh")

  5. Phân loại với các quy tắc (tức là
    • "ID_pt" <= "Ếch"
    • "ID_pt"> "Ếch" và "ID_pt" <= ("Mèo" + "Ếch")
    • "ID_pt"> ("Mèo" + "Ếch") và "ID_pt" <= ("Mèo" + "Ếch" + "" ") nhập mô tả hình ảnh ở đây

Cảm ơn vì điều đó! Tôi sẽ không có thời gian để thử điều này ngày hôm nay, nhưng có vẻ như là một giải pháp khả thi khi xem xét bạn có đầu ra mong muốn.
Ruslan

1

Bạn có thể sử dụng máy phát hình học cho việc này.

  1. Thêm 3 lớp con trong biểu tượng, một cho mỗi màu / thuộc tính.
  2. Tạo một biểu thức tạo ra một đa tuyến cho mỗi lớp con.
  3. Bây giờ là phần cứng, tạo các phần vuông cho đa giác dựa trên thuộc tính. Tôi đoán điều này sẽ yêu cầu một chức năng biểu hiện python tùy chỉnh.
  4. Tùy chọn, sử dụng các biến kết xuất cho tỷ lệ bản đồ để xác định tỷ lệ của đa giác và khoảng cách.

Xin lỗi, hiện tại tôi quá bận để có câu trả lời hoàn chỉnh, nhưng sẽ là một thử thách rất thú vị để thử nấu món gì đó từ công thức này ở đây. Có lẽ ai đó có được xung quanh để cung cấp cho chúng tôi một giải pháp tốt đẹp dựa trên điều này.
Matthias Kuhn

1

Một giải pháp có thể là tạo một lớp điểm với các điểm tại tâm của mỗi đa giác. Vì vậy, ví dụ như bạn đã nhận được ở trung tâm của điểm siêu chồng của Edmonton 25: 5 với thuộc tính ếch, 20 điểm với mèo và 0 với ngoại giao.

Sau đó, sử dụng trình kết xuất dịch chuyển điểm với phương thức Vị trí được đặt thành lưới, bạn sẽ có thể có được hiệu ứng.

Khó khăn là tạo lớp điểm ....


0

Một cách khác rất đơn giản có thể là sử dụng biểu đồ Pie có sẵn trong các thuộc tính của lớp? Các thuộc tính và kích thước có thể được quyết định bởi một biểu thức.

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


2
Tôi biết về các cách khác để lập bản đồ dữ liệu. Điểm của câu hỏi là làm cho công việc trực quan hóa đó có thể. Các biểu đồ hình tròn không thực sự hoạt động bởi vì khi bạn nhìn vào lưới, bạn sẽ hiểu rất rõ về số lượng cá nhân. Cố gắng ước tính số lượng chính xác của từng đa giác từ biểu đồ hình tròn là gần như không thể.
Ruslan

0

Bạn có thể tạo các điểm trên đường xoắn ốc bắt đầu từ tâm đa giác. Bài đăng Stack Overflow sau đây có mã python để tạo các điểm tương đương nhưng tôi không thể kiểm tra nó vào lúc này vì thiếu thời gian rảnh.


Có vẻ đủ gần, nhưng như đã đề cập trong câu hỏi Tôi không đủ thành thạo để viết mã này / thay đổi mã được đề xuất ở đó.
Ruslan

Hy vọng ai đó có đủ kiến ​​thức và thời gian sẽ hòa nhập.
Techie_Gus

0

Trong trường hợp của bạn,

  1. Tạo các điểm cách đều đặn bằng khoảng cách cho trước cho toàn bộ AOI
  2. Tạo các điểm trung tâm cho tất cả các đa giác (đầu vào).
  3. Tạo bộ đệm cho các điểm trung tâm đó bằng cách sử dụng bộ đệm khoảng cách cố định với giá trị phân đoạn '1'. Nó sẽ tạo bộ đệm vuông thay vì hình tròn (Sử dụng công cụ xoay trong Qgis nếu bạn muốn xoay đa giác bộ đệm).
  4. Tạo một lựa chọn các điểm nằm trong đa giác bộ đệm bằng vectơ -> Công cụ nghiên cứu -> Chọn theo vị trí (các điểm trong quy tắc đa giác).
  5. Chuyển đổi lựa chọn và xóa các điểm bên ngoài đa giác bộ đệm. Vì vậy, bây giờ bạn có các điểm cách đều đặn xung quanh centroid của đa giác.
  6. Cung cấp thuộc tính Đa số cho toàn bộ điểm và phần còn lại của các điểm cần được phân loại thủ công. Sử dụng công cụ QuickMultiAttributionEdit để cập nhật các thuộc tính dễ dàng.

Cảm ơn, điều này dường như cắt giảm các bước xử lý, nhưng điều này không giải quyết được vấn đề cần phải chọn thủ công (bộ đệm trong đa giác sẽ có kích thước giống hệt nhau = cùng số điểm trên mỗi đa giác), xóa và tạo điểm thuộc tính cho từng điểm đa giác, đó là vấn đề chính với điều này và quy trình làm việc của tôi.
Ruslan
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.