我正在为导航软件准备一个配置文件。我需要一个and motorway_junction点的列表,并列出它们的名称、里程碑(如果有)和出口(如果有)。
我想,用awk是有可能的。
它应该是一个如下的输出结构:
IDX,X,Y,TYPE,SPEED,DirType,Direction // $TYPE=“|milestone| name | exit_to“openstreetmap输入文件中的示例节点有一个结构:
<node id="146994270" version="12" timestamp="2016-09-13T14:08:42Z" lat="50.4589679" lon="18.2668417">
<tag k="name" v="Kędzierzyn-Koźle"/>
<tag k="highway" v="motorway_junction"/>
<tag k="milestone" v="272"/>
</node>脚本必须搜索带有标记的节点。
<tag k="highway" v="motorway_junction"/>如果找到,请在此节点中读取以下值:
Description
→Y
F 216
提示:并非所有motorway_junction节点都有值里程碑、名称或exit_to
脚本应该有以下变量
这种情况下的“愿望输出”:
0,18.2668417,50.4589679,146994270,60,1,1 // $146994270=“|272| Kędzierzyn-Koźle“exit_to的另一个例子
"Note: I'm not really sure where SPEED, $DirType, and $Driection are supposed to come from?"只需手动操作,就需要这些值,但不会显示值。
“而且,在您的预期输出中,您不使用exit_to值。”在现实中是motorway_junction点本身,但有时在这一点上是更多的出口。一个更好的例子:
<node id="254705885" version="18" timestamp="2018-10-02T15:30:49Z" lat="53.3416624" lon="14.4562602">
<tag k="name" v="Szczecin Zachód"/>
<tag k="exit_to" v="Kołbaskowo;Szczecin;Rosówek;Schwedt"/>
<tag k="highway" v="motorway_junction"/>
</node>exit_to的预期输出(但这里是里程碑标记“空”)
0,14.4562602,53.3416624,254705885,60,1,1 // $254705885=“Szczecin Zachód | Kołbaskowo;Szczecin;Rosówek;Schwedt“稍后,在第二步中,文本变量作为屏蔽:https://vk.com/@bydmapl-motorwayjunction上的格式化文本出现。
发布于 2021-03-03 10:00:26
这不是awk,而是您处理的数据看起来与HTML解析器(如BeautifulSoup )完美匹配。
这是我对你用Python3写的任务的看法。
注意:我不太确定SPEED、$DirType和$Driection应该从哪里来?另外,在您的预期输出中,您不使用exit_to值。
from bs4 import BeautifulSoup
sample = """<node id="146994270" version="12" timestamp="2016-09-13T14:08:42Z" lat="50.4589679" lon="18.2668417">
<tag k="name" v="Kędzierzyn-Koźle"/>
<tag k="highway" v="motorway_junction"/>
<tag k="milestone" v="272"/>
</node>"""
nodes = BeautifulSoup(sample, "html.parser").find_all("node")
speed, dir_type, direction = 60, 1, 1
for idx, node in enumerate(nodes):
_id, lat, lon = node["id"], node["lat"], node["lon"]
name, exit_to, milestone = [v["v"] for v in node.find_all("tag")]
template_left = f"{idx},{lon},{lat},{_id},{speed},{dir_type},{direction}"
template_right = f"${_id}='|{milestone}| {name}'"
print(f"{template_left} // {template_right}")这些指纹:
0,18.2668417,50.4589679,146994270,60,1,1 // $146994270='|272| Kędzierzyn-Koźle'https://stackoverflow.com/questions/66454227
复制相似问题