{"id":21292439,"url":"https://github.com/juliageo/geometryops.jl","last_synced_at":"2026-01-18T11:26:42.123Z","repository":{"id":161750597,"uuid":"636382328","full_name":"JuliaGeo/GeometryOps.jl","owner":"JuliaGeo","description":"GeoInterface-based geometry operations","archived":false,"fork":false,"pushed_at":"2024-06-11T14:23:23.000Z","size":132868,"stargazers_count":11,"open_issues_count":64,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-06-11T17:34:33.866Z","etag":null,"topics":["geometry","geospatial","julia"],"latest_commit_sha":null,"homepage":"https://juliageo.org/GeometryOps.jl/","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaGeo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-04T18:14:42.000Z","updated_at":"2024-06-12T19:29:49.381Z","dependencies_parsed_at":"2024-01-07T13:32:02.317Z","dependency_job_id":"fb709d45-5631-4b71-aebe-e1a224a4d2ab","html_url":"https://github.com/JuliaGeo/GeometryOps.jl","commit_stats":null,"previous_names":["juliageo/geometryops.jl"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaGeo%2FGeometryOps.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaGeo%2FGeometryOps.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaGeo%2FGeometryOps.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaGeo%2FGeometryOps.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaGeo","download_url":"https://codeload.github.com/JuliaGeo/GeometryOps.jl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225741211,"owners_count":17516895,"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":["geometry","geospatial","julia"],"created_at":"2024-11-21T13:50:08.563Z","updated_at":"2026-01-18T11:26:42.103Z","avatar_url":"https://github.com/JuliaGeo.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"400\" alt=\"GeometryOps.jl\" src=\"https://github.com/JuliaGeo/GeometryOps.jl/assets/32143268/92c5526d-23a9-4e01-aee0-2fcea99c5001\"\u003e\n\n![Lifecycle:In Development](https://img.shields.io/badge/Lifecycle-In%20Development-339999)\n[![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://JuliaGeo.github.io/GeometryOps.jl/stable/)\n[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://JuliaGeo.github.io/GeometryOps.jl/dev/)\n[![Build Status](https://github.com/JuliaGeo/GeometryOps.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/JuliaGeo/GeometryOps.jl/actions/workflows/CI.yml?query=branch%3Amain)\n[![blazingly fast](https://blazingly.fast/api/badge.svg?repo=JuliaGeo%2FGeometryOps.jl)](https://blazingly.fast)\n\n\u003cimg src=\"docs/src/assets/logo.png\" alt=\"GeometryOps logo\" width=\"250\"\u003e\n\n\u003e [!WARNING]\n\u003e This package is still under heavy development!  Use with care.\n\nGeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.\n\nThe driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them [GeoInterface.jl](https://github.com/JuliaGeo/GeoInterface.jl)-compatible. We are focusing primarily on 2/2.5D geometries for now.  All methods in this package will consume any geometry which is compatible with GeoInterface - see its [integrations page](https://juliageo.org/GeoInterface.jl/stable/reference/integrations/) for more info on that!\n\nMost of the use cases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.\n\nWe welcome contributions, either as pull requests or discussion on issues!\n\n## Methods \n\nGeometryOps tries to offer most of the basic geometry operations you'd need, implemented in pure Julia and accepting any GeoInterface.jl compatible type.\n\n- General geometry methods (OGC methods): `equals`, `extent`, `distance`, `crosses`, `contains`, `intersects`, etc\n- Targeted function application over large nested geometries (`apply`) and reduction over geometries (`applyreduce`)\n    - Both `apply` and `applyreduce` consume arbitrary tables as well, like DataFrames!\n- `signed_area`, `centroid`, `distance`, etc for valid geometries\n- Line and polygon simplification (`simplify`)\n- Polygon clipping, `intersection`, `difference` and `union`\n- Generalized barycentric coordinates in polygons (`barycentric_coordinates`)\n- Projection of geometries between coordinate reference systems using [Proj.jl](https://github.com/JuliaGeo/Proj.jl)\n- Polygonization of raster images by contour detection (`polygonize`)\n- Segmentization/densification of geometry, both linearly and by geodesic paths (`segmentize`)\n\nSee the \"API\" page in the docs for a more complete list!\n\n## How to navigate the docs\n\nGeometryOps' [docs](https://juliageo.org/GeometryOps.jl/stable) are divided into three main sections: tutorials, explanations and source code.  \nDocumentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.\n\n- Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.\n- Explanations usually contain little code, and explain in more detail how GeometryOps works.\n- Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.\n\n## Performance comparison to other packages\n\nFrom the wonderful [vector-benchmark](https://www.github.com/kadyb/vector-benchmark),\n\n[![download-3](https://github.com/JuliaGeo/GeometryOps.jl/assets/32143268/0be8672c-c90f-4e1d-81c5-8522317c5e29)](https://github.com/kadyb/vector-benchmark/pull/12)\n\nMore benchmarks coming soon!\n\n### Planned additions\n\n- Buffering, hulls (convex and otherwise)\n- Checks for valid geometries (empty linestrings, null points, etc) ([#14](https://github.com/JuliaGeo/GeometryOps.jl/issues/14))\n- Operations on spherical (non-Euclidean) geometry ([#17](https://github.com/JuliaGeo/GeometryOps.jl/issues/17))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliageo%2Fgeometryops.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliageo%2Fgeometryops.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliageo%2Fgeometryops.jl/lists"}