In [1]:
# Allow to import without installing
import sys
sys.path.insert(0, "..")
If you have a reasonable amount of ram, then it's possible to load quite big XML files fully into memory and to general python dictionaries from them. These can then be saved out in compressed pickled format.
This is a low-tech, non-portable solution for subsequently quickly extracting data, but it's also quick and easy.
In [2]:
import osmdigest.pythonify as pythonify
import os
basedir = os.path.join("/media/disk", "OSM_Data")
filename = "illinois-latest.osm.xz"
In [3]:
tags = pythonify.Tags(os.path.join(basedir, filename))
In [6]:
pythonify.pickle(tags, "illinois_tags.pic.xz")
os.stat("illinois_tags.pic.xz").st_size / 1024**2
Out[6]:
In [9]:
tags.nodes_from_key("name")[:5]
Out[9]:
In [10]:
tags_by_id = pythonify.TagsById(tags)
In [11]:
tags_by_id.node(701092)
Out[11]:
In [3]:
tags = pythonify.unpickle("illinois_tags.pic.xz")
In [4]:
list(tags.all_relation_tag_keys)[:5]
Out[4]:
In [6]:
tags.relations_from_key("tower:type")
Out[6]:
In [7]:
pythonify.TagsById(tags).relation(5813084)
Out[7]:
In [10]:
nodes = pythonify.Nodes(os.path.join(basedir, filename))
In [11]:
pythonify.pickle(nodes, "illinois_nodes.pic.xz")
os.stat("illinois_nodes.pic.xz").st_size / 1024**2
Out[11]:
In [3]:
ways = pythonify.Ways(os.path.join(basedir, filename))
In [5]:
pythonify.pickle(ways, "illinois_ways.pic.xz")
os.stat("illinois_ways.pic.xz").st_size / 1024**2
Out[5]:
In [8]:
relations = pythonify.Relations(os.path.join(basedir, filename))
In [9]:
pythonify.pickle(relations, "illinois_relations.pic.xz")
os.stat("illinois_relations.pic.xz").st_size / 1024**2
Out[9]:
In [3]:
nodes = pythonify.unpickle("illinois_nodes.pic.xz")
In [4]:
nodes = pythonify.NodesPacked.from_Nodes(nodes)
In [7]:
i = iter(nodes)
for j in range(10):
print(next(i))
In [8]:
nodes[700732]
Out[8]:
In [9]:
pythonify.pickle(nodes, "illinois_nodes_packed.pic.xz")
os.stat("illinois_nodes_packed.pic.xz").st_size / 1024**2
Out[9]:
In [11]:
ways = pythonify.unpickle("illinois_ways.pic.xz")
In [15]:
print(next(iter(ways)))
In [17]:
nodes[20326165], nodes[33235915]
Out[17]:
In [2]:
import osmdigest.pythonify as pythonify
import os
basedir = os.path.join("/media/disk", "OSM_Data")
filename = "california-latest.osm.xz"
In [ ]:
pythonify.pythonify_and_pickle(os.path.join(basedir, filename), os.path.join(basedir, "california"))