我(试图)在一对地理点上执行操作。我在WGS84中有我的坐标,我需要让他们参加Lambert 2 Extended CRS(LIIE)。我正在尝试使用rgdal
。在R中的两个CRS之间切换(使用rgdal)
下面是我在做什么:
library("rgdal")
library("sp")
# Loading CRS
WGS84<-"+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs"
LIIE<-"+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"
# Loading the pairs of points
matrix<-read.table(file="file_with_coordinates.csv", header=TRUE, sep=";", stringsAsFactors = F)
的matrix
列如下:origin_id
,destination_id
,or_lon
,or_lat
,de_lon
,de_lat
。显然,只有最后4列需要从WGS84转换为LIIE。
我能够通过这样变换坐标:
matrix_sp<-SpatialPoints(coords = od_matrix[,c("de_lon","de_lat","or_lon","or_lat")],proj4string = CRS(WGS84))
matrix_sp_liie<-spTransform(od_matrix_sp, CRSobj = CRS(LIIE))
matrix_liie<-data.frame(matrix_sp_liie)
但是,我因此失去了出发地和目的地的ID ...(而且什么事,可以让我去,我没有合并在一起matrix_liie
与origin/destination ids
在matrix_sp
)。我试过了(它基本上是相同的代码,但destination_id
和oririgin_id
包含在第一行),但我真的无法得到一些有趣的东西(我得到一个Error in .local(obj, ...) : cannot derive coordinates from non-numeric matrix
错误)。
od_matrix_sp<-SpatialPoints(coords = od_matrix[,c("destination_id","oririgin_id","de_lon","de_lat","or_lon","or_lat")],proj4string = CRS(WGS84))
matrix_sp_liie<-spTransform(od_matrix_sp, CRSobj = CRS(LIIE))
matrix_liie<-data.frame(matrix_sp_liie)
有关我如何实现这一点的任何想法?
谢谢。从CSV
样品:
origin_id destination_id or_lon or_lat de_lon de_lat
123_a 005 3.88 45.6 1.56 46.7
123_b 006 5.10 41.1 2.4 42.6
你可以给你的csv文件中的几行代码示例吗?因为我怀疑答案只是创建一个'SpatialLinesDataFrame'或者一个'SpatialPointsDataFrame'作为行数的两倍的特征,并且使用ID值来链接它们...... – Spacedman
啊,是的,你是对的我没有,我想这样做,我编辑了我的答案。如果你想发布这个作为答案,我会撤回我的 – Victorp
谢谢你的评论。我从CSV中添加了一个示例。我不确定你的意思是“行数为特征数的两倍,并使用ID值来链接它们”? –