`E<-`(`*tmp*`, value = `*vtmp*`) :无效索引,构建 OSM 对象的子集。编辑:subset 不创建真正的子集
`E<-`(`*tmp*`, value = `*vtmp*`) : invalid indexing, building a subset of an OSM Object. Edit: subset does not create a true subset
我正在尝试构建一个更大的 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 的纬度和经度值范围内的节点的节点 ID。
现在我想构建这个新子集的 n igraph:
gr_muc <- as_igraph(muc)
并得到这个错误:
E<-`(`*tmp*`, value = `*vtmp*`) : invalid indexing
我犯了什么错误?
在我子集之前,我得到了关于 muc 对象的信息
dim(muc)
nodes ways relations
360451 59490 3
在子集之后我得到了 0 种方式和关系。
我认为这可能是错误的...我如何将所有内容子集化?
即使我在 subset_ids
上使用 find_up
函数后,我仍然没有得到任何 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
包含方法的 ID。
此致,
安德烈亚斯
用德语说:alter das wirst du nicht glauben!
所以问题是我调用函数的方式 subset
可以(至少在我的工作环境中)使用参数 ids
调用函数 subset
而没有.. 可能是因为此函数已过载。
这是可能的:
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
希望对您有所帮助。
干杯。
我正在尝试构建一个更大的 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 的纬度和经度值范围内的节点的节点 ID。
现在我想构建这个新子集的 n igraph:
gr_muc <- as_igraph(muc)
并得到这个错误:
E<-`(`*tmp*`, value = `*vtmp*`) : invalid indexing
我犯了什么错误?
在我子集之前,我得到了关于 muc 对象的信息
dim(muc)
nodes ways relations
360451 59490 3
在子集之后我得到了 0 种方式和关系。 我认为这可能是错误的...我如何将所有内容子集化?
即使我在 subset_ids
上使用 find_up
函数后,我仍然没有得到任何 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
包含方法的 ID。
此致, 安德烈亚斯
用德语说:alter das wirst du nicht glauben!
所以问题是我调用函数的方式 subset
可以(至少在我的工作环境中)使用参数 ids
调用函数 subset
而没有.. 可能是因为此函数已过载。
这是可能的:
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
希望对您有所帮助。 干杯。