Cách tốt nhất để tạo bản đồ mật độ từ các điểm có trọng số trong QGIS là gì?


18

Tôi thực sự muốn lặp lại chức năng của công cụ Mật độ hạt nhân ArcGIS - làm thế nào tôi có thể làm điều đó?

Tôi muốn giới hạn câu trả lời cho phần mềm nguồn mở và miễn phí dễ cài đặt - tức là QGIS cài đặt dễ dàng với GRASS trên tất cả các nền tảng để QGIS + GRASS sẽ ổn, nhưng SAGA không (vì không may, vì nó có những gì có thể là công cụ lý tưởng).

Tôi đang cố gắng tạo ra các bản đồ mật độ của động vật hoang dã trên các khu vực được bảo vệ trong QGIS. Bản đồ mật độ trong ví dụ sau được tạo ra trong ArcGIS từ các quan sát điểm của động vật hoang dã, với số lượng thô của kích thước nhóm (một trường trong tệp vectơ) được sử dụng để cân mật độ của từng ô lưới trong công cụ Mật độ hạt nhân (SpatialAnalyst), với bán kính tìm kiếm được chọn và kích thước ô lưới:

Mật độ động vật hoang dã trong Vườn quốc gia Kafue với các ô lưới 5xạn và mật độ nhân bán kính 7,5 km

Trong một câu hỏi trước đây về mật độ , người ta đã đề xuất sử dụng công cụ GRASS v.kernel để bắt chước công cụ Mật độ hạt nhân ArcGIS, nhưng v.kernel không thực hiện cùng một công việc . Sau khi xem hướng dẫn và (thành công) tạo bản đồ mật độ, có vẻ như hàm v.kernel chỉ hoạt động với mật độ điểm và không có cơ hội để đưa ra một biến cho mỗi điểm (chẳng hạn như số liệu thô) để cân nhắc từng điểm .

CẬP NHẬT

Dường như có nhiều *.surf.*công cụ khác nhau trong GRASS có thể giúp tạo bề mặt mật độ - và những công cụ này chấp nhận một cột trọng số hoặc giá trị z hoặc được thực hiện trên các trình quét. @underdark đề xuất v.surf.rst - và 'zcolumn' sẽ là biến trọng số (đếm) của tôi - nhưng tôi không thể tìm ra cách yêu cầu công cụ tạo kích thước lưới nhất định hoặc sử dụng bán kính nhất định.

Gợi ý về cách sử dụng v.surf.rst hoặc phương pháp nào khác?


Dữ liệu mẫu

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0

Bạn có thể mô tả dữ liệu đầu vào của bạn nhiều hơn? Có lẽ v.surf.rst sẽ phù hợp hơn v.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.html . Bạn có một giá trị đếm trên mỗi ô lưới được hiển thị ở trên không?
underdark

@underdark - Đã thêm một số dữ liệu mẫu. Đó là dữ liệu điểm với số lượng (số lượng voi nhìn thấy) và có thể có nhiều hơn một quan sát trên mỗi ô lưới. Thông thường, trong 'số' của ArcGIS sẽ trở thành trường 'dân số' của công cụ mật độ nhân.
Simbamangu

Tôi càng nghĩ về nó, tôi càng ít tin rằng v.kernel là một lựa chọn tốt cho trường hợp sử dụng của bạn. Bạn đã kiểm tra tài liệu? Có thể đầu tiên đặt câu hỏi về phương pháp nào là phù hợp trong trường hợp này.
underdark

Câu hỏi chính của tôi là làm thế nào để lặp lại chức năng của mật độ hạt nhân từ Arcview, đây là một phương pháp đã biết. Bạn nói đúng, v.kernel gần như chắc chắn không phải là công cụ phù hợp để làm điều đó!
Simbamangu

@underdark, cảm ơn - Tôi đã mở rộng câu hỏi phần nào có thể giúp ích; v.surf.rst có vẻ phù hợp nhưng có thể sử dụng một số hướng dẫn về việc sử dụng nó.
Simbamangu

Câu trả lời:


8

Theo trang hướng dẫn sử dụng, lệnh GRASS r.resamp.filter sẽ thực hiện cho các trình quét biểu diễn dữ liệu điểm chính xác những gì ArcGIS sẽ làm cho các lớp điểm : sử dụng filter=boxtùy chọn cho raster "đơn giản" và sử dụng filter=gausstùy chọn cho hạt nhân ArcGIS khác. Sử dụng -ncờ để tránh truyền null.


