Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chris48s/geojson-rewind
:earth_africa: A Python library for enforcing polygon ring winding order in GeoJSON
https://github.com/chris48s/geojson-rewind
Last synced: 10 days ago
JSON representation
:earth_africa: A Python library for enforcing polygon ring winding order in GeoJSON
- Host: GitHub
- URL: https://github.com/chris48s/geojson-rewind
- Owner: chris48s
- License: mit
- Created: 2018-10-19T20:52:52.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T18:25:44.000Z (13 days ago)
- Last Synced: 2024-10-24T03:54:17.701Z (12 days ago)
- Language: Python
- Homepage: https://pypi.org/project/geojson-rewind/
- Size: 320 KB
- Stars: 19
- Watchers: 2
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# geojson-rewind
[![Run tests](https://github.com/chris48s/geojson-rewind/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/chris48s/geojson-rewind/actions/workflows/test.yml)
[![codecov](https://codecov.io/gh/chris48s/geojson-rewind/branch/master/graph/badge.svg?token=0WGM3W8ULH)](https://codecov.io/gh/chris48s/geojson-rewind)
![PyPI Version](https://img.shields.io/pypi/v/geojson-rewind.svg)
![License](https://img.shields.io/pypi/l/geojson-rewind.svg)
![Python Compatibility](https://img.shields.io/badge/dynamic/json?query=info.requires_python&label=python&url=https%3A%2F%2Fpypi.org%2Fpypi%2Fgeojson-rewind%2Fjson)
![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)A Python library for enforcing polygon ring winding order in GeoJSON
The [GeoJSON](https://tools.ietf.org/html/rfc7946) spec mandates the [right hand rule](https://tools.ietf.org/html/rfc7946#section-3.1.6):
> 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.
This helps you generate compliant Polygon and MultiPolygon geometries.
Note: Co-ordinates in the input data are assumed to be WGS84 with (lon, lat) ordering, [as per RFC 7946](https://tools.ietf.org/html/rfc7946#section-3.1.1). Input with co-ordinates using any other CRS may lead to unexpected results.
## Installation
```
pip install geojson-rewind
```## Usage
### As a Library
Enforce RFC 7946 ring winding order (input/output is a GeoJSON string):
```py
>>> from geojson_rewind import rewind>>> input = """{
... "geometry": { "coordinates": [ [ [100, 0],
... [100, 1],
... [101, 1],
... [101, 0],
... [100, 0]]],
... "type": "Polygon"},
... "properties": {"foo": "bar"},
... "type": "Feature"}""">>> output = rewind(input)
>>> output
'{"geometry": {"coordinates": [[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]], "type": "Polygon"}, "properties": {"foo": "bar"}, "type": "Feature"}'>>> type(output)
```
Enforce RFC 7946 ring winding order (input/output is a python dict):
```py
>>> from geojson_rewind import rewind>>> input = {
... 'geometry': { 'coordinates': [ [ [100, 0],
... [100, 1],
... [101, 1],
... [101, 0],
... [100, 0]]],
... 'type': 'Polygon'},
... 'properties': {'foo': 'bar'},
... 'type': 'Feature'}>>> output = rewind(input)
>>> output
{'geometry': {'coordinates': [[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]], 'type': 'Polygon'}, 'properties': {'foo': 'bar'}, 'type': 'Feature'}>>> type(output)
```
## On the Console
```sh
# Enforce ring winding order on a GeoJSON file
$ rewind in.geojson > out.geojson# fetch GeoJSON from the web and enforce ring winding order
$ curl "https://myserver.com/in.geojson" | rewind
```## Versioning
geojson-rewind follows [semantic versioning](https://semver.org/). For this project, the "API" also includes:
- CLI flags and options
- CLI exit codesIn line with common practice in the python community, geojson-rewind will drop compatibility with unsupported python versions without incrementing the major version.
## Acknowledgements
`geojson-rewind` is a python port of Mapbox's javascript [geojson-rewind](https://github.com/mapbox/geojson-rewind) package. Credit to [Tom MacWright](https://github.com/tmcw) and [contributors](https://github.com/mapbox/geojson-rewind/graphs/contributors).