Как извлечь данные 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 в файле (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: ...
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))
Создано 2020-05-26 пакетом REPEX (v0.3.0)
Вам также следует проверить виньетки osmdata, если вы хотите создавать свои собственные запросы для загрузки данных из Open Street Map.
Ссылки
Если вы хотите проверить несколько ссылок на sf
Я хотел бы предложить чтение виньетки (см) Статьи пакета и главы с 1 по 7 Geocomputation с R. Если вы хотите проверить, как использоватьosmdata
чтобы создать свои собственные запросы к Open Street Map, я предлагаю прочитать виньетки. Между этими двумя подходами есть несколько различий, но вы можете прочитать их в виньетках.
AFAIK предлагаемый способ (см. Здесь, здесь и здесь) для чтения.osm
данные в R с помощью sf
равно 1) преобразовать .osm
данные в .gpkg
формат (вы можете использовать sf::gdal_utils
) и 2) прочтите файл.gpkg. Если вы можете поделиться файлом.osm, я могу проверить его со своего ноутбука.
Ошибка, что вы показываете в ОП упоминается здесь, и если вы можете поделиться.osm
файл, я могу проверить его чтение.