Masalah dengan memplot peta di R

8

Saat gadmmemetakan peta Rusia R, saya memiliki masalah pada meridian 180 derajat, di mana bagian wilayah Rusia diplot secara terpisah. Anda dapat melihatnya di plot menggunakan kode berikut (itu tepi kiri dan bagian ada di kanan). Adakah yang bisa menyarankan bagaimana menghindari masalah ini?

Ini adalah versi singkat dari kode untuk pertanyaan saya:

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")

Peta

Ruvin Rafailov
sumber

Jawaban:

5

Proyeksikan datanya. Contoh ini menggunakan proyeksi stereografi kutub yang berpusat di dekat tengah Rusia (bujur 105 derajat timur):

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

Peta

Wilayah masalah ada di kanan atas. Anda dapat melihat bahwa wilayah ini telah dipecah menjadi dua bagian dan, berdasarkan proyeksi, disusun kembali menjadi area yang bersebelahan: batas umum terlihat. Begitulah dalam data: secara eksplisit direpresentasikan sebagai dua fitur terpisah. Untuk menghapus pemisahan yang terlihat, Anda harus menggabungkan kedua bagian (operasi yang jauh lebih mudah dilakukan dengan GIS daripada dengan R).

whuber
sumber
Hanya satu pertanyaan bodoh lagi, tolong, jika Anda tidak keberatan, saya ingin tahu bagaimana hal itu dapat dilakukan untuk memplot hanya satu poligon dari peta, seperti Moskow misalnya
Ruvin Rafailov
2
Halaman bantuan untuk spmenyebutkan bahwa kelas ini mendukung "metode termasuk cetak / tampilkan, plot, subset, [, [[, \ $, nama, redup, ringkasan, ..." Halaman bantuan untuk subsetmenunjukkan sintaksisnya. Kuncinya adalah mengetahui bidang mana yang akan digunakan untuk menemukan Moskow! Saya menemukannya dengan melihat nilai-nilai unik dari semua bidang, akhirnya turun levels(gadm$NAME_1). Ini mengarah ke spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), yang melakukan trik.
whuber
oke! terima kasih banyak lagi, Anda benar-benar menyelamatkan saya, saya punya masalah karena saya tidak tahu tentang sintaksis himpunan bagian
Ruvin Rafailov
7

Saya melihat bahwa whuber sudah mengalahkan saya untuk itu, tetapi saya akan memposting jawaban saya.

Jika Anda ingin menyimpan data dalam proyeksi longlat, Anda dapat menambahkan parameter " Pembungkus Longitudinal " ke string Proj4.

library(rgdal)

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

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

Ini akan memusatkan peta Anda di garis bujur 105 derajat timur. masukkan deskripsi gambar di sini

ialm
sumber
1
+1 Sangat menyenangkan melihat opsi ini tersedia di spTransform.
whuber