Chuyển đổi một đối tượng đa giác không gian sang khung dữ liệu bằng R


18

Mục tiêu của tôi là sửa đổi một shapefile hiện có bằng cách hợp nhất một số đa giác nhất định.

Sau khi nhập shapefile và sử dụng lệnh UnionSpatialPolygons, tôi nhận được phác thảo đa giác mà tôi muốn.

Tuy nhiên, đây hiện là đối tượng SpatialPolygons chứ không phải SpatialPolygonsDataFrame, vì vậy tôi không thể xuất nó sang shapefile bằng writeOGR.

Làm thế nào tôi có thể khắc phục vấn đề này?


3
Nếu câu trả lời dưới đây là hữu ích, bạn nên chọn nó là câu trả lời đúng bằng cách nhấp vào dấu tick bên trái của văn bản trả lời.
SlowLearner

Câu trả lời:


20

Như tên đã nói, SpatialPolygonsDataFrame về cơ bản chỉ là một đối tượng SpatialPolygons với dữ liệu được đính kèm (bảng thuộc tính). Dữ liệu phải có ít nhất nhiều hàng như có các tính năng

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

----BIÊN TẬP----

Nếu bạn muốn chuyển đổi SpatialPolygonsDataFramelưng của bạn thành một SpatialPolygonsđối tượng, bạn chỉ cần giải quyết cấu trúc đối tượng trong R

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

Chắc chắn, @Curlew là đúng. Hãy chắc chắn để xác định IDschính xác đối số khi thực hiện UnionSpatialPolygons. Nếu không, bạn có thể gặp sự cố khi chỉ định datađối số khi chuyển đổi trở lại SpatialPolygonsDataFrame.
fdetsch

1
Chắc chắn, khá dễ dàng. Tôi đã chỉnh sửa câu trả lời ban đầu cho điều đó
Curlew

1
Gần đây tôi mới bắt đầu làm việc với shapefiles và vẫn cố gắng làm quen với điều này. Chính xác những gì nên được thay thế cho youData trong data=as.data.frame("yourData")? Sau khi hòa tan các đa giác bên trong bằng cách sử dụng unionSpatialPolygons(...), tôi muốn viết kết quả dưới dạng shapefile mới
lightonphiri

Bạn cần phải có data.frame với cùng số lượng hàng như bạn có các tính năng trong đối tượng SpatialPolygons của bạn. Tốt hơn nên hỏi một câu hỏi mới liên quan đến unionvấn đề của bạn ..
Curlew

1
@Curlew Cảm ơn bạn, vừa đăng câu hỏi mới tại đây gis.stackexchange.com/q/121405/40108
lightonphiri

9

Các vấn đề:

1: kết quả của UnionSpatialPolygons là một đa giác không gian

2: chuyển đổi kết quả trở lại thành khung dữ liệu đa giác không gian là một nỗi đau thực sự

-a. bạn cần một khung dữ liệu rất chính xác để gắn vào đa giác không gian

-b. dữ liệu bạn đã sử dụng cho UnionSpatialPolygons có nhiều hàng hơn đầu ra và không được định dạng theo cách cần thiết.

Giải pháp (xấu xí) của tôi:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

Lỗi trong if (length (Sr @ polygons)! = Nrow (data)) stop (paste ("Object length không khớp: \ n" ,: đối số có độ dài bằng 0 Ngoài ra: Thông báo cảnh báo: 1: sử dụng * áp dụng và khe trực tiếp
Mox
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.