Rgeos giảm giá trị liên quan khi giao nhau đa giác


11

Tôi đang cố gắng giao cắt hai SpatialPolygonsDataFrames và lấy kết quả là SpatialPolygonsDataFrame. Thật không may, bằng cách sử dụng gIntersectionhàm từ rgeos(hoạt động nhanh chóng ấn tượng để giao với các đa giác), tôi dường như không thể truy xuất các tệp dữ liệu liên quan. Hãy xem xét ví dụ sau:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

Tôi có thể viết một hàm bao bọc xử lý việc chuyển data.frames, nhưng sẽ rất khó để kiểm tra đúng và trước khi tôi làm, tôi hy vọng ai đó có thể xác nhận rằng không có cách nào tốt hơn hoặc hướng tôi đến một chức năng khác (hoặc tùy chọn cho gIntersection) sẽ cho phép tôi giữ lại liên kết data.frames.

Cập nhật

Về sự phản ánh hơn nữa, đây có thể là hành vi rất có chủ ý bởi gIntersection. Rốt cuộc, trong số hai SPDF, bạn có truyền dữ liệu nào không? Vì vậy, tôi có thể phải viết một trình bao bọc hợp nhất cả hai.


1
Làm thế nào bạn đang tải polgyons của bạn - readShape * hoặc readOGR? Tôi nhận được hành vi kỳ lạ với gIntersection tùy thuộc vào thư viện nào tôi đã sử dụng để tải SPDF, mà tôi chưa nhận được ở dưới cùng.
Simbamangu

@Simbamangu Thú vị. Tôi đang sử dụng readShapePoly và sau đó hợp nhất trong một data.frame ....
Ari B. Friedman

gIntersection NÊN cung cấp dữ liệu.frames được hợp nhất cho các khu vực chồng lấp - nếu tôi chạy Vector | Geoprocessing | Intersect trong QGIS, đầu ra là một tập hợp các thuộc tính được hợp nhất cho chồng lấp và không QGIS sử dụng cùng thư viện GEOS cho các hoạt động không gian như điều này?
Simbamangu

Vâng, nếu nó nên thì tôi đã bối rối. Tôi đã viết lại mã của mình để hợp nhất data.frames bằng tay và đưa chúng trở lại, vì vậy bây giờ tôi sẽ không dành nhiều thời gian hơn cho việc này. Nhưng gợi ý rằng chức năng đọc trong các vấn đề shapefile là hữu ích.
Ari B. Friedman

1
Đây rõ ràng không phải là một câu trả lời, nhưng tôi không có đủ điểm để bình luận ... Ari, tôi đã tự hỏi liệu bạn có chia sẻ đoạn mã của mình để trích xuất các biến sau các hàm lớp phủ của rgeos không. Tôi gặp khó khăn trong việc quấn đầu xung quanh một cách tốt để giữ lại id đa giác ban đầu từ các hoạt động rgeos khác nhau như gUnion ...
jed.a.long

Câu trả lời:


2

Đối với một số dự án tôi có cùng nhu cầu. Nhiều hơn là giữ nguyên data.frame, chúng tôi phải đặt thêm mã để quản lý loại hình học đầu ra và tiến hành làm sạch (ví dụ: bộ sưu tập hình học sạch), để có một số công cụ địa lý giao nhau hoàn chỉnh. Trong trường hợp bạn vẫn cần thực hiện một tác vụ như vậy trong R, bạn có thể thử gói RFigisGeo :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

Cả câu trả lời của bạn và @ berndv trông giống như chúng sẽ giải quyết vấn đề của tôi. Cảm ơn! Đánh dấu cái này kể từ khi nó đến đầu tiên.
Ari B. Friedman

10

Hành vi của gIntersection là không truyền bất kỳ dữ liệu giao nhau nào theo thiết kế:

Vì không có sự trùng khớp chung giữa các đối tượng không gian giao nhau, nên mọi thao tác tùy ý trên các thuộc tính đều yêu cầu các giả định về ý định người dùng không xác định. Đây là lý do tại sao không có khe dữ liệu nào được chuyển qua ...

... Việc thiết kế gIntesection () là không có chủ ý, bởi vì chỉ người dùng mới có thể biết phải làm gì với các thuộc tính của các thực thể có hình học thay đổi. Những người dùng khác nhau có thể đưa ra các giả định khác nhau, nhưng không có giải pháp chung nào ngoài việc chuyển qua ID của các hình học giao nhau, như được thực hiện trong cơ chế row.names ().

Thật ngạc nhiên, gói raster có chức năng giao nhau , chỉ đơn giản là giao nhau và bàn giao dữ liệu.

Gói raster có một vài chức năng mở rộng rgeos bằng cách cũng cố gắng xử lý dữ liệu thuộc tính. Trong trường hợp này, xem raster :: giao nhau Và danh sách các hàm ở đây :? "Gói raster" (phần XIV)

Thông tin đầy đủ tôi có về điều này: http://r-sig-geo.2731867.n2.nabble.com/Intends-usage-of-gIntersection-td7587120.html


0

Đối với những người (như tôi) mà những câu trả lời trên không hoạt động, liên kết ở đây giải thích rằng bạn có thể thực hiện điều chính xác này với giao điểm của raster.

Làm cách nào để giữ lại tất cả dữ liệu thuộc tính khi cắt hai đa giác trong R?

Tôi đã sử dụng điều này để cắt một SpatialPointsDataFrame với một shapefile SpatialPolygons; nó tạo ra một phiên bản cắt / cắt của SpatialPointsDataFrame, duy trì dữ liệu gốc.

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.