Lưu ý rằng ước tính mật độ hạt nhân (còn gọi là "bản đồ nhiệt") không phải là nội suy của dữ liệu. Giá trị của KDE tại một vị trí x ước tính lượng giá trị " Z " trên mỗi đơn vị diện tích gần x . (Bán kính hoặc "băng thông" định lượng "gần" nghĩa là gì.) Các giá trị của Z không cần phải được xác định tại mọi vị trí có thể trên bản đồ. Ví dụ, Z có thể đại diện cho sự hiện diện của một thứ như một người, trong trường hợp đó, KDE cho mật độ dân số . Các giá trị của Z cũng không cần thay đổi liên tục trên bản đồ. Đối với phép nội suy, người ta cho rằng Zđược xác định tại tất cả các vị trí và dữ liệu là các quan sát về các giá trị của Z tại các điểm được chỉ định. Bộ nội suy cố gắng dự đoán các giá trị không quan sát được của Z tại tất cả các điểm khác. Điều này sẽ có ý nghĩa khi Z , giả sử, nhiệt độ hoặc áp suất, nhưng thường là vô nghĩa khi Z ghi lại sự hiện diện của một cái gì đó hoặc khi dữ liệu là một điều tra dân số hoàn chỉnh. (Trong trường hợp sau, hãy suy nghĩ xem bản đồ mật độ đường cho khu vực có thể có ý nghĩa gì và làm thế nào người ta có thể hiểu ý nghĩa của việc "nội suy" trên các khu vực không phải là đường.)


Tôi dường như không có r.resamp.filter trong hộp công cụ GRASS của mình (trên OS X, GRASS 6.4). Tuy nhiên - cho đến khi bạn đề cập đến nó, tôi không nhận ra rằng 'bản đồ nhiệt' cũng giống như KD; Tôi cho rằng họ đang nội suy toàn bộ bề mặt. Công cụ Raster | Heatmap trong QGIS có làm KD không? "Tỷ lệ phân rã" là gì?
Simbamangu

Tôi tin rằng thuật ngữ "bản đồ nhiệt" đã được đồng lựa chọn trong GIS từ nghĩa gốc của nó thành một khái niệm chung và mơ hồ cho hầu hết mọi bản đồ giống như raster. Tôi nghi ngờ rằng bất kỳ GIS nào cũng cung cấp chức năng phù hợp với ý nghĩa ban đầu.
whuber

Sau khi điều tra, công cụ bản đồ nhiệt trong QGIS thực hiện một cái gì đó tương tự như KD trong Arc, nếu bạn đặt tỷ lệ phân rã thành 0 (giảm mật độ thành 0 ở các cạnh của bán kính). Dường như có một số khác biệt: giá trị ô được tính cao hơn 25 lần (bán kính 5km / ô 2,5km), giống như cách chức năng được áp dụng cho các ô - Arc dường như sử dụng bán kính xung quanh điểm thực tế, trong khi QGIS chọn ô chồng lấp và chỉnh sửa từ thời điểm đó.
Simbamangu

2
"Heatmap" trong cách sử dụng phổ biến dường như có nghĩa là rất nhiều thứ - nhìn xung quanh, tôi thấy nó được áp dụng cho các bề mặt nội suy, mật độ hạt nhân và màu đơn giản của các pixel không được làm mịn quá. Tài liệu thú vị về cách sử dụng / lịch sử ban đầu - và có vẻ như chúng ta có lẽ nên sử dụng các thuật ngữ chính xác hơn trong việc dán nhãn các công cụ QGIS.
Simbamangu

3
R.resamp.filter @Simbamangu là mới trong GRASS 7 , nhưng có một ảnh chụp hàng tháng cho OS X . Ngoài ra, công cụ Heatmap dường như không đưa ra lựa chọn cho thuật toán phân phối mật độ, vì vậy nó không chính xác tương đương với Mật độ hạt nhân hoặc r.resamp.filter, tôi nghĩ vậy.
Torsti

3

Mô-đun 'Ước tính mật độ hạt nhân' của SAGA là những gì bạn đang tìm kiếm.

