0

我有来自UTM-zone 33以北的大经度信息。

我尝试使用以下命令将此地理信息转换为 UTM 坐标(我的数据集对象最初称为 S3km):

library(rgdal)
UTM33N<-"+proj=utm+zone=33+north"
UTM33N<-paste(UTM33N,"+ellps=WGS84",sep="")
UTM33N<-paste(UTM33N,"+datum=WGS84",sep="")
UTM33N<-paste(UTM33N,"+units=m+no_defs",sep="")
coord.UTM33N<-project(as.matrix(S3km[,c("Longitude","Latitude")]),UTM33N)

我收到以下错误消息:

Error in project(as.matrix(S3km[,c("Longitude","Latitude")]),UTM33N):
no arguments in initialization list.

有谁知道是什么问题?我下载了最新的 R 版本(即 R 2.15.2)并且 -packagergdal也是新下载的。

4

2 回答 2

3

您的代码似乎至少有几个问题:

  • 正如卢卡斯指出的那样,PROJ4字符串在参数之间需要空格,所以使用sep = " "(paste()的默认值) 而不是sep = "".

  • 此外,sprgdal包中的函数期望将 proj4strings 包装在对CRS()实用程序函数的调用中。

这是一个工作示例,您应该能够适应您的情况:

library(rgdal)

## Create an example SpatialPoints object
pts <- SpatialPoints(cbind(-120:-121, 39:40), 
                     proj4string = CRS("+proj=longlat +datum=NAD27"))

## Construct a proper proj4string
UTM11N <- "+proj=utm +zone=11 +datum=NAD83 +units=m +no_defs"
UTM11N <- paste(UTM11N, "+ellps=GRS80 +towgs84=0,0,0")
UTM11N <-  CRS(UTM11N)

## Project your points
ptsUTM <- spTransform(pts, UTM11N)

## Check that it worked
ptsUTM
# SpatialPoints:
#      coords.x1 coords.x2
# [1,]  240111.6   4321052
# [2,]  158420.9   4435418
# Coordinate Reference System (CRS) arguments: +proj=utm +zone=11
# +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0 
于 2013-02-28T17:32:14.617 回答
2

您使用的投影信息格式似乎不正确。这可能会导致函数无法识别投影字符串中的参数。如 rgdal 中所述,投影信息必须符合 PROJ.4 文档(即,在 += 和分隔参数的空格之间没有空格。例如:“+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 " 将您的粘贴函数参数更改为 sep=" " 可能会解决此问题。

于 2013-02-28T17:09:23.997 回答