Как извлечь данные osm с помощью osmar

Аналогично этому вопросу я получаю сообщение об ошибке от get_osm

library(maptools)
library(osmar)
url <- "http://osmar.r-forge.r-project.org/"
file <- "muenchen.osm.gz"
# download.file(sprintf("%s%s", url, file), file)
# gzip is linux only, on windows I unzipped this manually with 7zip!
# unzip("gzip -d muenchen.osm.gz") 

src <- osmsource_osmosis(file = "140-muenchen.osm")
muc_bbox <- center_bbox(11.575278, 48.137222, 3000, 3000)
muc <- get_osm(x = muc_bbox, source = src)

Ошибка

Fehler in file(con, "r") : kann Verbindung nicht öffnen Zusätzlich: Warnmeldung: In file(con, "r") : kann Datei 'C:\Users\sqc\AppData\Local\Temp\RtmpQtndOZ\file3bc03a7b5127' nicht öffnen: Нет такого файла или каталога

Я запустил RStudio от имени администратора, установил gzip, но он все равно не работает. Любые идеи? Я на окнах.

(Пример взят из здесь)


Изменить:

Мой путь выглядит как C:/07 Rprogress/00 Erste Testprogramme/140-muenchen.osm.gz, но я надеюсь, что это не проблема

file.exists("muenchen.osm.gz")
[1] TRUE
> shell("7z e muenchen.osm.gz")
Der Befehl "7z" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Warnmeldung:
In shell("7z e muenchen.osm.gz") :
  '7z e muenchen.osm.gz' Ausführung mit Fehlerkode 1 fehlgeschlagen
> shell.exec("7z e muenchen.osm.gz")
Fehler in shell.exec("7z e muenchen.osm.gz") : 
  '7z e 140-muenchen.osm.gz' nicht gefunden
> system("7z e muenchen.osm.gz")
[1] 127

Я следую инструкциям здесь и устанавливаю

set PATH=%PATH%;C:\Program Files\7-Zip\
echo %PATH%

Редактировать 2:

st_layers("myfile.osm", do_count = TRUE)
Driver: OSM 
Available layers:
        layer_name       geometry_type features fields
1           points               Point       61     10
2            lines         Line String        0      9
3 multilinestrings   Multi Line String        0      4
4    multipolygons       Multi Polygon        0     25
5  other_relations Geometry Collection        0      4
Warnmeldungen:
1: In CPL_get_layers(dsn, options, do_count) :
  GDAL Error 1: Non increasing node id. Use OSM_USE_CUSTOM_INDEXING=NO
2: ...

person Christoph    schedule 25.05.2020    source источник
comment
Привет! Я не знаю, как исправить эту ошибку с помощью osmar, но, если хотите, я могу предоставить эквивалентный код для чтения тех же данных .osm с помощью пакета sf или osmdata.   -  person agila    schedule 25.05.2020
comment
@agila приветствуется любое решение :-)   -  person Christoph    schedule 25.05.2020


Ответы (1)


Следующий код должен работать для чтения в R файла muenchen.osm.gz.

# packages
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
options(width = 120)

# download muenchen.osm.gz file
download.file(
  url = "http://osmar.r-forge.r-project.org/muenchen.osm.gz", 
  destfile = "muenchen.osm.gz", 
  mode = "wb"
)
# Unzip using 7zip. You can also do this manually. 
shell("7z e muenchen.osm.gz")

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

# 1. List all the layers
st_layers("muenchen.osm", do_count = TRUE)
#> Driver: OSM 
#> Available layers:
#>         layer_name       geometry_type features fields
#> 1           points               Point    37583     10
#> 2            lines         Line String    56325      9
#> 3 multilinestrings   Multi Line String       96      4
#> 4    multipolygons       Multi Polygon    32328     25
#> 5  other_relations Geometry Collection      337      4

# 2. Read the lines layer (or any other layer)
muenchen_lines <- read_sf("muenchen.osm", layer = "lines")

Печать объекта здесь, в SO, довольно запутанная, но будет более понятно, если вы скопируете и вставите код в R.

# 3. Print the result
muenchen_lines
#> Simple feature collection with 56325 features and 9 fields
#> geometry type:  LINESTRING
#> dimension:      XY
#> bbox:           xmin: 11.30704 ymin: 48.0155 xmax: 11.82806 ymax: 48.28529
#> geographic CRS: WGS 84
#> # A tibble: 56,325 x 10
#>    osm_id name    highway waterway aerialway barrier man_made z_order other_tags                                geometry
#>    <chr>  <chr>   <chr>   <chr>    <chr>     <chr>   <chr>      <int> <chr>                             <LINESTRING [°]>
#>  1 98     <NA>    tertia~ <NA>     <NA>      <NA>    <NA>           4 "\"junction\"=>\"r~ (11.36604 48.1764, 11.36607 4~
#>  2 99     <NA>    tertia~ <NA>     <NA>      <NA>    <NA>           4 "\"junction\"=>\"r~ (11.36614 48.17414, 11.36617 ~
#>  3 100    <NA>    second~ <NA>     <NA>      <NA>    <NA>           6 "\"junction\"=>\"r~ (11.33037 48.18013, 11.33031 ~
#>  4 101    <NA>    second~ <NA>     <NA>      <NA>    <NA>           6 "\"junction\"=>\"r~ (11.32986 48.18367, 11.32973 ~
#>  5 102    <NA>    primary <NA>     <NA>      <NA>    <NA>           7 "\"junction\"=>\"r~ (11.45455 48.1672, 11.45424 4~
#>  6 680    <NA>    motorw~ <NA>     <NA>      <NA>    <NA>          29 "\"bridge\"=>\"yes~ (11.54136 48.22608, 11.543 48~
#>  7 1939   Gerani~ reside~ <NA>     <NA>      <NA>    <NA>           3  <NA>               (11.48282 48.10904, 11.48291 ~
#>  8 1945   Sonnen~ reside~ <NA>     <NA>      <NA>    <NA>           3  <NA>               (11.48714 48.10564, 11.48732 ~
#>  9 122956 Berber~ reside~ <NA>     <NA>      <NA>    <NA>           3 "\"maxspeed\"=>\"3~ (11.42325 48.15542, 11.42308 ~
#> 10 122957 Otto-K~ reside~ <NA>     <NA>      <NA>    <NA>           3 "\"maxspeed\"=>\"3~ (11.42276 48.15559, 11.42251 ~
#> # ... with 56,315 more rows

# 4. Plot
par(mar = rep(0, 4))
plot(st_geometry(muenchen_lines))

Создано 26 мая 2020 г. с помощью пакета reprex (v0.3.0)

Вам также следует проверить виньетки osmdata, если вы хотите создавать свои собственные запросы для загрузка данных из Open Street Map.

Рекомендации

Если вы хотите проверить несколько ссылок на sf, я бы посоветовал прочитать виньетки (см. статьи) пакета и главы с 1 по 7 Геовычисления с R. Если вы хотите узнать, как использовать osmdata для создания собственных запросов к Open Street Map, я предлагаю прочитать виньетки. Между этими двумя подходами есть несколько различий, но вы можете прочитать их в виньетках.

Насколько я знаю, предложенный способ (см. здесь, здесь и здесь) для чтения данных .osm в R с использованием sf: 1) преобразовать данные .osm в формат .gpkg (вы можете использовать sf::gdal_utils) и 2) прочитать файл .gpkg. Если вы можете поделиться файлом .osm, я могу проверить его со своего ноутбука.

Ошибка, которую вы показываете в ОП, упоминается здесь, и если вы можете поделиться .osm файл, который я могу проверить, прочитав его.

person agila    schedule 25.05.2020
comment
Представляете, почему ни одна из команд оболочки не работает? Мне нужно сделать это вручную... - person Christoph; 26.05.2020
comment
Вы имеете в виду shell("7z e muenchen.osm.gz")? Вы используете окна? - person agila; 26.05.2020
comment
Да, извините - опечатка... Я исправил свой Edit. И да, я на Windows. - person Christoph; 26.05.2020
comment
Я думаю, что вы должны добавить только 7z к пути Windows. Я следовал инструкциям здесь< /а> - person agila; 26.05.2020
comment
Странная проблема. Большое спасибо. В случае, если это новый вопрос - он все еще не работает... - person Christoph; 26.05.2020
comment
Большой!!! R.utils::gunzip(filename = "muenchen.osm.gz") работает :-) Большое спасибо - person Christoph; 26.05.2020
comment
Привет! Я не уверен, как это работает на SO, но если вы все еще заинтересованы в теме, я отредактировал ответ и отправил вам сообщение в чате. - person agila; 26.05.2020
comment
Привет, большое спасибо! Отличная книга - не знала! ... Мне нужно сначала прочитать. Если будут вопросы, дам ссылку ;-) - person Christoph; 26.05.2020