mapbox / supermercado

Supercharger for mercantile
MIT License
127 stars 21 forks source link

_feature_extrema() in burntiles.py does not handle multigeometry types #47

Open iboates opened 3 years ago

iboates commented 3 years ago

Hi,

I don't actually know much about this library but I had a problem when using robosat where multipolygons were causing a breakdown

I eventually tracked it down to this function in burntiles.py. A multipolygon causes it to crash out due to the case not being handled in the if/elif construct and there is no else statement.

Like I said I don't know much about this library so I don't know if it is possible to make this handle multigeometry types. If not then maybe it should throw a more descriptive error.

Cheers

philvarner commented 3 years ago

I encountered this same issue.

  File "/Users/philvarner/code/titiler/venv/lib/python3.8/site-packages/supermercado/burntiles.py", line 78, in burn
    bounds = find_extrema(polys)
  File "/Users/philvarner/code/titiler/venv/lib/python3.8/site-packages/supermercado/burntiles.py", line 44, in find_extrema
    *[_feature_extrema(f["geometry"]) for f in features]
  File "/Users/philvarner/code/titiler/venv/lib/python3.8/site-packages/supermercado/burntiles.py", line 44, in <listcomp>
    *[_feature_extrema(f["geometry"]) for f in features]
  File "/Users/philvarner/code/titiler/venv/lib/python3.8/site-packages/supermercado/burntiles.py", line 38, in _feature_extrema
    return min(x), min(y), max(x), max(y)
UnboundLocalError: local variable 'x' referenced before assignment

even if MultiPolygon can't be supported here, it would be nice to have an else that raises a clear exception, rather than this incidental one.

mob5566 commented 2 years ago

Hi folks,

I tried to solve this problem with pull request #50 (supporting MultiPolygon), and it works for me.

You may try that commit too.