我删除了部分错误答案.
函数 project() 无法进行数据转换,因此您可能会遇到问题,我认为您的情况是错误的。
问题是您只能在 WGS84 上从/到 longlat 投影(),因此您对项目的第一次使用是不正确的。如果我猜对了,那么您的坐标是 AGD66 格式的,因此您必须首先分配该投影,然后才能进行变换。您不能使用project() 进行数据转换,但spTransform() 可以。
我想你需要这个:
pts = read.table(text = "lon lat
147.1428 -43.49083", header = TRUE)
## assign original coordinate system
pts66 = SpatialPoints(cbind(pts$lon,pts$lat), CRS("+init=epsg:4202"))
## Then to transform it to WGS84
pts84 = spTransform(pts66, CRS("+init=epsg:3033"))
pts66
SpatialPoints:
coords.x1 coords.x2
[1,] 147.1428 -43.49083
Coordinate Reference System (CRS) arguments: +init=epsg:4202 +proj=longlat +ellps=aust_SA
+no_defs
pts84
SpatialPoints:
coords.x1 coords.x2
[1,] 11126605 2971806
Coordinate Reference System (CRS) arguments: +init=epsg:3033 +proj=lcc +lat_1=-68.5 +lat_2=-74.5
+lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
+towgs84=0,0,0
这意味着 pts66 的原始值不会发生变化,但它们具有正确的元数据,可用于将它们转换为您的目标(顺便说一句,即兰伯特等角圆锥)。您可能需要进行更多调查才能弄清楚需要什么。
CRS("+init=epsg:4202")
CRS arguments:
+init=epsg:4202 +proj=longlat +ellps=aust_SA +no_defs
CRS("+init=epsg:3033")
CRS arguments:
+init=epsg:3033 +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50
+lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m
+no_defs +towgs84=0,0,0
您原来的 project() 错误地尝试从 WGS84 上的 longlat 转换为 AGD66 上的 longlat,但该函数无法做到这一点,因此它只会增加混合中的混乱。基准不是投影,它是投影定义的关键部分,从这个意义上说,“AGD66 上的 longlat”是一个投影,就像“WGS84 上的兰伯特等角圆锥曲线”一样。