为什么这两种方法在 OSM 对象中产生不同数量的方式?
Why do these 2 approaches produce different amount of ways in OSM Object?
为什么这两种方法会产生不同数量的方法?
按照定义方式:
定义了一种方式:
A way is an ordered list of nodes which normally also has at least one
tag or is included within a Relation. A way can have between 2 and
2,000 nodes, although it's possible that faulty ways with zero or a
single node exist. A way can be open or closed. A closed way is one
whose last node on the way is also the first on that way. A closed way
may be interpreted either as a closed polyline, or an area, or both.
节点定义为:
Nodes can be used to define standalone point features, but are more often used to define the shape or "path" of a way.
<node id="25496583" lat="51.5173639" lon="-0.140043" version="1" changeset="203496" user="80n" uid="1238" visible="true" timestamp="2007-01-28T11:40:26Z">
<tag k="highway" v="traffic_signals"/>
因此,如果我首先根据 key == highway 从 osm 对象中提取所有路径,然后使用函数 find_down 查找连接到方式:
find_down finds all elements downwards the hierarchy:
node -> node way -> way + node relation -> relation + way + node
highway_subset_v1和highway_subset_v2至少应该产生相同数量的方式。
结果却不同
library("osmar")
src <- osmsource_api(url = "https://api.openstreetmap.org/api/0.6/")
muc_bbox <- center_bbox(11.575278, 48.137222, 1000, 1000)
muc <- get_osm(muc_bbox, src)
highway_subset_v1 <- subset(muc, way_ids = find(muc, way(tags(k == "highway"))))
highway_subset_v1 <- find(highway_subset_v1, way(tags(k == "name")))
highway_subset_v1 <- find_down(muc, way(highway_subset_v1))
highway_subset_v1 <- subset(muc, ids = highway_subset_v1)
highway_subset_v1
奥斯马尔对象
2678个节点,504种方式,0种关系
在这种方法中,我 select 具有 k==higway 的所有节点和 find_up 连接到这些节点的所有路径。
highway_ids_v2 <- find(muc, node(tags(k == "highway")))
highway_subset_ids_v2 <- osmar::find_up(muc, osmar::node(highway_ids_v2))
highway_subset_v2 <- subset(muc, ids = highway_subset_ids_v2)
highway_subset_v2
奥斯马尔对象
136个节点,113种方式,23种关系
find_up finds all elements upwards the hierarchy:
node -> node + way + relation way -> way + relation
relation -> relation
我是不是漏掉了什么?
非常感谢您,
此致,
安德烈亚斯
在我看来...
- v1 将找到标记为
highway=*
的方法。
- v2 将找到包含标记为
highway=*
的节点的方法。
大多数用于定义标记为 highway=*
的道路形状的节点将 而不是 本身带有 highway=*
标记,事实上许多道路根本不会包含这样的节点。 (标记为 highway=*
的节点示例包括十字路口、停车标志、路灯和 mixed bag of various other features。)
所以这些确实是非常不同的集合,没有理由假设结果是相同的。特别是,find_down 会给你 all 节点你传递的方式。它不应该记住你应用于方式的 key-based 过滤器和也将其应用于节点。 (对于 v2 中的 find_up,反之亦然。)
为什么这两种方法会产生不同数量的方法?
按照定义方式:
定义了一种方式:
A way is an ordered list of nodes which normally also has at least one tag or is included within a Relation. A way can have between 2 and 2,000 nodes, although it's possible that faulty ways with zero or a single node exist. A way can be open or closed. A closed way is one whose last node on the way is also the first on that way. A closed way may be interpreted either as a closed polyline, or an area, or both.
节点定义为:
Nodes can be used to define standalone point features, but are more often used to define the shape or "path" of a way.
<node id="25496583" lat="51.5173639" lon="-0.140043" version="1" changeset="203496" user="80n" uid="1238" visible="true" timestamp="2007-01-28T11:40:26Z">
<tag k="highway" v="traffic_signals"/>
因此,如果我首先根据 key == highway 从 osm 对象中提取所有路径,然后使用函数 find_down 查找连接到方式:
find_down finds all elements downwards the hierarchy:
node -> node way -> way + node relation -> relation + way + node
highway_subset_v1和highway_subset_v2至少应该产生相同数量的方式。
结果却不同
library("osmar")
src <- osmsource_api(url = "https://api.openstreetmap.org/api/0.6/")
muc_bbox <- center_bbox(11.575278, 48.137222, 1000, 1000)
muc <- get_osm(muc_bbox, src)
highway_subset_v1 <- subset(muc, way_ids = find(muc, way(tags(k == "highway"))))
highway_subset_v1 <- find(highway_subset_v1, way(tags(k == "name")))
highway_subset_v1 <- find_down(muc, way(highway_subset_v1))
highway_subset_v1 <- subset(muc, ids = highway_subset_v1)
highway_subset_v1 奥斯马尔对象 2678个节点,504种方式,0种关系
在这种方法中,我 select 具有 k==higway 的所有节点和 find_up 连接到这些节点的所有路径。
highway_ids_v2 <- find(muc, node(tags(k == "highway")))
highway_subset_ids_v2 <- osmar::find_up(muc, osmar::node(highway_ids_v2))
highway_subset_v2 <- subset(muc, ids = highway_subset_ids_v2)
highway_subset_v2 奥斯马尔对象 136个节点,113种方式,23种关系
find_up finds all elements upwards the hierarchy:
node -> node + way + relation way -> way + relation relation -> relation
我是不是漏掉了什么?
非常感谢您,
此致, 安德烈亚斯
在我看来...
- v1 将找到标记为
highway=*
的方法。 - v2 将找到包含标记为
highway=*
的节点的方法。
大多数用于定义标记为 highway=*
的道路形状的节点将 而不是 本身带有 highway=*
标记,事实上许多道路根本不会包含这样的节点。 (标记为 highway=*
的节点示例包括十字路口、停车标志、路灯和 mixed bag of various other features。)
所以这些确实是非常不同的集合,没有理由假设结果是相同的。特别是,find_down 会给你 all 节点你传递的方式。它不应该记住你应用于方式的 key-based 过滤器和也将其应用于节点。 (对于 v2 中的 find_up,反之亦然。)