-
Notifications
You must be signed in to change notification settings - Fork 9
fix crs on polygon clipping #309
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
base: main
Are you sure you want to change the base?
Conversation
|
Ugh it's not this simple...needs extents too. We should just call tuples and normalize everything when pushing to the array. |
Extend CRS handling from intersection to union and difference operations. Use `mutual_crs` to preserve coordinate reference system information when creating result polygons in non-crossing cases, hole handling, and multipolygon operations. Fixes type mismatches when clipping geometries with different CRS configurations.
30bf6b0 to
de4679e
Compare
…g conversion Implements trait-based dispatch in `_linearring` helper to convert LineString geometries (e.g., from ArchGDAL) to LinearRing while preserving CRS metadata. This ensures compatibility with all GeoInterface-compatible geometry types. The function uses trait dispatch pattern: - Returns LinearRing geometries as-is - Converts LineString to LinearRing with CRS preservation - Includes concrete type specializations for GI wrappers (optimization) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Adds missing CRS parameter propagation in `intersection.jl` to match the pattern already used in union and difference operations. This fixes type conversion errors when using ArchGDAL geometries in intersection operations. Changes: - Pass `crs` parameter to `_trace_polynodes()` call (line 87) - Wrap `tuples()` results with `_linearring()` in non-crossing cases (lines 91, 93) With this fix, all 72 intersection and union operations now succeed across GeoInterface, ArchGDAL, and LibGEOS geometry combinations. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
| function mutual_crs(a, b) | ||
| if GI.crs(a) == GI.crs(b) | ||
| return GI.crs(a) | ||
| elseif GI.crs(a) == nothing && GI.crs(b) != nothing |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
isnothing ?
| This is tolerant of `nothing` values in one of a or b, it assumes that they are the same crs. | ||
| """ | ||
| function mutual_crs(a, b) | ||
| if GI.crs(a) == GI.crs(b) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is type unstable.
I think we need to error if they are not nothing but different.
Finally, this propagates CRS through polygon clipping.