Sự cố với sơ đồ trong R


8

Trong khi vẽ gadmsơ đồ của Nga R, tôi có một vấn đề ở kinh tuyến 180 độ, nơi một phần của khu vực Nga được vẽ riêng. Bạn có thể nhìn thấy nó trên cốt truyện bằng cách sử dụng đoạn mã sau (đó là cạnh trái và một phần nằm bên phải). Bất cứ ai có thể đề nghị làm thế nào để tránh vấn đề này?

Đây là một phiên bản ngắn của mã cho câu hỏi của tôi:

require(sp)

rus<-url("http://www.gadm.org/data/rda/RUS_adm1.RData")
print(load(rus))
gadm$regions = as.factor(1:88)
spplot(gadm,"regions")

Bản đồ

Câu trả lời:


5

Chiếu dữ liệu. Ví dụ này sử dụng phép chiếu lập thể cực ở trung tâm gần giữa nước Nga (kinh độ 105 độ đông):

require(rgdal)
proj4.str <- CRS("+init=epsg:3413 +lon_0=105")
gadm.prj <- spTransform(gadm, proj4.str)
spplot(gadm.prj, "regions")

Bản đồ

Vùng vấn đề nằm ở phía trên bên phải. Bạn có thể thấy rằng khu vực này đã được chia thành hai mảnh và, nhờ vào phép chiếu, được ghép lại thành một khu vực tiếp giáp: ranh giới chung có thể nhìn thấy được. Đó là cách nó có trong dữ liệu: nó được thể hiện rõ ràng dưới dạng hai tính năng riêng biệt. Để loại bỏ phần tách có thể nhìn thấy, bạn sẽ cần hợp nhất hai phần (một thao tác dễ dàng thực hiện hơn với GIS so với R).


Chỉ một câu hỏi ngu ngốc nữa, làm ơn, nếu bạn không phiền, tôi tự hỏi làm thế nào nó có thể được thực hiện để vẽ chỉ một đa giác từ bản đồ, chẳng hạn như Moscow chỉ
Ruvin Rafailov

2
Trang trợ giúp spđề cập rằng lớp này hỗ trợ "các phương thức bao gồm in / hiển thị, cốt truyện, tập hợp con, [, [[, \ $, tên, mờ, tóm tắt, ..." Trang trợ giúp để subsethiển thị cú pháp của nó. Bí quyết là biết sử dụng lĩnh vực nào để tìm kiếm Moscow! Tôi đã tìm thấy nó bằng cách xem xét các giá trị độc đáo của tất cả các lĩnh vực, cuối cùng cũng giảm bớt levels(gadm$NAME_1). Điều này dẫn đến spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), mà thực hiện các mẹo.
whuber

hiểu rồi! cảm ơn bạn rất nhiều lần nữa, bạn thực sự đã cứu tôi, tôi gặp vấn đề vì tôi không biết về cú pháp tập hợp con
Rafailov

7

Tôi thấy rằng whuber đã đánh bại tôi với nó, nhưng tôi sẽ đăng câu trả lời của tôi dù sao đi nữa.

Nếu bạn muốn giữ dữ liệu trong phép chiếu longlat, bạn có thể thêm tham số " Gói theo chiều dọc " vào chuỗi Proj4.

library(rgdal)

p4 <- projection(gadm)
p4_new <- paste(p4, "+lon_wrap=105")

gadm_new <- spTransform(gadm, CRS(p4_new))
spplot(gadm_new, "regions")

Điều này sẽ tập trung bản đồ của bạn ở kinh độ 105 độ đông. nhập mô tả hình ảnh ở đây


1
+1 Thật tuyệt khi thấy tùy chọn này có sẵn trong spTransform.
whuber
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.