`E <-` (` * tmp * `, value =` * vtmp * `): неверное индексирование, построение подмножества объекта OSM. Изменить: подмножество не создает истинное подмножество - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь создать небольшое подмножество большего объекта 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)

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

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

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

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

gr_muc <- as_igraph(muc)

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

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

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

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

    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 содержит идентификаторы способов.

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

1 Ответ

0 голосов
/ 11 июля 2020

Сказать это по-немецки: 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 

Надеюсь, это поможет. Ура.

...