osm2geojson icon indicating copy to clipboard operation
osm2geojson copied to clipboard

Failure to convert relation without outer ring defined to shape

Open sgoodm opened this issue 1 year ago • 6 comments

A relation representing a simple polygon, but without an outer ring explicitly defined will fail. See below example for relation https://www.openstreetmap.org/relation/6127139

import osm2geojson

resp = osm2geojson.overpass_call('''
    [out:json];
    relation(6127139);
    out;
    >;
    out skel qt;
''')
osm2geojson.json2shapes(resp)

Breaking code is tied to https://github.com/aspectumapp/osm2geojson/blob/master/osm2geojson/main.py#L557 which will return None in the case where no outer ring has been defined for the relation.

Possibly tied to #38 and #33. Breaking changes implemented in 024c06b099bc41a0c734d8435c048116c2cc3055

Minimal working solution (for my use case, but may have broader undesirable implications) involves inserting below code here: https://github.com/aspectumapp/osm2geojson/blob/master/osm2geojson/main.py#L547

    if len(groups) == 1:
        return groups[0][1]

sgoodm avatar Apr 27 '23 16:04 sgoodm

@sgoodm Hello. Sorry for late response. I tested your example with latest version (0.2.4) and I don't see any problem with that relation. image

rapkin avatar May 09 '23 20:05 rapkin

I think @jacobwhall inadvertently broke this failing example by fixing the OSM feature, haha. One of us will find another feature that fails and update shortly

sgoodm avatar May 09 '23 20:05 sgoodm

These relations should cause same issue (thanks for finding them @jacobwhall)

https://www.openstreetmap.org/relation/286937 https://www.openstreetmap.org/relation/14395965 https://www.openstreetmap.org/relation/6663864 https://www.openstreetmap.org/relation/2783468 https://www.openstreetmap.org/relation/2783471

sgoodm avatar May 09 '23 20:05 sgoodm

What I did to fix @sgoodm's initial example was add "outer" roles to some of the members of the relation. While multipolygon relation members are supposed to have explicit roles, it may be worth our while to try and parse them anyways with osm2geojson, as this error is common on OpenStreetMap. Forgive me if this is already handled as I haven't reviewed the relevant code, but that appears to have been the hangup.

jacobwhall avatar May 09 '23 20:05 jacobwhall

@sgoodm Are you sure that your example doesn't work? I just tried 286937 and it works fine. image

rapkin avatar May 09 '23 20:05 rapkin

@jacobwhall so do you think it's a good idea to treat ways as 'outer' by default?

rapkin avatar May 09 '23 21:05 rapkin