Skip to content

Instantly share code, notes, and snippets.

@mvexel
Last active February 1, 2016 15:18
Show Gist options
  • Save mvexel/93197b32a41d181104b3 to your computer and use it in GitHub Desktop.
Save mvexel/93197b32a41d181104b3 to your computer and use it in GitHub Desktop.
boundary_checker.py
import osmium
class BoundaryHandler(osmium.SimpleHandler):
def __init__(self):
osmium.SimpleHandler.__init__(self)
self.ways_admin_boundaries = {}
def is_admin_boundary(self, n):
return "admin_level" in n.tags
def member_has_admin_level_tag(self, member):
return member.type == "w" and member.ref in self.ways_admin_boundaries
def way_has_higher_admin_level_than_parent(self, way_id, relation):
return int(relation.tags['admin_level']) < int(self.ways_admin_boundaries[way_id])
def way(self, n):
if self.is_admin_boundary(n):
self.ways_admin_boundaries[n.id] = n.tags['admin_level']
def relation(self, n):
if self.is_admin_boundary(n):
for member in n.members:
if self.member_has_admin_level_tag(member) and self.way_has_higher_admin_level_than_parent(member.ref, n):
print("way {} has admin_level {} but has parent relation {} with admin level {}".format(
member.ref,
self.ways_admin_boundaries[member.ref],
n.id,
n.tags['admin_level']))
# def area(self, n):
# print(dir(n))
# if not n.from_way():
# print("area from relation")
if __name__ == '__main__':
h = BoundaryHandler()
h.apply_file("/Users/martijnv/osm/planet/mexico-latest.osm.pbf", locations=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment