使用SP包在R中进行数据投影

rjee0c15  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(182)

我有点卡住试图项目我的GPS数据在R。
我正在浏览R包“T-LoCoH”的小插图中的教程,并使用这些指令尝试将我的数据从WGS 84投影到UTM 37(埃塞俄比亚的区域)。
我的数据集叫做“d”,坐标在“经度”和“纬度”列中。

require(sp)

head(d)
  Latitude Longitude
1  6.36933  39.84300
2  6.37050  39.84417
3  6.41733  39.83800
4  6.41750  39.83800
5  6.41717  39.83750
6  6.41767  39.83733

d2 <- SpatialPoints(d, proj4string=CRS("+proj=longlat, ellps=WGS84"))
Error in CRS("+proj=longlat \nellps=WGS84") : unknown projection id

你能告诉我哪里做错了吗?
另外,如果我的数据集中有更多的列,我如何指定我只想投影包含纬度和经度的两列中的数据?
我将非常感谢你的帮助。
谢谢琳迪

e4yzc0pl

e4yzc0pl1#

取代:

> d2 <- SpatialPoints(d, proj4string=CRS("+proj=longlat, ellps=WGS84"))
Error in CRS("+proj=longlat, ellps=WGS84") : unknown projection id

您需要:

> d2 <- SpatialPoints(d, proj4string=CRS("+proj=longlat +ellps=WGS84"))

但最好使用epsg代码作为GPS坐标:

> d2 <- SpatialPoints(d, proj4string=CRS("+init=epsg:4326"))

简单来说就是:

Coordinate Reference System (CRS) arguments: +init=epsg:4326
+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0

如果你只想传递两列,你可以:

> d2 <- SpatialPoints(d[,c("Longitude","Latitude")], proj4string=CRS("+init=epsg:4326"))

这让我觉得你应该把X和Y坐标按另一种顺序排列,你可以用任何其他方法来选择数据框列,所以如果你的Lat-long在第7和23列,那么d[,c(23,7)]就可以了。

3htmauhk

3htmauhk2#

您可以使用PBSmapping库来完成此操作。

require(PBSmapping)

# re-create your data
d = as.data.frame(list(Latitude = c(6.36933,6.37050,6.41733,
                                6.41750,6.41717,6.41767),
                   Longitude = c(39.84300,39.84417,39.83800,
                                 39.83800,39.83750,39.83733)))

# convUL function requires columns to be called "X" and "Y"
dataLL=as.data.frame(list(X=d$Longitude,Y=d$Latitude))

# add a projection attribute (see details in ?convUL)
attr(dataLL,"projection")="LL"

# create a new data frame called dataUTM
dataUTM=convUL(dataLL,km=F)

# output from running previous command
convUL: For the UTM conversion, automatically detected zone 37.
convUL: Converting coordinates within the northern hemisphere.

# extract UTM zone
attr(dataUTM,"zone")

相关问题