Обнаружено не конечное преобразование в spTransform в пакете rgdal R

Я пытаюсь преобразовать географические координаты (градусы) в координаты 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

person user2072874    schedule 14.02.2013    source источник
comment
Помог ли мой ответ ниже? если да, пожалуйста, проверьте это как принятый ответ...   -  person Lucas Fortini    schedule 10.04.2013


Ответы (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"))
}
person Lucas Fortini    schedule 14.02.2013
comment
Привет, большое спасибо за ваш ответ! Я новичок в R. Не могли бы вы дать мне код, чтобы показать мне, как работать с фрагментами данных? - person user2072874; 15.02.2013
comment
Конечно, я не эксперт, но выше я включил очень простой код. - person Lucas Fortini; 15.02.2013