werner2101 / python-osm

OpenStreetMap library for python
GNU General Public License v3.0
28 stars 15 forks source link

multipolygons with multilinestring boundary segments don't work #12

Open werner2101 opened 11 years ago

werner2101 commented 11 years ago

To reproduce:

python -m osm.multipolygon -r 1111111

Error:

Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/werner/osm/src/python-osm/src/osm/multipolygon.py", line 330, in <module>
mp = multipolygon(osmobj.relations[int(relation)])
File "/home/werner/osm/src/python-osm/src/osm/multipolygon.py", line 13, in __init__
self.read_relation(self.relation)
File "/home/werner/osm/src/python-osm/src/osm/multipolygon.py", line 19, in read_relation
members = self.recursive_members(relation)
File "/home/werner/osm/src/python-osm/src/osm/multipolygon.py", line 144, in recursive_members
for m in current_relation.members:
File "osm/pyosm.py", line 168, in __getattr__
return self.osm_parent.get_members(self.__members)
File "osm/pyosm.py", line 228, in get_members
obj = self.ways[mid]
KeyError: 28692993

see also http://www.openstreetmap.org/browse/relation/1111111

werner2101 commented 11 years ago

In src/osm/multipolygon:

    elif relation:
        osmfile = urllib.urlopen('%s/relation/%s/full' %(API,relation))
        osmobj = pyosm.OSMXMLFile(osmfile)

This command does not download the member elements of subrelations. Thus we run into the missing element error / KeyError.