Как конвертировать координаты, сохраняя всю информацию из фрейма данных - PullRequest
0 голосов
/ 16 января 2020

У меня есть список координат в системе координат Lambert78, который я хочу преобразовать в WGS84. Я хочу, чтобы эти преобразованные координаты были добавлены в виде 2 дополнительных столбцов к моему фрейму данных, чтобы я мог сохранять имена меток Это набор данных:

label   Ycoord    Xcoord    
AB_01   227426.9  199559.0  
AB_02   227426.9  199559.0
...

Я хотел бы получить такой кадр данных:

label   Ycoord    Xcoord    Ycoord_wgs   Xcoord_wgs
AB_01   227426.9  199559.0  5.92          58.56
AB_02   227316.9  199859.0  5.74          57.68

Преобразование координат не проблема для чего-то вроде spTransform, но затем я теряю связь с имена меток. У кого-нибудь есть предложение?

Ответы [ 2 ]

1 голос
/ 16 января 2020

Возвращает data.frame с нужными столбцами, создавая объект SpatialPoints и затем привязывая преобразование координат объекта к исходному data.frame. Тем не менее, координаты wgs84 немного отличаются по сравнению с тем, что вы опубликовали, поэтому, пожалуйста, предоставьте больше информации о системе координат "Lambert 78" для правильного соответствия crs.

library(sp)
coord_df <- data.frame(label=c('AB_01', 'AB_02'), Ycoord=c(227426.9, 227316.9), Xcoord=c(199559.0, 199859.0), stringsAsFactors = FALSE)
proj4_lambert <- '+proj=lcc +lat_1=51.16666723333334 +lat_2=49.83333389999999 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-99.1,53.3,-112.5,0.419,-0.83,1.885,-1.0 +units=m +no_defs'
#see https://spatialreference.org/ref/sr-org/56/
coord_sp <- SpatialPoints(coords=coord_df[,c('Xcoord', 'Ycoord')],  proj4string = CRS(proj4_lambert))
coord_df_final <- cbind(coord_df, coordinates(spTransform(coord_sp, CRS('+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0')))[,2:1])
colnames(coord_df_final)[4:5] <- c('Ycoord_wgs', 'Xcoord_wgs')
coord_df_final
#  label   Ycoord Xcoord Ycoord_wgs Xcoord_wgs
#1 AB_01 227426.9 199559   51.35447   5.080160
#2 AB_02 227316.9 199859   51.35346   5.084451
0 голосов
/ 16 января 2020

Мы можем использовать пакет sf и dplyr, чтобы сохранить исходные столбцы, изменить системы координат, а затем вернуть их обратно в data.frame.

library(sf)
library(dplyr)

df <- readr::read_table("label   Ycoord    Xcoord    
AB_01   227426.9  199559.0  
AB_02   227426.9  199559.0")

df <- df %>%
  st_as_sf(crs = 31370, coords = c("x" = "Xcoord", "y" = "Ycoord"), remove = F) %>%
  st_transform(crs = 4326) 

coords <- st_coordinates(df)

mutate(df,
       x_wgs1984 = coords[,1],
       y_wgs1984 = coords[,2])

#> Simple feature collection with 2 features and 5 fields
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 5.08016 ymin: 51.35447 xmax: 5.08016 ymax: 51.35447
#> epsg (SRID):    4326
#> proj4string:    +proj=longlat +datum=WGS84 +no_defs
#> # A tibble: 2 x 6
#>   label  Ycoord Xcoord           geometry x_wgs1984 y_wgs1984
#> * <chr>   <dbl>  <dbl>        <POINT [°]>     <dbl>     <dbl>
#> 1 AB_01 227427. 199559 (5.08016 51.35447)      5.08      51.4
#> 2 AB_02 227427. 199559 (5.08016 51.35447)      5.08      51.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...