在R中获取多个坐标的中心

时间:2018-07-20 10:18:07

标签: r geospatial spatial geosphere

我有一个带有“ lat”,“ lon”值的数据框,例如:

  index      lat         lon     
 ------- ----------- ----------- 
      1   51.513393   -0.115650  
      2   51.513428   -0.115461  
      3   51.513428   -0.115462  
      4   51.513428   -0.115465  
      5   51.513428   -0.115470  
      6   51.513432   -0.115462  
      7   51.513432   -0.115467  
      8   51.513435   -0.115471  
      9   51.513439   -0.115468  
     10   51.513439   -0.115469  

我正在尝试获得这些点的中心:

center_point <- centroid(df)

'geosphere'程序包引发错误,我遇到了问题:

Error in .pointsToMatrix(x, poly = TRUE) : longitude > 360
In addition: Warning message:
In .pointsToMatrix(x, poly = TRUE) :
  Suspect column names (longitude and latitude reversed?)

通过阅读此stackoverflow post,问题可能出在我以字符串而不是数字/双精度格式设置的值。

然后我将这些列值转换为数字:

df$lon <- as.numeric(df$lon)
df$lat <- as.numeric(df$lat)

不过,这种转换似乎把我的数据都弄糟了,就像现在看时一样;它显示了这一点:

  index   lat   lon  
 ------- ----- ----- 
      1     1    35  
      2     2     8  
      3     2     9  
      4     2    11  
      5     2    15  
      6     3     9  
      7     3    12  
      8     4    16  
      9     5    13  
     10     5    14  

有人知道我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在djhurio的帮助下解决了该问题:

必须先将值转换为:

  

as.character()

以下代码现在适用于我的应用程序:

df$lon <- as.numeric(as.character(df$lon))
df$lat <- as.numeric(as.character(df$lat))

center_point <- centroid(df)

答案 1 :(得分:1)

require(sp)
require(rgeos)

x =  'lat,lon
     51.513393,-0.115650 
     51.513428,-0.115461 
     51.513428,-0.115462 
     51.513428,-0.115465 
     51.513428,-0.115470 
     51.513432,-0.115462 
     51.513432,-0.115467  
     51.513435,-0.115471  
     51.513439,-0.115468  
     51.513439,-0.115469'

x = read.table(text = x, sep = ',', header = TRUE, colClasses= rep('numeric', 2) )

sx = SpatialPoints(coords = x[, c('lon','lat')], proj4string = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") )

gCentroid(sx)


SpatialPoints:
           x        y
1 -0.1154845 51.51343
Coordinate Reference System (CRS) arguments: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0