`E‹ -` (`* tmp *`, value = `* vtmp *`): неверное индексирование, построение подмножества объекта OSM. Изменить: подмножество не создает истинное подмножество

Я пытаюсь создать небольшое подмножество более крупного объекта osm:

Сначала я загружаю в память более крупный объект osm:

muc_bbox <- center_bbox(mid_point[1], mid_point[2], dist * 2, dist * 2)
src <- osmsource_osmosis(file = paste(maps_pfad,"streets_bayern.osm",sep = ""))
muc <- get_osm(muc_bbox, src)

затем я создаю подмножество на основе координат узлов:

subset_bbox <- center_bbox(mid_point[1], mid_point[2], dist, dist)

может быть, мне нужно использовать здесь поиск вместо подмножества?

muc_subset_df <- subset(muc$nodes$attrs, lon > subset_bbox[[1]] & lon < subset_bbox[[3]] 
&lat > subset_bbox[[2]] & lat < subset_bbox[[4]])

subset_ids <- muc_subset_df$id
muc_subset <- subset(muc, node_ids = subset_ids)

muc <- muc_subset

поэтому в основном я ищу все идентификаторы узлов, которые находятся в диапазоне значений широты и долготы bbox.

Теперь я хочу построить график этого нового подмножества:

gr_muc <- as_igraph(muc)

И получите эту ошибку:

E<-`(`*tmp*`, value = `*vtmp*`) : invalid indexing

Какую ошибку я делаю?

Прежде чем я подмножество, я получаю эту информацию об объекте muc

    dim(muc)
    nodes      ways relations 
   360451     59490         3 

После подмножества я получаю 0 способов и отношений. Я думаю, что это, вероятно, ошибка ... как бы мне все подгруппировать?

Даже после того, как я использую функцию find_up на subset_ids, я все еще не получаю relation_ids.

subset_ids <- muc_subset_df$id
osm_subset_ids <- find_up(muc, node(subset_ids))
muc_subset <- subset(muc,  osm_subset_ids)

Что мне не хватает?

РЕДАКТИРОВАТЬ: после дальнейшего исследования кажется, что

muc_subset <- subset(muc,  osm_subset_ids)

Не создает истинного подмножества объекта osm. Он создает только объект, содержащий узлы, но без путей или отношений. Я подозреваю, что это проблема, но до сих пор не знаю, как ее решить.

> muc_subset
osmar object
80165 nodes, 0 ways, 0 relations 
> muc
osmar object
80165 nodes, 14161 ways, 0 relations 

И все же osm_subset_ids содержит идентификаторы путей.

С уважением, Андреас.


person Andreas    schedule 11.07.2020    source источник


Ответы (1)


Сказать это по-немецки: alter das wirst du nicht glauben!

Итак, проблема заключалась в том, как я назвал функцию subset

Возможно (по крайней мере, в моем рабочем env) вызвать функцию subset с параметром ids и без ... вероятно, потому что эта функция перегружена.

это возможно:

muc_subset <- subset(muc,  ids = osm_subset_ids)

как это:

muc_subset <- subset(muc,  osm_subset_ids)

Оба вызова будут выполнены без ошибок. разница в результате:

osmar object
0 nodes, 0 ways, 0 relations 

VS

osmar object
80165 nodes, 14161 ways, 0 relations 

Я надеюсь, что это помогает. Ваше здоровье.

person Andreas    schedule 11.07.2020