Comments (2)
In the fully-standardized revised GeoJSON specification (aka RFC 7946), polygons should follow the right-hand rule - exterior rings are counterclockwise, interior clockwise. However, for backward-compatibility, this is not required. Polygons with differently-wound coordinates should still work fine.
from simplefeatures.
Thanks for linking to that RFC. The relevant sections from that RFC are:
A linear ring MUST follow the right-hand rule with respect to the area it bounds, i.e., exterior rings are counterclockwise, and holes are clockwise.
...
Note: the [GJ2008] specification did not discuss linear ring winding order. For backwards compatibility, parsers SHOULD NOT reject Polygons that do not follow the right-hand rule.
...
For type "Polygon", the "coordinates" member MUST be an array of linear ring coordinate arrays.
...
[GJ2008] Butler, H., Daly, M., Doyle, A., Gillies, S., Schaub, T., and C. Schmidt, "The GeoJSON Format Specification", June 2008.
So this is clear that ring orientation should be normalised before serialisation. As you point out, all (or most?) parsers in practice will accept either winding order, so this isn't critically urgent to fix.
Since detecting winding order and reversing rings is a very cheap operation (compared to doing GeoJSON serialisation), adding the normalisation step is quite reasonable. For simplicity, I think it's best to do it unconditionally.
from simplefeatures.
Related Issues (20)
- Use multiple versions of GEOS in CI
- Add Envelope to rtree.Box helper
- Add a `String() string` method to envelope
- Update golangci-lint to use latest version
- Move benchmarks into a single package
- Unify GEOS wrappers
- Use generics internally
- Separate TWKB Unmarshallers
- Remove unneeded benchmarks
- Use alpine images for GEOS testing
- No rings error on intersection error HOT 4
- Rewrite GEOS reference implementation tests
- geom.Union failed at some cases HOT 3
- Use symmetric line/line intersection
- Coordinate type not retained for simplified empty geometries
- Function for NewCoordinates HOT 2
- Add GeoJSON Feature "foreign member" support
- Some versions of GEOS don't include a `geos.pc` file HOT 1
- Instruction to use GEOS HOT 5
- Building GEOS on Windows. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from simplefeatures.