Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shapely make_valid() may return a GeometryCollection #166

Open
StijnCaerts opened this issue Mar 20, 2024 · 0 comments
Open

Shapely make_valid() may return a GeometryCollection #166

StijnCaerts opened this issue Mar 20, 2024 · 0 comments

Comments

@StijnCaerts
Copy link

shapely.validation.make_valid() may return a GeometryCollection, which is not compatible with antimeridian.bbox.
This is for example the case when building the STAC metadata for S2A_MSIL1C_20210123T152641_N0500_R025_T18NWM_20230521T234122.SAFE.

Fixing the original geometry POLYGON ((-74.00787 6.104838, -74.00748 6.332093, -75.00018 6.333042, -75.00018 6.321833, -74.83688 6.289793, -74.836975 6.289361, -74.837006 6.28925, -74.83478 6.288812, -74.83481 6.288708, -74.83545 6.285831, -74.61459 6.239622, -74.61401 6.242212, -74.61401 6.242216, -74.61401 6.242214, -74.61398 6.242372, -74.416626 6.199568, -74.41672 6.199167, -74.41678 6.198875, -74.4147 6.198423, -74.41507 6.196748, -74.19534 6.147027, -74.19519 6.147696, -74.194885 6.149019, -74.194885 6.149018, -74.194885 6.149029, -74.194855 6.149247, -74.00787 6.104838)) results in this geometry collection:
GEOMETRYCOLLECTION (POLYGON ((-74.61401 6.242212, -74.61459 6.239622, -74.83545 6.285831, -74.83481 6.288708, -74.83478 6.288812, -74.837006 6.28925, -74.836975 6.289361, -74.83688 6.289793, -75.00018 6.321833, -75.00018 6.333042, -74.00748 6.332093, -74.00787 6.104838, -74.194855 6.149247, -74.194885 6.149029, -74.194885 6.149019, -74.19519 6.147696, -74.19534 6.147027, -74.41507 6.196748, -74.4147 6.198423, -74.41678 6.198875, -74.41672 6.199167, -74.416626 6.199568, -74.61398 6.242372, -74.61401 6.242214, -74.61401 6.242212)), MULTILINESTRING ((-74.61401 6.242214, -74.61401 6.242216), (-74.194885 6.149019, -74.194885 6.149018)))

This causes the following error:

$ stac sentinel2 create-item S2A_MSIL1C_20210123T152641_N0500_R025_T18NWM_20230521T234122.SAFE /tmp/

./venv/lib/python3.10/site-packages/antimeridian/_implementation.py:391: FixWindingWarning: The exterior ring of this shape is wound clockwise. Since this is a common error in real-world geometries, this package is reversing the exterior coordinates of the input shape before running its algorithm. If you know that your input shape is correct (i.e. if your data encompasses both poles), pass `fix_winding=False`.
  FixWindingWarning.warn()
Traceback (most recent call last):
  File "./venv/bin/stac", line 8, in <module>
    sys.exit(run_cli())
  File "./venv/lib/python3.10/site-packages/stactools/cli/cli.py", line 37, in run_cli
    cli(prog_name="stac")
  File "./venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "./venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "./venv/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "./venv/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "./venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "./venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "./venv/lib/python3.10/site-packages/stactools/sentinel2/commands.py", line 57, in create_item_command
    item = create_item(
  File "./venv/lib/python3.10/site-packages/stactools/sentinel2/stac.py", line 147, in create_item
    bbox = [round(v, COORD_ROUNDING) for v in antimeridian.bbox(geometry)]
  File "./venv/lib/python3.10/site-packages/antimeridian/_implementation.py", line 645, in bbox
    raise ValueError(
ValueError: unsupported geom_type for bbox calculation: GeometryCollection

A possible solution would be to extract the Polygon or MultiPolygon geometry object if the result of make_valid() is a GeometryCollection.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant