Skip to content

FIX: use more robust signed-area check for ring orientation - #2665

Merged
rcomer merged 1 commit into
SciTools:mainfrom
greglucas:fix/ring-orientation
Apr 15, 2026
Merged

rcomer merged 1 commit into
SciTools:mainfrom
greglucas:fix/ring-orientation

Conversation

@greglucas

Copy link
Copy Markdown
Contributor

Self-intersecting rings may produce incorrect is_ccw results from shapely. We can implement the shoelace formula with numpy dot products to determine the net orientation ourselves which is more robust.

https://en.wikipedia.org/wiki/Shoelace_formula

@rcomer I thought this might help some of the other boundary attachment arcs (this is a separate issue unfortunately), so I had AI do a quick investigation for me and it came up with this as a solution which made sense to me. Since it didn't solve my other problems I figured I would break it out here into a separate PR. I didn't check against the original geometries, so it would probably be useful to look at those too and make sure this fixes them.

closes #2483

@rcomer

rcomer commented Apr 14, 2026

Copy link
Copy Markdown
Member

Well this is very nice! I have confirmed it fixes the original case from #2483:

image image

It also fixes #2457:

image

and #2469

image

Comment thread lib/cartopy/crs.py Outdated
Self-intersecting rings may produce incorrect is_ccw results
from shapely. We can implement the shoelace formula with numpy
dot products to determine the orientation ourselves which is
more robust.
@greglucas
greglucas force-pushed the fix/ring-orientation branch from b8a5354 to abf9d7a Compare April 15, 2026 02:16
@rcomer
rcomer merged commit 0f305fd into SciTools:main Apr 15, 2026
35 of 38 checks passed
@rcomer rcomer added this to the Next Release milestone Apr 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants