0

我试图在 R 中投影我的 GPS 数据时有点卡住了。

我正在阅读 R 包“T-LoCoH”的小插图中的教程,并使用这些说明尝试将我的数据从 WGS84 投影到 UTM37(埃塞俄比亚区域)。

我的数据集称为“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

你能告诉我我做错了什么吗?

另外,如果我的数据集中有更多列,我如何指定我只想将数据投影到包含纬度和经度的 2 列中?

我将非常感谢您的帮助。

谢谢,林迪

4

2 回答 2

2

代替:

> 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)]可以这样做。

于 2016-05-02T17:46:37.430 回答
0

您可以使用 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")
于 2016-05-02T17:24:27.957 回答