Menetapkan CRS yang berbeda tidak mengubah proyeksi data spasial yang mendasarinya - CRS adalah bagian internal dari objek spasial yang memberitahu R cara menafsirkan koordinat spasial.
library(rgdal)
# Load Tanzania in UTM 36
tz.36 <- readOGR(dsn = ".", layer = "tz_36")
summary(tz.36) # Show the bounding coordinates:
Coordinates:
min max
x 94000.58 1315978
y 8699697.87 9889701
Is projected: TRUE
proj4string :
[+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
....
Sekarang ubah bentuk menjadi zona UTM yang berdekatan:
tz.37 <- spTransform(tz.36, CRS("+init=epsg:32737"))
summary(tz.37)
Coordinates:
min max
x -576091.7 657248.1
y 8700995.0 9888925.5
Is projected: TRUE
proj4string :
[+init=epsg:32737 +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Koordinat geometri telah berubah - dengan benar - agar sesuai dengan zona UTM yang berdekatan. Bagaimana jika kita dengan mudah menugaskan CRS tanpa transformasi?
# Make a copy of the original object.
tz.37.b <- tz.36
# Assign the CRS
proj4string(tz.37.b) <- CRS("+init=epsg:32737")
Warning message:
In `proj4string<-`(`*tmp*`, value = <S4 object of class "CRS">) :
A new CRS was assigned to an object with an existing CRS:
+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
without reprojecting.
For reprojection, use function spTransform in package rgdal
Kami sudah diperingatkan ... jadi seperti apa koordinatnya?
summary(tz.37.b)
Coordinates:
min max
x 94000.58 1315978
y 8699697.87 9889701
Is projected: TRUE
proj4string :
[+init=epsg:32737 +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Angka-angka (koordinat) adalah yang asli dari zona UTM 36, tetapi bentuknya akan dipetakan ke zona UTM yang salah sekarang, dan muncul di tempat yang salah.
Edit
Menggunakan metode persis yang disarankan oleh OP:
# Make a new copy of the original UTM 36 shape:
tz.37.c <- tz.36
# Now assign the proj4string using OP's suggestion:
proj4string(tz.37.c) <- proj4string(tz.37)
summary(tz.37.c)
Coordinates:
min max
x 94000.58 1315978
y 8699697.87 9889701
Is projected: TRUE
proj4string :
[+init=epsg:32737 +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Extent sama dengan objek utm36 asli, tetapi proj4string sekarang utm37. (Menariknya, tidak ada peringatan saat ini.) Catatan: hasilnya PERSIS sama dengan menugaskan CRS dengan kode EPSG. Untuk mengetes:
identical(tz.37.b, tz.37.c)
TRUE
Mari kita periksa seperti apa bentuk sebenarnya, menggunakan lapisan UTM37 sebenarnya dari wilayah Tanzania.
# Load the region shape
tz.regions.37 <- readOGR(".", "tz_regions_37_simp")
# Plot it
plot(tz.regions.37, lwd = 1, border = 'red')
# Now add the CRS-assigned (not transformed!) object:
plot(tz.37.c, add = T, border = 'blue', lwd = 2)
Mereka tidak berbaris, jadi metode ini tidak berfungsi! Bagaimana dengan objek yang ditransformasikan ?
plot(tz.37, add = T, border = 'darkgreen', lwd = 2)
Objek yang ditransformasikan muncul di tempat yang tepat (latar belakang hijau gelap).
NB Jika Anda mentransformasikan antara zona UTM tetapi datum yang sama (WGS84 di sini) perbedaannya akan sangat dramatis, seperti dalam contoh saya - tetapi jika Anda mentransformasikan antara datum yang berbeda, perbedaannya mungkin jauh lebih halus. Sebagai contoh, di bawah ini adalah dua bentuk dari Zanzibar, keduanya UTM 37, tetapi satu adalah WGS84 dan yang lainnya adalah ARC1960: