Этот вопрос касается пакета pyosmium
специально. Мне просто интересно, возможна ли следующая функциональность, а если нет, то как ее можно реализовать.
Я хочу передавать / выдавать определенные атрибуты экземпляра, а не обновлять их в памяти.
В настоящее время мы можем сделать следующее:
class Handler(osmium.SimpleHandler):
def __init__(self):
osmium.SimpleHandler.__init__(self)
self.edge_and_nodes = []
def way(self, w):
self.edge_and_nodes.append({'edge_id': w.id,
'nodes': [w.nodes[i].ref for i in range(len(w.nodes))]})
h = Handler()
h.apply_file("test.osm.pbf")
print("Edges and their connected nodes: {}".format(h.edge_and_nodes))
Однако при работе с большими регионами это не масштабируется.
Я хотел бы получить способ получения словарного объекта, который включает WayIds и связанные NodeIds (а также теги и т. Д.) Для каждого WayObject. Это возможно?
Я ищу что-то вроде этого:
class StreamHandler(osmium.SimpleHandler):
def __init__(self):
osmium.SimpleHandler.__init__(self)
self.edge_and_nodes = []
def way(self, w):
yield {'edge_id': w.id,
'nodes': [w.nodes[i].ref for i in range(len(w.nodes))]}
h = StreamHandler()
h.apply_file("test.osm.pbf")
for row in h.way(w):
print(row)
Но я не уверен, как передать параметр w
(WayObject), так как это, кажется, решается внутренне с помощью apply_file()
метод (и я не могу найти исходный код для этого метода).
Спасибо!
Редактировать: исходный код можно найти здесь