如何使用osmar提取osm数据
How to extract osm data using osmar
类似于 this question 我从 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: No such file or directory
我运行 RStudio作为管理员,我安装了gzip,但是还是不行。有任何想法吗?我在 windows.
(例子来自here)
编辑:
我的路径看起来像 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
我按照 here 的说明进行操作并设置
set PATH=%PATH%;C:\Program Files-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: ...
以下代码应该可以将 muenchen.osm.gz
文件读入 R。
# 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))
由 reprex package (v0.3.0)
于 2020-05-26 创建
如果您想构建自己的查询以从 Open Street Map 下载数据,您还应该检查 osmdata vignettes。
参考资料
如果您想查看一些关于 sf
的参考资料,我建议您阅读 vignettes (see the Articles) of the package and Chapters 1 to 7 of Geocomputation with R. If you want to check how to use osmdata
to create your own queries to Open Street Map I suggest reading the vignettes。这两种方法之间存在一些差异,但您可以在小插图中阅读它们。
AFAIK 使用 sf
将 .osm
数据读入 R 的建议方法(参见 here, here and here)是 1) 将 .osm
数据转换为 .gpkg
格式(您可以使用 sf::gdal_utils
)和 2) 读取 .gpkg 文件。如果您可以共享 .osm 文件,我可以从我的笔记本电脑上查看它。
提到了您在 OP 中显示的错误 here,如果您可以共享 .osm
文件,我可以测试阅读它。
类似于 this question 我从 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: No such file or directory
我运行 RStudio作为管理员,我安装了gzip,但是还是不行。有任何想法吗?我在 windows.
(例子来自here)
编辑:
我的路径看起来像 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
我按照 here 的说明进行操作并设置
set PATH=%PATH%;C:\Program Files-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: ...
以下代码应该可以将 muenchen.osm.gz
文件读入 R。
# 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))
由 reprex package (v0.3.0)
于 2020-05-26 创建如果您想构建自己的查询以从 Open Street Map 下载数据,您还应该检查 osmdata vignettes。
参考资料
如果您想查看一些关于 sf
的参考资料,我建议您阅读 vignettes (see the Articles) of the package and Chapters 1 to 7 of Geocomputation with R. If you want to check how to use osmdata
to create your own queries to Open Street Map I suggest reading the vignettes。这两种方法之间存在一些差异,但您可以在小插图中阅读它们。
AFAIK 使用 sf
将 .osm
数据读入 R 的建议方法(参见 here, here and here)是 1) 将 .osm
数据转换为 .gpkg
格式(您可以使用 sf::gdal_utils
)和 2) 读取 .gpkg 文件。如果您可以共享 .osm 文件,我可以从我的笔记本电脑上查看它。
提到了您在 OP 中显示的错误 here,如果您可以共享 .osm
文件,我可以测试阅读它。