shapely 2.2.0rc1__tar.gz → 2.3.0.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of shapely might be problematic. Click here for more details.
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CHANGES.txt +1 -1
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CITATION.cff +2 -2
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/PKG-INFO +1 -1
- shapely-2.3.0.dev0/_version.py +4 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/conf.py +1 -1
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/environment.yml +0 -3
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/installation.rst +3 -3
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/manual.rst +116 -71
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release/2.x.rst +23 -10
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/pyproject.toml +10 -3
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/coordinates.py +44 -36
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos.c +1 -1
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos.h +1 -1
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_O_b.c +1 -1
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/linear.py +4 -4
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/ops.py +9 -4
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_transform.py +12 -13
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_coordinates.py +54 -16
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_linear.py +18 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_misc.py +4 -0
- shapely-2.2.0rc1/_version.py +0 -4
- shapely-2.2.0rc1/setup.cfg +0 -7
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CODE_OF_CONDUCT.md +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CONTRIBUTING.md +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/CREDITS.txt +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/LICENSE.txt +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/README.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/Makefile +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/_templates/autosummary/class.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/buffer.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/buffer_single_side.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/convex_hull.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/coverage_simplify.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/difference.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/figures.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/geometrycollection.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/intersection-sym-difference.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/linearring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/linestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_geometrycollection.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_methods.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/make_valid_multipolygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/minimum_rotated_rectangle.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/multilinestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/multipolygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/parallel_offset.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/parallel_offset_mitre.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/polygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/polygon2.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/rotate.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/scale.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/simplify.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/skew.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/triangulate.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/unary_union.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/union.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/code/voronoi_diagram.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/constructive.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/coordinates.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/coverage.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/creation.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/design.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/faq.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/geometry.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/index.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/io.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/linear.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/measurement.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/migration.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/migration_pygeos.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/plotting.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/predicates.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/properties.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release/1.x.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/release.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/set_operations.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/strtree.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/docs/testing.rst +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/generate_version.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/meson.build +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_coverage.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_enum.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geometry.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geometry_helpers.pyx +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geos.pxd +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_geos.pyx +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_pygeos_api.pxd +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/_ragged_array.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/affinity.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/_oriented_envelope.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/cga.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/algorithms/polylabel.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/conftest.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/constructive.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/coords.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/creation.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/decorators.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/errors.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/base.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/collection.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/geo.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/linestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multilinestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multipoint.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/multipolygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/point.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geometry/polygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/geos.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/io.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/c_api.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/c_api.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/coords.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/coords.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/fast_loop_macros.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geom_arr.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geom_arr.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_O_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYO_b.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYO_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_O.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_O.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_b.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_d.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YY_d.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_b.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_d.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_YYd_d.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_O.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_O.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_b.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_d.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_d.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_i.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Y_i.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yd_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yd_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydb_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydb_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydd_b.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydd_b.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydddd_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydddd_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydi_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Ydi_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yi_Y.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/geos_funcs_Yi_Y.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/kvec.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/lib.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/meson.build +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeom.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeom.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeos.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/pygeos.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/signal_checks.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/signal_checks.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/strtree.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/strtree.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/ufuncs.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/ufuncs.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/vector.c +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/lib/vector.h +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/measurement.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/meson.build +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/plotting.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/predicates.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/prepared.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/set_operations.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/speedups.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/strtree.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/testing.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/common.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_collection.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_coords.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_decimal.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_emptiness.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_equality.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_format.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_geometry_base.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_hash.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_linestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multi.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multilinestring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multipoint.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_multipolygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_point.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/geometry/test_polygon.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/conftest.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/emptypoint_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/emptypolygon_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/geometrycollection_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/linearring_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/linestring_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multilinestring_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multipoint_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/multipolygon_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/point2d_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/point3d_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/data/polygon_1.8.5.post1.pickle +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_affinity.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_box.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_buffer.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_cga.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_clip_by_rect.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_create_inconsistent_dimensionality.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_delaunay.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_empty_polygons.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_equality.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_geointerface.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_invalid_geometries.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_linear_referencing.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_linemerge.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_locale.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_make_valid.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_mapping.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_minimum_clearance.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_ndarrays.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_nearest.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_operations.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_operators.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_orient.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_parallel_offset.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_persist.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_pickle.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_polygonize.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_polylabel.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_predicates.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_prepared.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_products_z.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_shape.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_shared_paths.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_singularity.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_snap.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_split.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_substring.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_svg.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_union.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_validation.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_vectorized.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_voronoi_diagram.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_wkb.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/test_wkt.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/legacy/threading_test.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_constructive.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_coverage.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_creation.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_creation_indices.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_decorators.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_geometry.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_io.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_measurement.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_plotting.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_predicates.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_ragged_array.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_set_operations.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_strtree.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/tests/test_testing.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/validation.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/vectorized/__init__.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/wkb.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/src/shapely/wkt.py +0 -0
- {shapely-2.2.0rc1 → shapely-2.3.0.dev0}/versioneer.py +0 -0
|
@@ -2,8 +2,8 @@ cff-version: 1.2.0
|
|
|
2
2
|
message: "Please cite this software using these metadata."
|
|
3
3
|
type: software
|
|
4
4
|
title: Shapely
|
|
5
|
-
version: "2.
|
|
6
|
-
date-released: "
|
|
5
|
+
version: "2.2.0"
|
|
6
|
+
date-released: "2026-10-07"
|
|
7
7
|
doi: 10.5281/zenodo.5597138
|
|
8
8
|
abstract: "Manipulation and analysis of geometric objects in the Cartesian plane."
|
|
9
9
|
repository-artifact: https://pypi.org/project/Shapely
|
|
@@ -12,7 +12,7 @@ os.environ["SPHINX_DOC_BUILD"] = "1"
|
|
|
12
12
|
# -- Project information -----------------------------------------------------
|
|
13
13
|
|
|
14
14
|
project = 'Shapely'
|
|
15
|
-
copyright = '2011-
|
|
15
|
+
copyright = '2011-2026, Sean Gillies and Shapely contributors'
|
|
16
16
|
|
|
17
17
|
# The full version, including alpha/beta/rc tags.
|
|
18
18
|
import shapely
|
|
@@ -115,13 +115,13 @@ modules happens in editable mode, add ``-Ceditable-verbose=true`` to the command
|
|
|
115
115
|
Conda environments
|
|
116
116
|
^^^^^^^^^^^^^^^^^^
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
When developing within a conda environment, it is recommended to install the
|
|
119
|
+
development dependencies using conda, including a pre-built distribution of GEOS.
|
|
120
120
|
For example:
|
|
121
121
|
|
|
122
122
|
.. code-block:: console
|
|
123
123
|
|
|
124
|
-
$ conda create -n shapely-dev cython meson meson-python pkg-config ninja numpy geos pip pytest
|
|
124
|
+
$ conda create -n shapely-dev c-compiler cython meson meson-python pkg-config ninja numpy geos pip pytest
|
|
125
125
|
|
|
126
126
|
Activate the environment and install shapely in editable mode using ``pip``:
|
|
127
127
|
|
|
@@ -318,7 +318,7 @@ Coordinate values are accessed via `coords`, `x`, `y`, `z`, and `m` properties.
|
|
|
318
318
|
>>> point.y
|
|
319
319
|
0.0
|
|
320
320
|
|
|
321
|
-
Coordinates may also be sliced.
|
|
321
|
+
Coordinates may also be sliced.
|
|
322
322
|
|
|
323
323
|
.. code-block:: pycon
|
|
324
324
|
|
|
@@ -386,7 +386,7 @@ The defining coordinate values are accessed via the `coords` property.
|
|
|
386
386
|
>>> list(line.coords)
|
|
387
387
|
[(0.0, 0.0), (1.0, 1.0)]
|
|
388
388
|
|
|
389
|
-
Coordinates may also be sliced.
|
|
389
|
+
Coordinates may also be sliced.
|
|
390
390
|
|
|
391
391
|
.. code-block:: pycon
|
|
392
392
|
|
|
@@ -566,8 +566,6 @@ the :func:`shapely.geometry.box()` function.
|
|
|
566
566
|
Makes a rectangular polygon from the provided bounding box values, with
|
|
567
567
|
counter-clockwise order by default.
|
|
568
568
|
|
|
569
|
-
`New in version 1.2.9`.
|
|
570
|
-
|
|
571
569
|
For example:
|
|
572
570
|
|
|
573
571
|
.. code-block:: pycon
|
|
@@ -592,8 +590,6 @@ To obtain a polygon with a known orientation, use
|
|
|
592
590
|
oriented counter-clockwise and the interior rings (holes) will be oriented
|
|
593
591
|
clockwise.
|
|
594
592
|
|
|
595
|
-
`New in version 1.2.10`.
|
|
596
|
-
|
|
597
593
|
.. _collections:
|
|
598
594
|
|
|
599
595
|
Collections
|
|
@@ -979,8 +975,6 @@ example will be shown for each.
|
|
|
979
975
|
region with positive signed area). This method applies to `LinearRing`
|
|
980
976
|
objects only.
|
|
981
977
|
|
|
982
|
-
`New in version 1.2.10`.
|
|
983
|
-
|
|
984
978
|
.. code-block:: pycon
|
|
985
979
|
|
|
986
980
|
>>> LinearRing([(1,0), (1,1), (0,0)]).is_ccw
|
|
@@ -1854,8 +1848,6 @@ transform (`rotate`, `scale`, etc.). The functions can be used with all
|
|
|
1854
1848
|
geometry types (except `GeometryCollection`), and 3D types are either
|
|
1855
1849
|
preserved or supported by 3D affine transformations.
|
|
1856
1850
|
|
|
1857
|
-
`New in version 1.2.17`.
|
|
1858
|
-
|
|
1859
1851
|
.. function:: shapely.affinity.affine_transform(geom, matrix)
|
|
1860
1852
|
|
|
1861
1853
|
Returns a transformed geometry using an affine transformation matrix.
|
|
@@ -2060,85 +2052,159 @@ Other Transformations
|
|
|
2060
2052
|
Shapely supports map projections and other arbitrary transformations of
|
|
2061
2053
|
geometric objects.
|
|
2062
2054
|
|
|
2063
|
-
.. function:: shapely.
|
|
2055
|
+
.. function:: shapely.transform(geom, func, include_z=False, interleaved=True)
|
|
2056
|
+
:no-index:
|
|
2064
2057
|
|
|
2065
|
-
|
|
2066
|
-
geometry of the same type from the transformed coordinates.
|
|
2058
|
+
Apply a transformation `func` to all the coordinates of `geom`, and return
|
|
2059
|
+
a new geometry of the same type from the transformed coordinates.
|
|
2067
2060
|
|
|
2068
|
-
`func` maps
|
|
2069
|
-
|
|
2070
|
-
The output shall be of the same type: scalars in, scalars out;
|
|
2071
|
-
lists in, lists out.
|
|
2061
|
+
By default, `func` maps a single 2D array of coordinates to a new 2D array
|
|
2062
|
+
of transformed coordinates (``func([[x1, y1], [x2, y2], ...])``).
|
|
2072
2063
|
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
is the dimensionality of the input geometry. If `func` raises
|
|
2076
|
-
a `TypeError` when called with iterables as arguments,
|
|
2077
|
-
then it will instead call `func` on each individual coordinate
|
|
2078
|
-
in the geometry.
|
|
2064
|
+
If your function works on separate arrays of x, y, and optionally z
|
|
2065
|
+
coordinates, set `interleaved=False` (``func([x1, x2, ...], [y1, y2, ...])``).
|
|
2079
2066
|
|
|
2080
|
-
|
|
2067
|
+
Full reference: :func:`shapely.transform`
|
|
2081
2068
|
|
|
2082
|
-
For example, here is
|
|
2083
|
-
(scalar or array).
|
|
2069
|
+
For example, here is a simple function that returns shifted coordinates:
|
|
2084
2070
|
|
|
2085
2071
|
.. code-block:: python
|
|
2086
2072
|
|
|
2087
|
-
|
|
2088
|
-
|
|
2073
|
+
def shift_xy(coords):
|
|
2074
|
+
# NumPy applies this addition element-wise to all coordinates
|
|
2075
|
+
return coords + 2
|
|
2089
2076
|
|
|
2090
|
-
|
|
2077
|
+
g2 = shapely.transform(g1, shift_xy)
|
|
2091
2078
|
|
|
2079
|
+
or that swaps the x and y coordinates:
|
|
2092
2080
|
|
|
2093
|
-
|
|
2081
|
+
.. code-block:: python
|
|
2082
|
+
|
|
2083
|
+
def swap_xy(x, y):
|
|
2084
|
+
return y, x
|
|
2085
|
+
|
|
2086
|
+
# specify interleaved=False to pass separate x and y arrays to the function
|
|
2087
|
+
g3 = shapely.transform(g1, swap_xy, interleaved=False)
|
|
2088
|
+
|
|
2089
|
+
To reproject geometries using ``pyproj``:
|
|
2094
2090
|
|
|
2095
2091
|
.. code-block:: python
|
|
2096
2092
|
|
|
2097
2093
|
import pyproj
|
|
2098
2094
|
|
|
2099
|
-
from shapely import Point
|
|
2100
|
-
from shapely.ops import transform
|
|
2095
|
+
from shapely import Point, transform
|
|
2101
2096
|
|
|
2102
2097
|
wgs84_pt = Point(-72.2495, 43.886)
|
|
2103
2098
|
|
|
2104
2099
|
wgs84 = pyproj.CRS('EPSG:4326')
|
|
2105
2100
|
utm = pyproj.CRS('EPSG:32618')
|
|
2106
2101
|
|
|
2107
|
-
|
|
2108
|
-
|
|
2102
|
+
transformer = pyproj.Transformer.from_crs(wgs84, utm, always_xy=True)
|
|
2103
|
+
# specify interleaved=False because the pyproj transform function expects
|
|
2104
|
+
# separate x, y arrays as input
|
|
2105
|
+
utm_point = transform(wgs84_pt, transformer.transform, interleaved=False)
|
|
2109
2106
|
|
|
2110
2107
|
It is important to note that in the example above, the `always_xy` kwarg is
|
|
2111
2108
|
required as Shapely only supports coordinates in X,Y order, and in PROJ 6 the
|
|
2112
2109
|
WGS84 CRS uses the EPSG-defined Lat/Lon coordinate order instead of the
|
|
2113
2110
|
expected Lon/Lat.
|
|
2114
2111
|
|
|
2115
|
-
|
|
2112
|
+
.. function:: shapely.transform_coordseq(geom, func, include_z=False, interleaved=True)
|
|
2113
|
+
:no-index:
|
|
2116
2114
|
|
|
2117
|
-
|
|
2115
|
+
Apply a transformation `func` to the coordinate sequences of a geometry.
|
|
2118
2116
|
|
|
2119
|
-
|
|
2120
|
-
|
|
2117
|
+
Similar to :func:`shapely.transform`, the transformation function can
|
|
2118
|
+
accept a single 2D array of coordinates or separate x, y, and optionally
|
|
2119
|
+
z arrays (depending on the ``interleaved`` keyword).
|
|
2121
2120
|
|
|
2122
|
-
|
|
2121
|
+
The difference is that in case of :func:`~shapely.transform_coordseq`,
|
|
2122
|
+
the transformation function is called separately for each coordinate
|
|
2123
|
+
sequence (and thus only receiving the coordinates of one sequence at a
|
|
2124
|
+
time), instead of being called once for all coordinates. For polygons, this
|
|
2125
|
+
means per ring.
|
|
2123
2126
|
|
|
2124
|
-
|
|
2125
|
-
|
|
2127
|
+
As a result, the number of coordinate pairs per coordinate sequence is
|
|
2128
|
+
allowed to change.
|
|
2126
2129
|
|
|
2127
|
-
|
|
2128
|
-
pyproj.transform,
|
|
2129
|
-
wgs84,
|
|
2130
|
-
utm)
|
|
2130
|
+
Full reference: :func:`shapely.transform_coordseq`
|
|
2131
2131
|
|
|
2132
|
-
|
|
2132
|
+
For example, reducing a linestring to only its first 2 points:
|
|
2133
2133
|
|
|
2134
|
-
|
|
2134
|
+
.. code-block:: pycon
|
|
2135
2135
|
|
|
2136
|
-
|
|
2136
|
+
>>> import shapely
|
|
2137
|
+
>>> line = LineString([(2, 2), (4, 4), (6, 6)])
|
|
2138
|
+
>>> shapely.transform_coordseq(line, lambda coords: coords[:2])
|
|
2139
|
+
<LINESTRING (2 2, 4 4)>
|
|
2137
2140
|
|
|
2138
|
-
|
|
2141
|
+
The :func:`~shapely.transform` function is the more performant option, so
|
|
2142
|
+
whenever your transformation function can be applied to all coordinates
|
|
2143
|
+
element-wise at once and does not change the number of coordinate pairs, we
|
|
2144
|
+
recommend using that.
|
|
2139
2145
|
|
|
2140
|
-
|
|
2146
|
+
Finally, there is a third `transform` function, which existed before the
|
|
2147
|
+
options described above, and is kept for backwards compatibility but is
|
|
2148
|
+
deprecated:
|
|
2141
2149
|
|
|
2150
|
+
.. function:: shapely.ops.transform(func, geom)
|
|
2151
|
+
|
|
2152
|
+
Applies `func` to all coordinates of `geom` and returns a new
|
|
2153
|
+
geometry of the same type from the transformed coordinates.
|
|
2154
|
+
|
|
2155
|
+
`func` maps x, y, and optionally z to output xp, yp, zp. The input
|
|
2156
|
+
parameters may be iterable types like lists or arrays or single values.
|
|
2157
|
+
The output shall be of the same type: scalars in, scalars out;
|
|
2158
|
+
lists in, lists out.
|
|
2159
|
+
|
|
2160
|
+
`transform` tries to determine which kind of function was passed in
|
|
2161
|
+
by calling `func` first with n iterables of coordinates, where n
|
|
2162
|
+
is the dimensionality of the input geometry. If `func` raises
|
|
2163
|
+
a `TypeError` when called with iterables as arguments,
|
|
2164
|
+
then it will instead call `func` on each individual coordinate
|
|
2165
|
+
in the geometry.
|
|
2166
|
+
|
|
2167
|
+
.. deprecated:: 2.2.0
|
|
2168
|
+
|
|
2169
|
+
**Updating to use** :func:`shapely.transform` **or** :func:`shapely.transform_coordseq`
|
|
2170
|
+
|
|
2171
|
+
If you are currently using ``shapely.ops.transform``, consider whether your
|
|
2172
|
+
transformation function can be applied to all coordinates at once
|
|
2173
|
+
independently. If that is the case, replace:
|
|
2174
|
+
|
|
2175
|
+
.. code-block:: python
|
|
2176
|
+
|
|
2177
|
+
geom2 = shapely.ops.transform(func, geom1)
|
|
2178
|
+
|
|
2179
|
+
with :func:`shapely.transform`:
|
|
2180
|
+
|
|
2181
|
+
.. code-block:: python
|
|
2182
|
+
|
|
2183
|
+
geom2 = shapely.transform(geom1, func, interleaved=False)
|
|
2184
|
+
|
|
2185
|
+
If your function has custom logic per coordinate sequence or changes the
|
|
2186
|
+
number of coordinate pairs, use :func:`shapely.transform_coordseq`.
|
|
2187
|
+
|
|
2188
|
+
If your function only works on scalar coordinate values, you can define
|
|
2189
|
+
a small wrapper function that accepts an array of coordinates, and
|
|
2190
|
+
applies your scalar function to each coordinate pair individually:
|
|
2191
|
+
|
|
2192
|
+
.. code-block:: python
|
|
2193
|
+
|
|
2194
|
+
import numpy as np
|
|
2195
|
+
|
|
2196
|
+
def func_scalar(x, y, z=None):
|
|
2197
|
+
if x < 0:
|
|
2198
|
+
x += 360
|
|
2199
|
+
return x, y
|
|
2200
|
+
|
|
2201
|
+
def func_wrapped(coords):
|
|
2202
|
+
return np.array([func_scalar(x, y) for x, y in coords])
|
|
2203
|
+
|
|
2204
|
+
geom2 = shapely.transform(geom1, func_wrapped)
|
|
2205
|
+
|
|
2206
|
+
Note: this scalar function is only for illustration purposes, and this
|
|
2207
|
+
specific operation can also be re-written to use vectorized array operations.
|
|
2142
2208
|
|
|
2143
2209
|
Other Operations
|
|
2144
2210
|
================
|
|
@@ -2183,8 +2249,6 @@ Sequences of touching lines can be merged into `MultiLineStrings` or
|
|
|
2183
2249
|
form part of polygon. Invalid ring lines form rings which are invalid
|
|
2184
2250
|
(bowties, etc).
|
|
2185
2251
|
|
|
2186
|
-
`New in version 1.2.18.`
|
|
2187
|
-
|
|
2188
2252
|
.. code-block:: pycon
|
|
2189
2253
|
|
|
2190
2254
|
>>> from shapely import polygonize_full
|
|
@@ -2233,8 +2297,6 @@ within a rectangle.
|
|
|
2233
2297
|
not guaranteed to be valid. No exceptions will be raised for topological
|
|
2234
2298
|
errors.
|
|
2235
2299
|
|
|
2236
|
-
`New in version 1.7.`
|
|
2237
|
-
|
|
2238
2300
|
.. code-block:: python
|
|
2239
2301
|
|
|
2240
2302
|
>>> from shapely import clip_by_rect
|
|
@@ -2404,8 +2466,6 @@ a second geometry with a given tolerance.
|
|
|
2404
2466
|
The `tolerance` argument specifies the minimum distance between vertices for
|
|
2405
2467
|
them to be snapped.
|
|
2406
2468
|
|
|
2407
|
-
`New in version 1.5.0`
|
|
2408
|
-
|
|
2409
2469
|
.. code-block:: pycon
|
|
2410
2470
|
|
|
2411
2471
|
>>> from shapely import snap
|
|
@@ -2431,8 +2491,6 @@ linear geometries.
|
|
|
2431
2491
|
inputs. The second element is a MultiLineString containing shared paths with
|
|
2432
2492
|
the opposite direction for the two inputs.
|
|
2433
2493
|
|
|
2434
|
-
`New in version 1.6.0`
|
|
2435
|
-
|
|
2436
2494
|
.. code-block:: pycon
|
|
2437
2495
|
|
|
2438
2496
|
>>> from shapely import shared_paths
|
|
@@ -2564,8 +2622,6 @@ Diagnostics
|
|
|
2564
2622
|
|
|
2565
2623
|
Returns a string explaining the validity or invalidity of the object.
|
|
2566
2624
|
|
|
2567
|
-
`New in version 1.2.1`.
|
|
2568
|
-
|
|
2569
2625
|
The messages may or may not have a representation of a problem point that can
|
|
2570
2626
|
be parsed out.
|
|
2571
2627
|
|
|
@@ -2640,13 +2696,6 @@ Polylabel
|
|
|
2640
2696
|
Finds the approximate location of the pole of inaccessibility for a given
|
|
2641
2697
|
polygon. Based on Vladimir Agafonkin's polylabel_.
|
|
2642
2698
|
|
|
2643
|
-
`New in version 1.6.0`
|
|
2644
|
-
|
|
2645
|
-
.. note::
|
|
2646
|
-
|
|
2647
|
-
Prior to 1.7 `polylabel` must be imported from `shapely.algorithms.polylabel`
|
|
2648
|
-
instead of `shapely.ops`.
|
|
2649
|
-
|
|
2650
2699
|
.. code-block:: pycon
|
|
2651
2700
|
|
|
2652
2701
|
>>> from shapely.ops import polylabel
|
|
@@ -2672,8 +2721,6 @@ cannot add or remove geometries.
|
|
|
2672
2721
|
|
|
2673
2722
|
References to these geometric objects are kept and stored in the R-tree.
|
|
2674
2723
|
|
|
2675
|
-
`New in version 1.4.0`.
|
|
2676
|
-
|
|
2677
2724
|
.. method:: strtree.query(geom)
|
|
2678
2725
|
:noindex:
|
|
2679
2726
|
|
|
@@ -2864,8 +2911,6 @@ The GeoJSON-like mapping of a geometric object can be obtained using
|
|
|
2864
2911
|
counterclockwise, and interior rings (holes) clockwise with
|
|
2865
2912
|
:func:`shapely.orient_polygons`.
|
|
2866
2913
|
|
|
2867
|
-
`New in version 1.2.3`.
|
|
2868
|
-
|
|
2869
2914
|
For example, using the same `GeoThing` class:
|
|
2870
2915
|
|
|
2871
2916
|
.. code-block:: pycon
|
|
@@ -4,7 +4,7 @@ Version 2.x
|
|
|
4
4
|
|
|
5
5
|
.. _version-2-2-0:
|
|
6
6
|
|
|
7
|
-
Version 2.2.0 (2026-
|
|
7
|
+
Version 2.2.0 (2026-10-07)
|
|
8
8
|
--------------------------
|
|
9
9
|
|
|
10
10
|
New features
|
|
@@ -41,9 +41,9 @@ vectorized functions:
|
|
|
41
41
|
of a geometry (#2313).
|
|
42
42
|
- :func:`.coverage_clean`, which returns a cleaned version of geometries
|
|
43
43
|
forming a polygonal coverage (#2454) (requires GEOS >= 3.14).
|
|
44
|
-
- :func
|
|
45
|
-
falls back to the existing :func:`shapely.ops.split`
|
|
46
|
-
otherwise) (#2477).
|
|
44
|
+
- :func:`~shapely.split` to split a geometry by another geometry (uses
|
|
45
|
+
GEOS>=3.15, falls back to the existing :func:`shapely.ops.split`
|
|
46
|
+
implementation otherwise) (#2477).
|
|
47
47
|
|
|
48
48
|
In addition, two other functions have been added to the top-level namespace:
|
|
49
49
|
|
|
@@ -67,25 +67,36 @@ Other improvements
|
|
|
67
67
|
reused through a thread-local GEOS context (#2343).
|
|
68
68
|
|
|
69
69
|
- :func:`.Polygon.from_bounds` now builds the ring in counterclockwise order,
|
|
70
|
-
consistent with :
|
|
70
|
+
consistent with :func:`shapely.box`, so the result satisfies the GeoJSON
|
|
71
71
|
right-hand rule (#2396).
|
|
72
72
|
|
|
73
73
|
- Added return values to :func:`.prepare` and :func:`.destroy_prepared`. They
|
|
74
74
|
now return whether something was done; calling `prepare` twice on a geometry
|
|
75
75
|
will first return `True`, and then `False` (#2359).
|
|
76
76
|
|
|
77
|
-
- The :func
|
|
78
|
-
splitting a (Multi)Polygon by another (Multi)Polygon, by using the
|
|
79
|
-
to split to with (similarly as was already done for splitting a
|
|
77
|
+
- The :func:`~shapely.split` and :func:`shapely.ops.split` functions now
|
|
78
|
+
support splitting a (Multi)Polygon by another (Multi)Polygon, by using the
|
|
79
|
+
boundary to split to with (similarly as was already done for splitting a
|
|
80
80
|
(Multi)LineString with a polygon) (#2505).
|
|
81
81
|
|
|
82
82
|
API changes
|
|
83
83
|
^^^^^^^^^^^
|
|
84
84
|
|
|
85
|
-
- The :func:`shapely.ops.transform
|
|
85
|
+
- The :func:`shapely.ops.transform` is deprecated. Use the more specific
|
|
86
86
|
:meth:`shapely.transform` (when your function works independently on all
|
|
87
87
|
coordinates) or :meth:`shapely.transform_coordseq` (when your function works
|
|
88
|
-
on the coordinate sequence directly) instead
|
|
88
|
+
on the coordinate sequence directly) instead. See
|
|
89
|
+
:func:`the manual with update advice <shapely.ops.transform>` for more
|
|
90
|
+
details (#1902).
|
|
91
|
+
|
|
92
|
+
- The ``multithreading_enabled`` decorator is deprecated, and is also no longer
|
|
93
|
+
used internally. This decorator added overhead to each function call, while
|
|
94
|
+
only providing minimal and incomplete safety guarantees around multi-threaded
|
|
95
|
+
usage of shapely (#2338).
|
|
96
|
+
When sharing NumPy array of geometries between threads, it is the responsibility
|
|
97
|
+
of the user to ensure those geometries are not modified at the same time.
|
|
98
|
+
See the `multithreading section <https://github.com/shapely/shapely#multithreading>`__
|
|
99
|
+
for more details.
|
|
89
100
|
|
|
90
101
|
Bug fixes
|
|
91
102
|
^^^^^^^^^
|
|
@@ -95,6 +106,8 @@ Bug fixes
|
|
|
95
106
|
passing a sequence of non-polygons (#2461).
|
|
96
107
|
- Fix a crash in :func:`.coverage_invalid_edges` on invalid (non-geometry)
|
|
97
108
|
input (#2483).
|
|
109
|
+
- Fix keyword argument forwarding in :func:`shapely.line_interpolate_point`
|
|
110
|
+
and :func:`shapely.line_locate_point` (#2480).
|
|
98
111
|
|
|
99
112
|
Packaging
|
|
100
113
|
^^^^^^^^^
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
requires = [
|
|
3
3
|
# keep in sync with a subset of [dependency-groups.build]
|
|
4
4
|
"Cython",
|
|
5
|
-
"meson-python>=0.15.0",
|
|
5
|
+
"meson-python>=0.15.0,!=0.22.0",
|
|
6
6
|
"numpy>=1.26,<3",
|
|
7
7
|
]
|
|
8
8
|
build-backend = "mesonpy"
|
|
@@ -46,7 +46,7 @@ build = [
|
|
|
46
46
|
# keep in sync with a superset of [build-system.requires]
|
|
47
47
|
"Cython",
|
|
48
48
|
"meson>=1.2.1",
|
|
49
|
-
"meson-python>=0.15.0",
|
|
49
|
+
"meson-python>=0.15.0,!=0.22.0",
|
|
50
50
|
"ninja",
|
|
51
51
|
"numpy>=1.26,<3",
|
|
52
52
|
]
|
|
@@ -184,7 +184,6 @@ ignore = [
|
|
|
184
184
|
|
|
185
185
|
[tool.ruff.lint.isort]
|
|
186
186
|
combine-as-imports = true
|
|
187
|
-
extra-standard-library = ["packaging"]
|
|
188
187
|
|
|
189
188
|
[tool.ruff.lint.pydocstyle]
|
|
190
189
|
convention = "numpy"
|
|
@@ -197,3 +196,11 @@ allow-dunder-method-names = [
|
|
|
197
196
|
"_repr_svg_",
|
|
198
197
|
]
|
|
199
198
|
max-positional-args = 8 # TODO: revise with deprecate_positional changes
|
|
199
|
+
|
|
200
|
+
[tool.versioneer]
|
|
201
|
+
VCS = "git"
|
|
202
|
+
style = "pep440"
|
|
203
|
+
versionfile_source = "src/shapely/_version.py"
|
|
204
|
+
versionfile_build = "shapely/_version.py"
|
|
205
|
+
tag_prefix = ""
|
|
206
|
+
parentdir_prefix = "shapely-"
|