Last active
February 1, 2016 15:18
-
-
Save mvexel/93197b32a41d181104b3 to your computer and use it in GitHub Desktop.
boundary_checker.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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