別のCRSを割り当てても、基になる空間データの投影は変更されません。CRSは、空間オブジェクトの内部部分であり、Rに空間座標の解釈方法を指示します。
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]
....
次に、形状を隣接するUTMゾーンに変換します。
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]
ジオメトリの座標は、隣接するUTMゾーンに合わせて正しく変更されました。変換せずに単にCRSを再割り当てするとどうなりますか?
# 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
警告されました...では、座標はどのようになっていますか?
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]
数値(座標)はUTMゾーン36の元の番号ですが、形状は間違ったUTMゾーンにマッピングされ、間違った場所に表示されます。
編集する
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]
エクステントは元のutm36オブジェクトと同じですが、proj4stringはutm37になりました。(興味深いことに、今回は警告はありませんでした。)注:結果は、EPSGコードでCRSを割り当てた場合とまったく同じです。テストする:
identical(tz.37.b, tz.37.c)
TRUE
タンザニアの地域の実際のUTM37レイヤーを使用して、実際の形状がどのように見えるかを確認してみましょう。
# 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)

それらは整列しないので、この方法は機能しません!何についての変換オブジェクト?
plot(tz.37, add = T, border = 'darkgreen', lwd = 2)

変換されたオブジェクトが正しい場所に表示されます(濃い緑色の背景)。
注意:UTMゾーン間で同じデータム(ここではWGS84)間で変換する場合、私の例のように違いは劇的です。ただし、異なるデータム間で変換する場合、違いははるかに微妙な場合があります。たとえば、以下はザンジバルの2つの形状で、どちらもUTM 37ですが、一方はWGS84で、もう一方はARC1960です。
