{"id":17296922,"url":"https://github.com/gadomski/antimeridian","last_synced_at":"2025-04-04T15:06:27.808Z","repository":{"id":153472761,"uuid":"626665725","full_name":"gadomski/antimeridian","owner":"gadomski","description":"Correct GeoJSON geometries that cross the 180th meridian","archived":false,"fork":false,"pushed_at":"2025-01-08T20:22:41.000Z","size":26048,"stargazers_count":74,"open_issues_count":4,"forks_count":8,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-28T14:09:46.830Z","etag":null,"topics":["antimeridian","geojson","geospatial","python"],"latest_commit_sha":null,"homepage":"https://www.gadom.ski/antimeridian/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gadomski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-11T23:36:09.000Z","updated_at":"2025-03-28T12:35:33.000Z","dependencies_parsed_at":"2024-02-02T14:39:31.491Z","dependency_job_id":"d884375d-b6b8-41ed-a063-34c7521914d5","html_url":"https://github.com/gadomski/antimeridian","commit_stats":{"total_commits":214,"total_committers":2,"mean_commits":107.0,"dds":"0.26635514018691586","last_synced_commit":"0f4ccb1ebafe89a9bc02006178935e6ea8137287"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadomski%2Fantimeridian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadomski%2Fantimeridian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadomski%2Fantimeridian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadomski%2Fantimeridian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gadomski","download_url":"https://codeload.github.com/gadomski/antimeridian/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198449,"owners_count":20900079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antimeridian","geojson","geospatial","python"],"created_at":"2024-10-15T11:14:09.866Z","updated_at":"2025-04-04T15:06:27.782Z","avatar_url":"https://github.com/gadomski.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# antimeridian\n\n[![CI Status](https://img.shields.io/github/actions/workflow/status/gadomski/antimeridian/ci.yaml?style=for-the-badge\u0026label=CI)](https://github.com/gadomski/antimeridian/actions/workflows/ci.yaml)\n[![Docs](https://img.shields.io/github/actions/workflow/status/gadomski/antimeridian/docs.yaml?style=for-the-badge\u0026label=Docs)](https://www.gadom.ski/antimeridian/)\n[![PyPI](https://img.shields.io/pypi/v/antimeridian?style=for-the-badge)](https://pypi.org/project/antimeridian/)\n[![Conda Downloads](https://img.shields.io/conda/d/conda-forge/antimeridian?style=for-the-badge)](https://anaconda.org/conda-forge/antimeridian)\n[![GitHub](https://img.shields.io/github/license/gadomski/antimeridian?style=for-the-badge)](https://github.com/gadomski/antimeridian/blob/main/LICENSE)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg?style=for-the-badge)](https://github.com/gadomski/antimeridian/blob/main/CODE_OF_CONDUCT)\n\n[![status](https://joss.theoj.org/papers/2a6c626b3774c8310e46c05fdf8d10de/status.svg)](https://joss.theoj.org/papers/2a6c626b3774c8310e46c05fdf8d10de)\n[![DOI](https://zenodo.org/badge/626665725.svg)](https://doi.org/10.5281/zenodo.14335984)\n\n![Demonstration image](./docs/img/complex-split.png)\n\nFix shapes that cross the antimeridian.\nSee [the documentation](https://antimeridian.readthedocs.io) for information about the underlying algorithm.\nDepends on [shapely](https://shapely.readthedocs.io) and [numpy](https://numpy.org/).\n\nCan fix:\n\n- Shapely [`Polygon`](https://shapely.readthedocs.io/en/stable/reference/shapely.Polygon.html#shapely.Polygon), [`MultiPolygon`](https://shapely.readthedocs.io/en/stable/reference/shapely.MultiPolygon.html#shapely.MultiPolygon), [`LineString`](https://shapely.readthedocs.io/en/stable/reference/shapely.LineString.html#shapely.LineString), and [`MultiLineString`](https://shapely.readthedocs.io/en/stable/reference/shapely.MultiLineString.html#shapely.MultiLineString) objects\n- GeoJSON [Polygons](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6), [MultiPolygons](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.7), [Features](https://datatracker.ietf.org/doc/html/rfc7946#section-3.2) and [FeatureCollections](https://datatracker.ietf.org/doc/html/rfc7946#section-3.3), as dictionaries\n- Anything that has a [`__geo_interface__`](https://gist.github.com/sgillies/2217756)\n\n## Usage\n\n```shell\npython -m pip install antimeridian\n```\n\nThen:\n\n```python\nimport antimeridian\n\nfixed = antimeridian.fix_geojson(geojson)\n```\n\nWe also have some utilities to create [bounding boxes](https://antimeridian.readthedocs.io/en/latest/api.html#antimeridian.bbox) and [centroids](https://antimeridian.readthedocs.io/en/latest/api.html#antimeridian.centroid) from antimeridian-crossing polygons and multipolygons.\nSee [the documentation](https://www.gadom.ski/antimeridian/) for a complete API reference.\n\n### Command line interface\n\nUse the `cli` optional dependency to install the `antimeridian` CLI:\n\n```shell\npython -m pip install 'antimeridian[cli]'\nantimeridian fix input.json \u003e output.json\n```\n\n## Developing\n\nGet [uv](https://docs.astral.sh/uv/getting-started/installation/).\nThen:\n\n```shell\ngit clone https://github.com/gadomski/antimeridian\ncd antimeridian\nuv sync\n```\n\nWe use [pytest](https://docs.pytest.org) for tests:\n\n```shell\nuv run pytest\n```\n\nTo build and serve the docs locally:\n\n```shell\nuv run mkdocs serve\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## License\n\n[Apache-2.0](https://github.com/gadomski/antimeridian/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgadomski%2Fantimeridian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgadomski%2Fantimeridian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgadomski%2Fantimeridian/lists"}