Создание точек SF из нескольких длинных лат - PullRequest
0 голосов
/ 28 сентября 2018
library(sf)

DT <- data.frame(
  lat1=c(-26.3, -27.1, -26.8),
  long1=c(27.3, 28.5, 28.2),
  lat2=c(-26.5, -26.9, -27.2),
  long2=c(28.3, 27.5, 28.1)
)

DT$p1 <- st_geometry(st_as_sf(DT,coords = c("lat1","long1")))
DT$p2 <- st_geometry(st_as_sf(DT,coords = c("lat2","long2")))

У меня есть фрейм данных с 2 наборами широт / длин, которые я хотел бы преобразовать в точки.

DT$p1 <- st_geometry(st_as_sf(DT,coords = c("lat1","long1")))

дает ожидаемый результат, но

DT$p2 <- st_geometry(st_as_sf(DT,coords = c("lat2","long2")))

дает мне тот же результат, что и DT $ p1.

enter image description here

Если я изменю порядок этих двух утверждений, оба дадут очки (lat2, long2)

enter image description here

Как я могусоздать df с несколькими точками в строке?

1 Ответ

0 голосов
/ 28 сентября 2018

Проблема в том, что st_geometry создает липкий столбец, который используется для идентификации геометрии sf-объекта.Использование st_as_sf с уже существующим и активным столбцом геометрии будет игнорировать любую другую попытку указать столбец геометрии.Чтобы создать второй столбец геометрии, мы можем временно удалить класс sf (используя (as.data.frame).

library(sf)

DT = data.frame(
  lat1=c(-26.3, -27.1, -26.8),
  long1=c(27.3, 28.5, 28.2),
  lat2=c(-26.5, -26.9, -27.2),
  long2=c(28.3, 27.5, 28.1)
)

DT = st_as_sf(DT, coords = c("long1","lat1"), remove = FALSE)
DT$p2 = st_as_sf(as.data.frame(DT), coords = c("long2","lat2"))

DT

# Simple feature collection with 3 features and 4 fields
# Active geometry column: geometry
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 27.3 ymin: -27.1 xmax: 28.5 ymax: -26.3
# epsg (SRID):    NA
# proj4string:    NA
#    lat1 long1  lat2 long2           geometry                 p2
# 1 -26.3  27.3 -26.5  28.3 POINT (27.3 -26.3) POINT (28.3 -26.5)
# 2 -27.1  28.5 -26.9  27.5 POINT (28.5 -27.1) POINT (27.5 -26.9)
# 3 -26.8  28.2 -27.2  28.1 POINT (28.2 -26.8) POINT (28.1 -27.2)

st_geometry(DT)

# Geometry set for 3 features 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 27.3 ymin: -27.1 xmax: 28.5 ymax: -26.3
# epsg (SRID):    NA
# proj4string:    NA
# POINT (27.3 -26.3)
# POINT (28.5 -27.1)
# POINT (28.2 -26.8)

Также обратите внимание, что правильная спецификация координат - это x, y, следовательно, long, latне лат, длинный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...