在rgdal R中使用spTransform重新投影空间点时出错

Ada*_*dam 3 r projection spatial coordinate-systems rgdal

G'day,
我有大量的lon/lat坐标,这些坐标位于CRS Australian Geodetic Datum 66/84(简称AGD66)中.我想将这些坐标从AGD66更改为WGS84,因为它们之间有大约200米的差异,我在WGS84中有其他坐标和图层.我试过这样做:

lon        lat
147.1428   -43.49083

library(rgdal)
pts<-read.table(file.choose(),header=TRUE,sep=',')  
# I first project the pts in their original CRS
pts66<-project(cbind(pts$lon,pts$lat), "+init=epsg:4202")
# Then to transform it to WGS84
pts84 = spTransform(pts66,CRS("+init=epsg:3033"))

Error in function (classes, fdef, mtable)  : 
unable to find an inherited method for function "spTransform", for signature "matrix", "CRS"
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我得到这个错误,或者对如何我可以从AGD66这些坐标改变到WGS84有什么建议?感谢您的帮助.

干杯,
亚当

mds*_*ner 6

我删除了部分错误答案.

函数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 
Run Code Online (Sandbox Code Playgroud)

这意味着pts66不会从其原始值更改,但它们具有正确的元数据,可用于将它们转换为目标的下一步(这是Lambert Conformal Conic btw).您可能需要进行更多调查以确定所需的内容.

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 
Run Code Online (Sandbox Code Playgroud)

您的原始项目()错误地尝试从WGS84上的longlat转换为AGD66上的longlat,但该功能无法做到这一点,因此它只会增加混合中的混乱.基准不是投影,它是投影定义的关键部分,在这个意义上,"AGD66上的longlat"是一个投影,就像"WGS84上的Lambert Conformal Conic"一样.