R - Tạo hộp giới hạn, chuyển đổi sang lớp Đa giác và Lô đất


11

Tôi có NE lat lngSW lat lng. Mục tiêu của tôi rất đơn giản, tôi đang sử dụng RStudio và tôi muốn tạo một hộp giới hạn từ hai lats và long ở trên và sau đó tạo Polygon và tôi muốn thêm các điểm ngẫu nhiên vào đa giác vuông. Tôi có NELat / Lng và SW-Lat / Lng trong tệp csv mà tôi có thể nhập vào data.frame.

Tôi chỉ cần một chút hướng dẫn để bắt đầu, Tôi rất mới với ngôn ngữ R, nó thực sự khác với những gì tôi đã quen.

Cho đến nay tôi có điều này:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

Tôi chỉ thấy một số ví dụ ở nơi khác nhưng tôi không thể vẽ một đa giác gồm 4 góc.


Bạn chỉ có một tọa độ trùng lặp duy nhất trong r1, điều đó có nghĩa là 'r1 = rbind (coords, coordsmax) `??
mdsumner

Vâng, đã sửa nó. Nó vẫn không hoạt động mặc dù
user134611

Làm việc thông qua các vấn đề một cách cẩn thận một lần là một cách tốt để có được một giải pháp. Tôi coi đó là một lỗi mà Polygon () không lỗi khi chỉ được cung cấp hai hoặc một tọa độ, tôi đã lưu ý điều này trong các vấn đề sp. Đối với bạn q, thư viện (raster); SPs1 <- as (mức (r1), "SpatialPolygons"); cốt truyện (SPs1)
mdsumner

Tôi xin lỗi vì tôi phải sử dụng chức năng trả lời của stackexchange nhưng danh tiếng của tôi không đủ cao để bình luận. @ dof1985 bạn sử dụng (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) làm tọa độ để tạo đa giác. tôi đã cố gắng như vậy, nhưng không thành công. sau đó tôi nhìn kỹ hơn vào ví dụ của bạn và xem xét, rằng bạn sử dụng thay vì (x_min, y_min), (x_max, y_min), ... theo sau (x_min, y_min), (x_min, y_max), ... đây có thể là lý do lỗi của tôi? vui lòng sửa ví dụ của bạn :)
ExploreR

Câu trả lời:


7

Một vài thay đổi đã được thực hiện đối với mã của bạn:

Đầu tiên, lưu ý rằng tôi đã bỏ việc tạo điểm. Bạn có thể tạo thành một đa giác mà không cần sử dụng SpatialPoints. Mặc dù trong trường hợp có nhiều điểm có liên quan, tốt hơn là tạo đa giác từ các điểm.

Thứ hai, tôi đã viết 5 cặp tọa độ trong ma trận bên dưới. Cặp đôi tọa độ đứng cho một góc của hộp giới hạn của bạn và lần thứ năm lặp lại điểm đầu tiên. Cụ thể là ma trận bao gồm: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Cuối cùng, tôi đã sử dụng SpatialPolygonsvới espg:4326để tạo thành một đối tượng âm mưu-thể trong một bối cảnh địa lý.

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

Đây là những gì xảy ra nếu tôi vẽ mã của bạn:

Một đa giác trông giống như một đường

và đây là sau khi sửa đổi mã được trình bày ở đây:

Hộp liên kết


đó là nó! Bạn có thể bình luận một chút về proj4String? bạn đang xác định đặc điểm của một lat và lâu qua nó?
dùng134611

Nhấn ?is.projectedtrong R-console để xem proj4stringtrợ giúp. Có, nó được sử dụng để định nghĩa lớp CRS cho một đối tượng không gian
dof1985

21

Bạn có thể lồng extenthàm, từ thư viện raster, asđể tạo đối tượng SpatialPolygons.

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)

2
Đây có vẻ là một cách tốt hơn so với câu trả lời của tôi.
dof1985
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.