shapely 1.8.2__tar.gz → 1.8.4__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.
- {Shapely-1.8.2 → Shapely-1.8.4}/CHANGES.txt +33 -1
- {Shapely-1.8.2/Shapely.egg-info → Shapely-1.8.4}/PKG-INFO +34 -5
- {Shapely-1.8.2 → Shapely-1.8.4/Shapely.egg-info}/PKG-INFO +34 -5
- Shapely-1.8.4/VERSION.txt +1 -0
- Shapely-1.8.4/pyproject.toml +6 -0
- Shapely-1.8.4/shapely/__init__.py +1 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/ctypes_declarations.py +10 -7
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/base.py +10 -6
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/proxy.py +5 -2
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/strtree.py +20 -2
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/topology.py +2 -1
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geos_err_handler.py +8 -4
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linear_referencing.py +6 -3
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_parallel_offset.py +4 -2
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_shared_paths.py +15 -10
- Shapely-1.8.4/tests/test_split.py +247 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_strtree.py +29 -14
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_substring.py +5 -2
- Shapely-1.8.2/VERSION.txt +0 -1
- Shapely-1.8.2/pyproject.toml +0 -2
- Shapely-1.8.2/shapely/__init__.py +0 -1
- Shapely-1.8.2/tests/test_split.py +0 -230
- {Shapely-1.8.2 → Shapely-1.8.4}/CREDITS.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/LICENSE.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/README.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/SOURCES.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/dependency_links.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/requires.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/Shapely.egg-info/top_level.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/__about__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/_compat.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/_structures.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/markers.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/requirements.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/specifiers.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/utils.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/_vendor/packaging/version.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/docs/design.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/docs/index.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/docs/manual.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/docs/migration.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/docs/project.rst +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/setup.cfg +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/setup.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/_buildcfg.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/_geos.pxi +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/affinity.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/cga.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/algorithms/polylabel.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/coords.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/errors.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/dissolve.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/geoms.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/examples/intersect.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/collection.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/conftest.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/geo.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/linestring.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multilinestring.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multipoint.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/multipolygon.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/point.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geometry/polygon.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/geos.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/impl.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/iterops.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/linref.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/ops.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/predicates.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/prepared.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/speedups/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/speedups/_speedups.pyx +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/validation.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/vectorized/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/vectorized/_vectorized.pyx +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/wkb.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/shapely/wkt.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/__init__.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/conftest.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_affinity.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_binascii_hex.txt +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_box.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_buffer.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_cga.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_clip_by_rect.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_collection.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_coords.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_create_inconsistent_dimensionality.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_default_impl.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_delaunay.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_delegated.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_dlls.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_doctests.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_emptiness.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_empty_polygons.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_equality.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geointerface.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geometry_base.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_geomseq.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_getitem.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_hash.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_invalid_geometries.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_iterops.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linemerge.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_linestring.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_locale.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_make_valid.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_mapping.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_minimum_clearance.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_minimum_rotated_rectangle.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multi.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multilinestring.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multipoint.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_multipolygon.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_ndarrays.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_nearest.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_operations.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_operators.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_orient.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_persist.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_pickle.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_point.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polygon.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polygonize.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_polylabel.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_predicates.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_prepared.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_products_z.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_shape.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_singularity.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_snap.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_styles.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_svg.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_transform.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_union.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_validation.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_vectorized.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_voronoi_diagram.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_wkb.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_wkt.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/test_xy.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/threading_test.py +0 -0
- {Shapely-1.8.2 → Shapely-1.8.4}/tests/unpickle-strtree.py +0 -0
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
Changes
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
1.8.4 (2022-08-17)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
Bug fixes:
|
|
8
|
+
|
|
9
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
10
|
+
|
|
11
|
+
1.8.3 (2022-08-16)
|
|
12
|
+
------------------
|
|
13
|
+
|
|
14
|
+
Deprecations:
|
|
15
|
+
|
|
16
|
+
The STRtree class will be changed in 2.0.0 and will not be compatible with the
|
|
17
|
+
class in versions 1.8.x. This change obsoletes the deprecation announcement in
|
|
18
|
+
1.8a3 (below).
|
|
19
|
+
|
|
20
|
+
Packaging:
|
|
21
|
+
|
|
22
|
+
Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
|
|
23
|
+
|
|
24
|
+
Bug fixes:
|
|
25
|
+
|
|
26
|
+
- The signature for GEOSMinimumClearance has been corrected, fixing an issue
|
|
27
|
+
affecting aarch64-darwin (#1480)
|
|
28
|
+
- Return and arg types have been corrected and made more strict for area,
|
|
29
|
+
length, and distance properties.
|
|
30
|
+
- A new c_geom_p type has been created to replace c_void_p when calling GEOS
|
|
31
|
+
functions (#1479).
|
|
32
|
+
- An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
|
|
33
|
+
which will be included in wheels published to PyPI.
|
|
34
|
+
- GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
|
|
35
|
+
|
|
4
36
|
1.8.2 (2022-05-03)
|
|
5
37
|
------------------
|
|
6
38
|
|
|
@@ -23,7 +55,7 @@ install from source.
|
|
|
23
55
|
Packaging:
|
|
24
56
|
|
|
25
57
|
Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
|
|
26
|
-
best version of
|
|
58
|
+
best version of GEOS yet. Discrepancies in behavior compared to previous
|
|
27
59
|
versions are considered to be improvements.
|
|
28
60
|
|
|
29
61
|
For the first time, we will publish wheels for macos_arm64 (see PR #1310).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.4
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/shapely/shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -9,7 +9,6 @@ Maintainer: Sean Gillies
|
|
|
9
9
|
Maintainer-email: sean.gillies@gmail.com
|
|
10
10
|
License: BSD
|
|
11
11
|
Keywords: geometry topology gis
|
|
12
|
-
Platform: UNKNOWN
|
|
13
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
13
|
Classifier: Intended Audience :: Developers
|
|
15
14
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -332,6 +331,38 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
|
332
331
|
Changes
|
|
333
332
|
=======
|
|
334
333
|
|
|
334
|
+
1.8.4 (2022-08-17)
|
|
335
|
+
------------------
|
|
336
|
+
|
|
337
|
+
Bug fixes:
|
|
338
|
+
|
|
339
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
340
|
+
|
|
341
|
+
1.8.3 (2022-08-16)
|
|
342
|
+
------------------
|
|
343
|
+
|
|
344
|
+
Deprecations:
|
|
345
|
+
|
|
346
|
+
The STRtree class will be changed in 2.0.0 and will not be compatible with the
|
|
347
|
+
class in versions 1.8.x. This change obsoletes the deprecation announcement in
|
|
348
|
+
1.8a3 (below).
|
|
349
|
+
|
|
350
|
+
Packaging:
|
|
351
|
+
|
|
352
|
+
Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
|
|
353
|
+
|
|
354
|
+
Bug fixes:
|
|
355
|
+
|
|
356
|
+
- The signature for GEOSMinimumClearance has been corrected, fixing an issue
|
|
357
|
+
affecting aarch64-darwin (#1480)
|
|
358
|
+
- Return and arg types have been corrected and made more strict for area,
|
|
359
|
+
length, and distance properties.
|
|
360
|
+
- A new c_geom_p type has been created to replace c_void_p when calling GEOS
|
|
361
|
+
functions (#1479).
|
|
362
|
+
- An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
|
|
363
|
+
which will be included in wheels published to PyPI.
|
|
364
|
+
- GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
|
|
365
|
+
|
|
335
366
|
1.8.2 (2022-05-03)
|
|
336
367
|
------------------
|
|
337
368
|
|
|
@@ -354,7 +385,7 @@ install from source.
|
|
|
354
385
|
Packaging:
|
|
355
386
|
|
|
356
387
|
Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
|
|
357
|
-
best version of
|
|
388
|
+
best version of GEOS yet. Discrepancies in behavior compared to previous
|
|
358
389
|
versions are considered to be improvements.
|
|
359
390
|
|
|
360
391
|
For the first time, we will publish wheels for macos_arm64 (see PR #1310).
|
|
@@ -1224,5 +1255,3 @@ TODO: fill gap here
|
|
|
1224
1255
|
1.0 RC1 (2008-01-14)
|
|
1225
1256
|
--------------------
|
|
1226
1257
|
- First release candidate
|
|
1227
|
-
|
|
1228
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.4
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/shapely/shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -9,7 +9,6 @@ Maintainer: Sean Gillies
|
|
|
9
9
|
Maintainer-email: sean.gillies@gmail.com
|
|
10
10
|
License: BSD
|
|
11
11
|
Keywords: geometry topology gis
|
|
12
|
-
Platform: UNKNOWN
|
|
13
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
13
|
Classifier: Intended Audience :: Developers
|
|
15
14
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -332,6 +331,38 @@ U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
|
332
331
|
Changes
|
|
333
332
|
=======
|
|
334
333
|
|
|
334
|
+
1.8.4 (2022-08-17)
|
|
335
|
+
------------------
|
|
336
|
+
|
|
337
|
+
Bug fixes:
|
|
338
|
+
|
|
339
|
+
- The new c_geom_p type caused a regression and has been removed (#1487).
|
|
340
|
+
|
|
341
|
+
1.8.3 (2022-08-16)
|
|
342
|
+
------------------
|
|
343
|
+
|
|
344
|
+
Deprecations:
|
|
345
|
+
|
|
346
|
+
The STRtree class will be changed in 2.0.0 and will not be compatible with the
|
|
347
|
+
class in versions 1.8.x. This change obsoletes the deprecation announcement in
|
|
348
|
+
1.8a3 (below).
|
|
349
|
+
|
|
350
|
+
Packaging:
|
|
351
|
+
|
|
352
|
+
Wheels for 1.8.3 published on PyPI include GEOS 3.10.3.
|
|
353
|
+
|
|
354
|
+
Bug fixes:
|
|
355
|
+
|
|
356
|
+
- The signature for GEOSMinimumClearance has been corrected, fixing an issue
|
|
357
|
+
affecting aarch64-darwin (#1480)
|
|
358
|
+
- Return and arg types have been corrected and made more strict for area,
|
|
359
|
+
length, and distance properties.
|
|
360
|
+
- A new c_geom_p type has been created to replace c_void_p when calling GEOS
|
|
361
|
+
functions (#1479).
|
|
362
|
+
- An incorrect polygon-line intersection (#1427) has been fixed in GEOS 3.10.3,
|
|
363
|
+
which will be included in wheels published to PyPI.
|
|
364
|
+
- GEOS buffer parameters are now destroyed, fixing a memory leak (#1440).
|
|
365
|
+
|
|
335
366
|
1.8.2 (2022-05-03)
|
|
336
367
|
------------------
|
|
337
368
|
|
|
@@ -354,7 +385,7 @@ install from source.
|
|
|
354
385
|
Packaging:
|
|
355
386
|
|
|
356
387
|
Wheels for 1.8.1 published on PyPI include GEOS 3.10.2. This version is the
|
|
357
|
-
best version of
|
|
388
|
+
best version of GEOS yet. Discrepancies in behavior compared to previous
|
|
358
389
|
versions are considered to be improvements.
|
|
359
390
|
|
|
360
391
|
For the first time, we will publish wheels for macos_arm64 (see PR #1310).
|
|
@@ -1224,5 +1255,3 @@ TODO: fill gap here
|
|
|
1224
1255
|
1.0 RC1 (2008-01-14)
|
|
1225
1256
|
--------------------
|
|
1226
1257
|
- First release candidate
|
|
1227
|
-
|
|
1228
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.8.4
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.8.4"
|
|
@@ -132,6 +132,9 @@ def prototype(lgeos, geos_version):
|
|
|
132
132
|
lgeos.GEOSBufferParams_create.restype = c_void_p
|
|
133
133
|
lgeos.GEOSBufferParams_create.argtypes = None
|
|
134
134
|
|
|
135
|
+
lgeos.GEOSBufferParams_destroy.restype = None
|
|
136
|
+
lgeos.GEOSBufferParams_destroy.argtypes = [c_void_p]
|
|
137
|
+
|
|
135
138
|
lgeos.GEOSBufferParams_setEndCapStyle.restype = c_int
|
|
136
139
|
lgeos.GEOSBufferParams_setEndCapStyle.argtypes = [c_void_p, c_int]
|
|
137
140
|
|
|
@@ -393,17 +396,17 @@ def prototype(lgeos, geos_version):
|
|
|
393
396
|
|
|
394
397
|
# Misc functions
|
|
395
398
|
|
|
396
|
-
lgeos.GEOSArea.restype =
|
|
397
|
-
lgeos.GEOSArea.argtypes = [c_void_p,
|
|
399
|
+
lgeos.GEOSArea.restype = c_int
|
|
400
|
+
lgeos.GEOSArea.argtypes = [c_void_p, POINTER(c_double)]
|
|
398
401
|
|
|
399
402
|
lgeos.GEOSLength.restype = c_int
|
|
400
|
-
lgeos.GEOSLength.argtypes = [c_void_p,
|
|
403
|
+
lgeos.GEOSLength.argtypes = [c_void_p, POINTER(c_double)]
|
|
401
404
|
|
|
402
405
|
lgeos.GEOSDistance.restype = c_int
|
|
403
|
-
lgeos.GEOSDistance.argtypes = [c_void_p, c_void_p,
|
|
406
|
+
lgeos.GEOSDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
|
|
404
407
|
|
|
405
408
|
lgeos.GEOSHausdorffDistance.restype = c_int
|
|
406
|
-
lgeos.GEOSHausdorffDistance.argtypes = [c_void_p, c_void_p,
|
|
409
|
+
lgeos.GEOSHausdorffDistance.argtypes = [c_void_p, c_void_p, POINTER(c_double)]
|
|
407
410
|
|
|
408
411
|
# Reader and Writer APIs
|
|
409
412
|
|
|
@@ -521,8 +524,8 @@ def prototype(lgeos, geos_version):
|
|
|
521
524
|
c_void_p, py_object, c_void_p, lgeos.GEOSDistanceCallback, py_object]
|
|
522
525
|
lgeos.GEOSSTRtree_nearest_generic.restype = c_void_p
|
|
523
526
|
|
|
524
|
-
lgeos.GEOSMinimumClearance.argtypes = [c_void_p]
|
|
525
|
-
lgeos.GEOSMinimumClearance.restype =
|
|
527
|
+
lgeos.GEOSMinimumClearance.argtypes = [c_void_p, POINTER(c_double)]
|
|
528
|
+
lgeos.GEOSMinimumClearance.restype = c_int
|
|
526
529
|
|
|
527
530
|
if geos_version >= (3, 8, 0):
|
|
528
531
|
lgeos.GEOSMakeValid.restype = c_void_p
|
|
@@ -625,12 +625,16 @@ class BaseGeometry:
|
|
|
625
625
|
|
|
626
626
|
if 'buffer_with_params' in self.impl:
|
|
627
627
|
params = self._lgeos.GEOSBufferParams_create()
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
628
|
+
try:
|
|
629
|
+
self._lgeos.GEOSBufferParams_setEndCapStyle(params, cap_style)
|
|
630
|
+
self._lgeos.GEOSBufferParams_setJoinStyle(params, join_style)
|
|
631
|
+
self._lgeos.GEOSBufferParams_setMitreLimit(params, mitre_limit)
|
|
632
|
+
self._lgeos.GEOSBufferParams_setQuadrantSegments(params, res)
|
|
633
|
+
self._lgeos.GEOSBufferParams_setSingleSided(params, single_sided)
|
|
634
|
+
return geom_factory(self.impl['buffer_with_params'](self, params, distance))
|
|
635
|
+
finally:
|
|
636
|
+
if params:
|
|
637
|
+
self._lgeos.GEOSBufferParams_destroy(params)
|
|
634
638
|
|
|
635
639
|
if cap_style == CAP_STYLE.round and join_style == JOIN_STYLE.round:
|
|
636
640
|
return geom_factory(self.impl['buffer'](self, distance, res))
|
|
@@ -34,14 +34,17 @@ class CachingGeometryProxy:
|
|
|
34
34
|
self.__geom__, n = self.factory(self.context)
|
|
35
35
|
self._gtag = gtag
|
|
36
36
|
return self.__geom__
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def gtag(self):
|
|
39
39
|
return hash(repr(self.context))
|
|
40
40
|
|
|
41
41
|
def __setattr__(self, name, value):
|
|
42
42
|
# to override the custom one in BaseGeometry, so we don't warn
|
|
43
43
|
# for the proxy classes, which are already deprecated itself
|
|
44
|
-
|
|
44
|
+
try:
|
|
45
|
+
object.__setattr__(self, name, value)
|
|
46
|
+
except AttributeError:
|
|
47
|
+
pass
|
|
45
48
|
|
|
46
49
|
|
|
47
50
|
class PolygonProxy(CachingGeometryProxy):
|
|
@@ -22,7 +22,9 @@ import ctypes
|
|
|
22
22
|
import logging
|
|
23
23
|
from typing import Any, ItemsView, Iterable, Iterator, Optional, Sequence, Tuple, Union
|
|
24
24
|
import sys
|
|
25
|
+
from warnings import warn
|
|
25
26
|
|
|
27
|
+
from shapely.errors import ShapelyDeprecationWarning
|
|
26
28
|
from shapely.geometry.base import BaseGeometry
|
|
27
29
|
from shapely.geos import lgeos
|
|
28
30
|
|
|
@@ -97,6 +99,19 @@ class STRtree:
|
|
|
97
99
|
items: Iterable[Any] = None,
|
|
98
100
|
node_capacity: int = 10,
|
|
99
101
|
):
|
|
102
|
+
if items is not None:
|
|
103
|
+
warn(
|
|
104
|
+
"STRtree will be changed in 2.0.0 and will not be compatible with versions < 2. "
|
|
105
|
+
"Specifically: the items keyword argument will be removed.",
|
|
106
|
+
ShapelyDeprecationWarning,
|
|
107
|
+
stacklevel=2,
|
|
108
|
+
)
|
|
109
|
+
else:
|
|
110
|
+
warn(
|
|
111
|
+
"STRtree will be changed in 2.0.0 and will not be compatible with versions < 2.",
|
|
112
|
+
ShapelyDeprecationWarning,
|
|
113
|
+
stacklevel=2,
|
|
114
|
+
)
|
|
100
115
|
self.node_capacity = node_capacity
|
|
101
116
|
|
|
102
117
|
# Keep references to geoms
|
|
@@ -247,8 +262,11 @@ class STRtree:
|
|
|
247
262
|
if callback_userdata["exclusive"] and self._geoms[idx].equals(geom2):
|
|
248
263
|
dist[0] = sys.float_info.max
|
|
249
264
|
else:
|
|
250
|
-
lgeos.GEOSDistance(
|
|
251
|
-
|
|
265
|
+
lgeos.GEOSDistance(
|
|
266
|
+
self._geoms[idx]._geom,
|
|
267
|
+
geom2._geom,
|
|
268
|
+
dist,
|
|
269
|
+
)
|
|
252
270
|
return 1
|
|
253
271
|
except Exception:
|
|
254
272
|
log.exception("Caught exception")
|
|
@@ -7,7 +7,8 @@ to GEOS functions via ctypes.
|
|
|
7
7
|
These methods return ctypes objects that should be recast by the caller.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from ctypes import byref, c_double
|
|
10
|
+
from ctypes import byref, cast, c_double
|
|
11
|
+
|
|
11
12
|
from shapely.geos import TopologicalError, lgeos
|
|
12
13
|
from shapely.errors import InvalidGeometryError
|
|
13
14
|
|
|
@@ -19,7 +19,8 @@ def test_error_handler_exception(tmpdir):
|
|
|
19
19
|
with pytest.raises(ReadingError):
|
|
20
20
|
loads('POINT (LOLWUT)')
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
with open(logfile) as fobj:
|
|
23
|
+
log = fobj.read()
|
|
23
24
|
assert "Expected number but encountered word: 'LOLWUT'" in log
|
|
24
25
|
|
|
25
26
|
|
|
@@ -33,7 +34,8 @@ def test_error_handler(tmpdir):
|
|
|
33
34
|
# has *no* conversion specifiers.
|
|
34
35
|
LineString([(0, 0), (2, 2)]).project(LineString([(1, 1), (1.5, 1.5)]))
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
with open(logfile) as fobj:
|
|
38
|
+
log = fobj.read()
|
|
37
39
|
assert "third argument of GEOSProject_r must be Point" in log
|
|
38
40
|
|
|
39
41
|
|
|
@@ -57,7 +59,8 @@ def test_info_handler(tmpdir):
|
|
|
57
59
|
g = loads('MULTIPOLYGON (((10 20, 10 120, 60 70, 30 70, 30 40, 60 40, 60 70, 90 20, 10 20)))')
|
|
58
60
|
assert not g.is_valid
|
|
59
61
|
|
|
60
|
-
|
|
62
|
+
with open(logfile) as fobj:
|
|
63
|
+
log = fobj.read()
|
|
61
64
|
assert "Ring Self-intersection at or near point 60 70" in log
|
|
62
65
|
|
|
63
66
|
|
|
@@ -71,5 +74,6 @@ def test_info_handler_quiet(tmpdir):
|
|
|
71
74
|
g = loads('MULTIPOLYGON (((10 20, 10 120, 60 70, 30 70, 30 40, 60 40, 60 70, 90 20, 10 20)))')
|
|
72
75
|
assert not g.is_valid
|
|
73
76
|
|
|
74
|
-
|
|
77
|
+
with open(logfile) as fobj:
|
|
78
|
+
log = fobj.read()
|
|
75
79
|
assert "Ring Self-intersection at or near point 60 70" not in log
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
1
3
|
from . import unittest
|
|
2
|
-
from shapely.errors import GeometryTypeError
|
|
4
|
+
from shapely.errors import GeometryTypeError, ShapelyDeprecationWarning
|
|
3
5
|
from shapely.geometry import Point, LineString, MultiLineString
|
|
4
6
|
|
|
5
7
|
|
|
@@ -28,8 +30,9 @@ class LinearReferencingTestCase(unittest.TestCase):
|
|
|
28
30
|
self.multiline.project(self.point, normalized=True), 0.125)
|
|
29
31
|
|
|
30
32
|
def test_not_supported_project(self):
|
|
31
|
-
with
|
|
32
|
-
self.
|
|
33
|
+
with pytest.warns(ShapelyDeprecationWarning):
|
|
34
|
+
with self.assertRaises(GeometryTypeError):
|
|
35
|
+
self.point.buffer(1.0).project(self.point)
|
|
33
36
|
|
|
34
37
|
def test_not_on_line_project(self):
|
|
35
38
|
# Points that aren't on the line project to 0.
|
|
@@ -9,9 +9,11 @@ class OperationsTestCase(unittest.TestCase):
|
|
|
9
9
|
left = line1.parallel_offset(5, 'left')
|
|
10
10
|
self.assertEqual(left, LineString([(0, 5), (10, 5)]))
|
|
11
11
|
right = line1.parallel_offset(5, 'right')
|
|
12
|
-
|
|
12
|
+
# using spatial equality because the order of coordinates is not guaranteed
|
|
13
|
+
# (GEOS 3.11 changed this, see https://github.com/shapely/shapely/issues/1436)
|
|
14
|
+
assert right.equals(LineString([(10, -5), (0, -5)]))
|
|
13
15
|
right = line1.parallel_offset(-5, 'left')
|
|
14
|
-
|
|
16
|
+
assert right.equals(LineString([(10, -5), (0, -5)]))
|
|
15
17
|
left = line1.parallel_offset(-5, 'right')
|
|
16
18
|
self.assertEqual(left, LineString([(0, 5), (10, 5)]))
|
|
17
19
|
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
1
3
|
from . import unittest
|
|
2
4
|
|
|
3
|
-
from shapely.errors import GeometryTypeError
|
|
5
|
+
from shapely.errors import GeometryTypeError, ShapelyDeprecationWarning
|
|
4
6
|
from shapely.geometry import Point, LineString, Polygon, MultiLineString, \
|
|
5
7
|
GeometryCollection
|
|
6
8
|
from shapely.ops import shared_paths
|
|
7
9
|
|
|
10
|
+
|
|
8
11
|
class SharedPaths(unittest.TestCase):
|
|
9
12
|
def test_shared_paths_forward(self):
|
|
10
13
|
g1 = LineString([(0, 0), (10, 0), (10, 5), (20, 5)])
|
|
11
14
|
g2 = LineString([(5, 0), (15, 0)])
|
|
12
15
|
result = shared_paths(g1, g2)
|
|
13
|
-
|
|
16
|
+
|
|
14
17
|
self.assertTrue(isinstance(result, GeometryCollection))
|
|
15
18
|
self.assertTrue(len(result.geoms) == 2)
|
|
16
19
|
a, b = result.geoms
|
|
@@ -23,7 +26,7 @@ class SharedPaths(unittest.TestCase):
|
|
|
23
26
|
g1 = LineString([(0, 0), (10, 0), (10, 5), (20, 5)])
|
|
24
27
|
g2 = LineString([(15, 0), (5, 0)])
|
|
25
28
|
result = shared_paths(g1, g2)
|
|
26
|
-
|
|
29
|
+
|
|
27
30
|
self.assertTrue(isinstance(result, GeometryCollection))
|
|
28
31
|
self.assertTrue(len(result.geoms) == 2)
|
|
29
32
|
a, b = result.geoms
|
|
@@ -31,13 +34,15 @@ class SharedPaths(unittest.TestCase):
|
|
|
31
34
|
self.assertTrue(len(b.geoms) == 1)
|
|
32
35
|
self.assertEqual(b.geoms[0].coords[:], [(5, 0), (10, 0)])
|
|
33
36
|
self.assertTrue(a.is_empty)
|
|
34
|
-
|
|
37
|
+
|
|
35
38
|
def test_wrong_type(self):
|
|
36
39
|
g1 = Point(0, 0)
|
|
37
40
|
g2 = LineString([(5, 0), (15, 0)])
|
|
38
|
-
|
|
39
|
-
with
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
|
|
42
|
+
with pytest.warns(ShapelyDeprecationWarning):
|
|
43
|
+
with self.assertRaises(GeometryTypeError):
|
|
44
|
+
result = shared_paths(g1, g2)
|
|
45
|
+
|
|
46
|
+
with pytest.warns(ShapelyDeprecationWarning):
|
|
47
|
+
with self.assertRaises(GeometryTypeError):
|
|
48
|
+
result = shared_paths(g2, g1)
|