Cài đặt giao diện Mô-đun SAGA trong QGIS (trong menu: Plugins -> Tìm nạp plugin Python ..) và sử dụng mô-đun. Chúc may mắn!


Tôi rất thích sử dụng SAGA, nhưng đang làm việc trong OSX 10.7 và vẫn chưa xây dựng thành công (không có nhị phân cho OSX); Gần đây tôi đã sử dụng nhiều giờ để thử nhiều hơn một phương pháp biên dịch nhưng các bản dựng luôn thất bại.
Simbamangu

Sau đó, bạn phải đặt câu hỏi về biên dịch SAGA trên OSX 10.7. Như tôi thấy SAGA là sự thay thế hợp lý duy nhất cho công cụ ArcGIS KD.
Vladimir

3

Một phương pháp thực sự đơn giản với GRASS GIS gần với Mật độ điểm trong ArcMap hơn Mật độ hạt nhân:

  1. Nhập các điểm vào bản đồ raster bằng r.in.xyzcách sử dụng phương thức = sum ở độ phân giải raster được chỉ định (được đặt bằng g.region).

  2. Sử dụng r.neighborsđể làm mịn bản đồ với phương thức = trung bình (là mặc định) và sử dụng kích thước tùy chọn để đặt bán kính tìm kiếm.

(Hiện tại tôi không có quyền truy cập GRASS vì vậy tôi đã không thực sự thử điều này!)


v.in.xyzv.neighborscũng có thể làm việc Hướng dẫn không chỉ định cách bạn đặt thuộc tính nào được sử dụng v.neighborsmặc dù.
Torsti

2

Khi bạn yêu cầu thêm hướng dẫn về v.surf.rst, đây là đầu vào của tôi

Đầu tiên, về kích thước lưới - bạn có thể sử dụng Plugin -> GRASS -> Chỉnh sửa vùng GRASS hiện tại và đặt độ phân giải đầu ra. Đầu ra của bạn từ v.surf.rst sẽ có độ phân giải đó.

Đối với bán kính, 'độ căng' dường như là tham số. Tôi không phải là chuyên gia về thuật toán này nhưng đọc từ hướng dẫn, đây có vẻ là bit có liên quan

"... Độ căng cao" làm tăng khoảng cách giữa các điểm "và giảm phạm vi tác động của từng điểm, độ căng thấp" giảm khoảng cách "và các điểm ảnh hưởng lẫn nhau trên phạm vi dài hơn) .."

Vì vậy, bạn có thể sử dụng tham số độ căng gần như bạn sẽ sử dụng tham số bán kính.

Từ dữ liệu mẫu của bạn, kết quả của v.surf.rst trông như dưới đây và có vẻ hợp lý khi nó sử dụng số lượng làm trọng số cho phép nội suy

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


1
Cảm ơn vì điều này - dễ hiểu hơn nhiều so với trang trợ giúp. Như đã lưu ý ở trên bởi @whuber, nội suy không phải là phương pháp phù hợp cho loại dữ liệu mẫu điểm này.
Simbamangu

2

Trong khi tôi chưa thử nghiệm nó, trong kho lưu trữ của Cộng tác viên QGIS có một plugin có tên là 'Ước tính phạm vi nhà với R'. Điều này bao gồm các tính toán Kernel (mật độ?). Tôi nghĩ, nếu nó hoạt động, rằng đây sẽ là phương pháp tốt nhất. R sẽ làm phương pháp thống kê thực tế để tính mật độ hạt nhân.

Nếu bạn đã cài đặt R, bạn có thể chỉ cần cài đặt plugin và sử dụng nó.


1

Nếu bạn chấp nhận thực hiện một chút lập trình java ngoài qgis, bạn có thể chỉ cần sử dụng thư viện trình tạo bản đồ mật độ này .

Sử dụng hàm tạo HeatMapBuilder(int w, int h, int[][] pts, int[] weights), có thể đưa ra trọng số cho từng điểm khi bạn cần. Hình ảnh đầu ra có thể được lấy bằng getImage()phương thức và lưu trên đĩa của bạn bằng a ImageIO.write("mymap.png").

Dưới đây là một ví dụ về đầu ra:

bản đồ nhiệt với thư viện java opencarto

Có thể thay đổi cường độ làm mịn và bảng màu.

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.