Как получить координаты в R из файла kml, используя st_read - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю с r и пытаюсь получить из файла KML географические c координаты (широта и долгота). Я использую файл KML, который я создал в Google Earth, и я получаю координаты правильным образом, используя st_read() из sf package в следующем коде:

Google_earth_kml <- st_read("prueba_direcciones_google_earth.kml")

Дело в том, что я получаю следующая таблица:

Name                                                         description                             Geometry
store 1                   address: Barros Luco 2058<br>RUT: 08.180.861-9          c(-71.6132, -33.5985683, 0)
store 2   address: AVENIDA DOMINGO SANTA MARIA 1789<br>RUT: 76.585.397-4       c(-70.6639313, -33.4155609, 0)

И я хочу получить такую ​​таблицу:

Name                             address          Rut        long         lat
store 1                 Barros Luco 2058 08.180.861-9    -71.6132 -33.5985683
store 2 AVENIDA DOMINGO SANTA MARIA 1789 76.585.397-4 -70.6639313 -33.4155609

Это лишь небольшая часть моих данных. Я знаю, что, возможно, вам понадобится файл KML, но по соображениям политики и конфиденциальности я не могу им поделиться.

Интересно, может ли кто-нибудь высказать мне мнение или другую точку зрения. Любая помощь будет благодарна.

1 Ответ

2 голосов
/ 30 апреля 2020

Мы можем использовать st_coordinates() для этого.

Для данных я только что нашел пример файла KML с точечной геометрией онлайн. Я рекомендую попробовать, если у вас есть данные, которыми вы не сможете поделиться в будущем.

Данные

library(sf)
library(dplyr)

sample_KML <- "https://github.com/mapbox/Simple-KML/raw/master/sample/example.kml"

KML_sf <- st_read(sample_KML) %>% 
  slice(1:4) # keep only the first 4 rows. The 5th row is a polygon

KML_sf

Simple feature collection with 4 features and 2 fields
geometry type:  POINT
dimension:      XYZ
bbox:           xmin: -122.6819 ymin: -22.90833 xmax: 28.97602 ymax: 64.13333
z_range:        zmin: 0 zmax: 0
CRS:            4326
            Name Description                       geometry
1       Portland                POINT Z (-122.6819 45.52 0)
2 Rio de Janeiro             POINT Z (-43.19639 -22.9083...
3       Istanbul              POINT Z (28.97602 41.01224 0)
4      Reykjavik             POINT Z (-21.93333 64.13333 0)

Вывод

output <- KML_sf %>% 
  mutate(long = st_coordinates(.)[,1],
         lat = st_coordinates(.)[,2])


output

Simple feature collection with 4 features and 4 fields
geometry type:  POINT
dimension:      XYZ
bbox:           xmin: -122.6819 ymin: -22.90833 xmax: 28.97602 ymax: 64.13333
z_range:        zmin: 0 zmax: 0
CRS:            4326
            Name Description                       geometry       long       lat
1       Portland                POINT Z (-122.6819 45.52 0) -122.68194  45.52000
2 Rio de Janeiro             POINT Z (-43.19639 -22.9083...  -43.19639 -22.90833
3       Istanbul              POINT Z (28.97602 41.01224 0)   28.97602  41.01224
4      Reykjavik             POINT Z (-21.93333 64.13333 0)  -21.93333  64.13333

А если вы хотите избавиться от столбца геометрии:

output %>% st_drop_geometry()

            Name Description       long       lat
1       Portland             -122.68194  45.52000
2 Rio de Janeiro              -43.19639 -22.90833
3       Istanbul               28.97602  41.01224
4      Reykjavik              -21.93333  64.13333
...