【问题标题】:"Non Finite Transformation Detected" in spTransform in rgdal R Packagergdal R 包中 spTransform 中的“检测到非有限变换”
【发布时间】:2013-01-30 13:51:47
【问题描述】:

我正在尝试将地理坐标(度)转换为 UTM 坐标(米),并不断收到“检测到非有限变换”的错误消息。你知道我该如何解决这个问题吗?这是我使用的代码:

> GPS.Points <- Gomer.Data[, c('Longitude', 'Latitude')]
> head(GPS.Points)

  Longitude  Latitude
1  23.85474 -19.52211
2  23.85531 -19.52243
3  23.85534 -19.52257
4  23.85580 -19.52346
5  23.85551 -19.52380
6  23.85513 -19.52360

> GPS.Points.Spatial.Data <- SpatialPoints(GPS.Points, 
                                         proj4string=CRS("+proj=longlat +ellps=WGS84"))
> GPS.Points.Spatial.Data[1]

SpatialPoints:
     Longitude  Latitude
[1,]  23.85474 -19.52211
Coordinate Reference System (CRS) arguments: +proj=longlat +ellps=WGS84 

> class(GPS.Points.Spatial.Data)

[1] "SpatialPoints"
attr(,"package")
[1] "sp"

> GPS.Points.UTM.Spatial.Data <- spTransform(GPS.Points.Spatial.Data,
                                           CRS("+proj=utm +south +zone=34 +ellps=WGS84"))

non finite transformation detected:
     Longitude Latitude  
Error in spTransform(GPS.Points.Spatial.Data, CRS("+proj=utm +south +zone=34 +ellps=WGS84")) : 
  failure in points 
In addition: Warning message:
In spTransform(GPS.Points.Spatial.Data, CRS("+proj=utm +south +zone=34 +ellps=WGS84")) :
  3 projected point(s) not finite

【问题讨论】:

  • 下面我的回答有帮助吗?如果是这样,请将其作为已接受的答案进行检查...

标签: r spatial coordinate-systems rgdal


【解决方案1】:

我会检查您尝试转换的数据。我无法访问您在示例中拥有的数据,所以我只是使用您提供的前 3 个坐标点来尝试复制错误并且没有收到错误。我还检查了错误是否可能是由于指定的 UTM 区域不包括通过更改区域编号和北/南参数提供的所有点,但一切正常。 我可能会创建一个循环,遍历您要分块转换的数据,以查看问题出在哪里......

library(rgdal)

GPS.Points=data.frame(Longitude=c(23.85474, 23.85531, 23.85534))
GPS.Points=cbind(GPS.Points,Latitude=c(-19.52211, -19.52243, -19.52257))

GPS.Points.Spatial.Data <- SpatialPoints(GPS.Points, 
proj4string=CRS("+proj=longlat     +ellps=WGS84"))
GPS.Points.Spatial.Data[1]

class(GPS.Points.Spatial.Data)

GPS.Points.UTM.Spatial.Data <- spTransform(GPS.Points.Spatial.Data,
                          CRS("+proj=utm +south +zone=34 +ellps=WGS84"))

既然你问了,这里有一段代码可以遍历部分数据。如果您遇到错误,您至少会知道问题出在数据中的哪个位置:

library(rgdal)
GPS.Points=data.frame(Longitude=c(23.85474, 23.85531, 23.85534, 23.85474, 
23.85531, 23.85534, 23.85474, 23.85531, 23.85534))
GPS.Points=cbind(GPS.Points,Latitude=c(-19.52211, -19.52243, -19.52257, -19.52211, 
-19.52243, -19.52257, -19.52211, -19.52243, -19.52257))

n_chunks=3 #number of pieces you will break you data into
n.points=dim(GPS.Points)[1]
breaks=seq(1,n.points, by=round(n.points/n_chunks))
breaks=c(breaks, n.points) #make sure to include last points as well

i=1
for (i in 1:(length(breaks)-1)){
  cat('\n','converting points', breaks[i], "to", breaks[i+1])  
  temp.GPS.Points=GPS.Points[breaks[i]:breaks[i+1],]
  temp.GPS.Points.Spatial.Data <- SpatialPoints(temp.GPS.Points, 
proj4string=CRS("+proj=longlat +ellps=WGS84"))
  temp.GPS.Points.UTM.Spatial.Data <- spTransform(temp.GPS.Points.Spatial.Data,
                                             CRS("+proj=utm +south +zone=34 
+ellps=WGS84"))
}

【讨论】:

  • 您好,非常感谢您的回复!我对 R 很陌生——你能给我一些代码来告诉我如何遍历数据块吗?
  • 当然,我不是专家,但我在上面包含了一个非常简单的代码。
猜你喜欢
  • 1970-01-01
  • 2012-04-16
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2019-09-05
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多