0

我怎样才能有效地将 osmar 对象分成几个部分并将它们重新组合回来?

library(osmar)
src <- osmsource_api(url = "https://api.openstreetmap.org/api/0.6/")
bbox <- center_bbox(11.575278, 48.137222, 1000, 1000)
object <- get_osm(bbox, src)

根据班级,这是一个“osmar”“列表”。

class(object)
[1] "osmar" "list" 

所以我试图用以下方法来划分它:

 divide_a_vector_into_chunks <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE))
 div_osmar<-divide_a_vector_into_chunks(object,2)

它创建一个列表:

$`1`
$`1`$nodes
osmar$nodes object
1690 nodes, 1210 tags 

         lat     lon
min 48.13385 11.5675
max 48.14264 11.5800

$`1`$ways
osmar$ways object
239 ways, 1306 tags, 2144 refs 


$`2`
$`2`$relations
osmar$relations object
136 relations, 1327 tags, 958 node_refs, 8034 way_refs 

但是我不能像处理 osmar 对象那样处理这个列表。此外,osmar 包支持将 osmar 对象与

o1 <- subset(object, node_ids = find(object, node(tags(v == "Marienplatz"))))
o2 <- subset(object, ids = find_down(object, way(c(96619179, 105071000))))
o1
o2
c(o1, o2)

所以应该可以分割一个 osmar 对象并再次组合它。

4

1 回答 1

0

我找到了一个解决方案,但我不知道这个解决方案的效率如何:

node_ids_vector<-object$nodes$attrs$id

node_ids_vector_devided<-divide_a_vector_into_chunks(node_ids_vector,2)
o1<-subset(object,ids=find_up(object,node(node_ids_vector_devided$`1`)))
o2<-subset(object,ids=find_up(object,node(node_ids_vector_devided$`2`)))

c(o1, o2)
于 2021-03-20T19:01:40.123 回答