shapely 1.7a2__tar.gz → 1.7a3__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.7a2 → Shapely-1.7a3}/CHANGES.txt +14 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/CREDITS.txt +11 -6
- {Shapely-1.7a2/Shapely.egg-info → Shapely-1.7a3}/PKG-INFO +33 -13
- {Shapely-1.7a2 → Shapely-1.7a3}/README.rst +4 -4
- {Shapely-1.7a2 → Shapely-1.7a3/Shapely.egg-info}/PKG-INFO +33 -13
- {Shapely-1.7a2 → Shapely-1.7a3}/Shapely.egg-info/SOURCES.txt +2 -0
- Shapely-1.7a3/VERSION.txt +1 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/docs/manual.rst +44 -15
- {Shapely-1.7a2 → Shapely-1.7a3}/docs/project.rst +1 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/setup.py +25 -18
- Shapely-1.7a3/shapely/__init__.py +1 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/_buildcfg.py +3 -2
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/_geos.pxi +2 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/affinity.py +11 -3
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/ctypes_declarations.py +23 -1
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/base.py +52 -23
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/polygon.py +6 -3
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geos.py +8 -1
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/impl.py +3 -1
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/ops.py +11 -9
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/speedups/_speedups.c +1066 -989
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/speedups/_speedups.pyx +7 -2
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_affinity.py +59 -0
- Shapely-1.7a3/tests/test_buffer.py +80 -0
- Shapely-1.7a3/tests/test_geometry_base.py +17 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_geos_err_handler.py +1 -1
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_operations.py +1 -2
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_polygon.py +7 -11
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_substring.py +5 -1
- Shapely-1.7a2/VERSION.txt +0 -1
- Shapely-1.7a2/shapely/__init__.py +0 -1
- {Shapely-1.7a2 → Shapely-1.7a3}/LICENSE.txt +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/Shapely.egg-info/dependency_links.txt +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/Shapely.egg-info/requires.txt +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/Shapely.egg-info/top_level.txt +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/__about__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/_compat.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/_structures.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/markers.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/requirements.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/specifiers.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/utils.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/_vendor/packaging/version.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/docs/design.rst +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/docs/index.rst +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/setup.cfg +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/algorithms/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/algorithms/cga.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/algorithms/polylabel.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/coords.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/errors.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/examples/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/examples/dissolve.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/examples/geoms.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/examples/intersect.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/collection.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/geo.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/linestring.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/multilinestring.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/multipoint.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/multipolygon.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/point.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/geometry/proxy.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/iterops.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/linref.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/predicates.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/prepared.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/speedups/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/strtree.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/topology.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/validation.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/vectorized/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/vectorized/_vectorized.c +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/vectorized/_vectorized.pyx +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/wkb.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/shapely/wkt.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/__init__.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/binascii_hex.txt +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/conftest.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_box.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_cga.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_clip_by_rect.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_collection.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_coords.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_default_impl.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_delaunay.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_delegated.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_dlls.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_doctests.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_emptiness.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_empty_polygons.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_equality.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_geointerface.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_geomseq.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_getitem.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_hash.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_invalid_geometries.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_iterops.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_linear_referencing.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_linemerge.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_linestring.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_locale.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_mapping.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_minimum_rotated_rectangle.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_multi.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_multilinestring.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_multipoint.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_multipolygon.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_ndarrays.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_nearest.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_operators.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_orient.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_parallel_offset.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_persist.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_pickle.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_point.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_polygonize.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_polylabel.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_predicates.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_prepared.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_products_z.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_shared_paths.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_singularity.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_snap.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_split.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_strtree.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_strtree_nearest.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_styles.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_svg.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_transform.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_union.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_validation.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_vectorized.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_wkb.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_wkt.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/test_xy.py +0 -0
- {Shapely-1.7a2 → Shapely-1.7a3}/tests/threading_test.py +0 -0
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
Changes
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
1.7a3 (2019-12-31)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
Bug fixes:
|
|
8
|
+
|
|
9
|
+
- Add /usr/local/lib to the list of directories to be searched for the GEOS
|
|
10
|
+
shared library (#795).
|
|
11
|
+
- ops.substring now returns a line with coords in end-to-front order when given
|
|
12
|
+
a start position that is greater than the end position (#628).
|
|
13
|
+
- Implement ``__bool__()`` for geometry base classes so that ``bool(geom)``
|
|
14
|
+
returns the logical complement of ``geom.is_empty`` (#754).
|
|
15
|
+
- Remove assertion on the number of version-like strings found in the GEOS
|
|
16
|
+
version string. It could be 2 or 3.
|
|
17
|
+
|
|
4
18
|
1.7a2 (2019-06-21)
|
|
5
19
|
------------------
|
|
6
20
|
|
|
@@ -6,12 +6,12 @@ Shapely is written by:
|
|
|
6
6
|
* Sean Gillies <sean.gillies@gmail.com>
|
|
7
7
|
* Oliver Tonnhofer <olt@bogosoft.com>
|
|
8
8
|
* Joshua Arnott <josh@snorfalorpagus.net>
|
|
9
|
-
* Mike
|
|
9
|
+
* Mike Taves <mwtoews@gmail.com>
|
|
10
10
|
* Jacob Wasserman <jwasserman@gmail.com>
|
|
11
11
|
* Aron Bierbaum <aronbierbaum@gmail.com>
|
|
12
12
|
* Allan Adair <allan@rfspot.com>
|
|
13
13
|
* Johannes Schönberger <jschoenberger@demuc.de>
|
|
14
|
-
*
|
|
14
|
+
* George Ouzounoudis <geothrock@gmail.com>
|
|
15
15
|
* Phil Elson <pelson.pub@gmail.com>
|
|
16
16
|
* Howard Butler <hobu.inc@gmail.com>
|
|
17
17
|
* Kelsey Jordahl <kjordahl@enthought.com>
|
|
@@ -20,7 +20,7 @@ Shapely is written by:
|
|
|
20
20
|
* Gabi Davar <grizzly.nyo@gmail.com>
|
|
21
21
|
* Thibault Deutsch <thibault.deutsch@gmail.com>
|
|
22
22
|
* Dave Collins <dave@hopest.net>
|
|
23
|
-
*
|
|
23
|
+
* Frédéric Junod <frederic.junod@camptocamp.com>
|
|
24
24
|
* Brad Hards <bradh@frogmouth.net>
|
|
25
25
|
* David Baumgold <david@davidbaumgold.com>
|
|
26
26
|
* Henry Walshaw <henry.walshaw@gmail.com>
|
|
@@ -49,10 +49,15 @@ Shapely is written by:
|
|
|
49
49
|
* giumas <gmasetti@ccom.unh.edu>
|
|
50
50
|
* Leandro Lima <leandro@limaesilva.com.br>
|
|
51
51
|
* Maarten Vermeyen <maarten.vermeyen@rwo.vlaanderen.be>
|
|
52
|
-
*
|
|
52
|
+
* Joel Ostblom <joelostblom@users.noreply.github.com>
|
|
53
53
|
* Marco De Nadai <me@marcodena.it>
|
|
54
54
|
* Johan Euphrosine <proppy@aminche.com>
|
|
55
55
|
* James Gaboardi <jgaboardi@gmail.com>
|
|
56
|
+
* Denis Rykov <rykovd@gmail.com>
|
|
57
|
+
* Zachary Ware <zachary.ware@gmail.com>
|
|
58
|
+
* Pierre PACI <villerupt@gmail.com>
|
|
59
|
+
* Hugo van Kemenade (@hugovk)
|
|
60
|
+
* Juan Luis Cano Rodríguez <juanlu@satellogic.com>
|
|
56
61
|
|
|
57
62
|
See also: https://github.com/Toblerity/Shapely/graphs/contributors.
|
|
58
63
|
|
|
@@ -63,6 +68,6 @@ Additional help from:
|
|
|
63
68
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
64
69
|
|
|
65
70
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
66
|
-
U.S. National Endowment for the Humanities (
|
|
71
|
+
U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
67
72
|
|
|
68
|
-
.. _Pleiades:
|
|
73
|
+
.. _Pleiades: https://pleiades.stoa.org
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7a3
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/Toblerity/Shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -26,7 +26,7 @@ Description: =======
|
|
|
26
26
|
|
|
27
27
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
28
28
|
planar geometric objects. It is based on the widely deployed `GEOS
|
|
29
|
-
<
|
|
29
|
+
<https://trac.osgeo.org/geos/>`__ (the engine of `PostGIS
|
|
30
30
|
<http://postgis.org>`__) and `JTS
|
|
31
31
|
<https://locationtech.github.io/jts/>`__ (from which GEOS is ported)
|
|
32
32
|
libraries. Shapely is not concerned with data formats or coordinate systems,
|
|
@@ -53,8 +53,8 @@ Description: =======
|
|
|
53
53
|
-------------------
|
|
54
54
|
|
|
55
55
|
Windows users have two good installation options: the wheels at
|
|
56
|
-
|
|
57
|
-
Anaconda platform's `conda-forge <https://conda-forge.
|
|
56
|
+
https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely and the
|
|
57
|
+
Anaconda platform's `conda-forge <https://conda-forge.org/>`__
|
|
58
58
|
channel.
|
|
59
59
|
|
|
60
60
|
OS X and Linux users can get Shapely wheels with GEOS included from the
|
|
@@ -165,7 +165,7 @@ Description: =======
|
|
|
165
165
|
=======
|
|
166
166
|
|
|
167
167
|
Questions about using Shapely may be asked on the `GIS StackExchange
|
|
168
|
-
<
|
|
168
|
+
<https://gis.stackexchange.com/questions/tagged/shapely>`__ using the "shapely"
|
|
169
169
|
tag.
|
|
170
170
|
|
|
171
171
|
Bugs may be reported at https://github.com/Toblerity/Shapely/issues.
|
|
@@ -179,12 +179,12 @@ Description: =======
|
|
|
179
179
|
* Sean Gillies <sean.gillies@gmail.com>
|
|
180
180
|
* Oliver Tonnhofer <olt@bogosoft.com>
|
|
181
181
|
* Joshua Arnott <josh@snorfalorpagus.net>
|
|
182
|
-
* Mike
|
|
182
|
+
* Mike Taves <mwtoews@gmail.com>
|
|
183
183
|
* Jacob Wasserman <jwasserman@gmail.com>
|
|
184
184
|
* Aron Bierbaum <aronbierbaum@gmail.com>
|
|
185
185
|
* Allan Adair <allan@rfspot.com>
|
|
186
186
|
* Johannes Schönberger <jschoenberger@demuc.de>
|
|
187
|
-
*
|
|
187
|
+
* George Ouzounoudis <geothrock@gmail.com>
|
|
188
188
|
* Phil Elson <pelson.pub@gmail.com>
|
|
189
189
|
* Howard Butler <hobu.inc@gmail.com>
|
|
190
190
|
* Kelsey Jordahl <kjordahl@enthought.com>
|
|
@@ -193,7 +193,7 @@ Description: =======
|
|
|
193
193
|
* Gabi Davar <grizzly.nyo@gmail.com>
|
|
194
194
|
* Thibault Deutsch <thibault.deutsch@gmail.com>
|
|
195
195
|
* Dave Collins <dave@hopest.net>
|
|
196
|
-
*
|
|
196
|
+
* Frédéric Junod <frederic.junod@camptocamp.com>
|
|
197
197
|
* Brad Hards <bradh@frogmouth.net>
|
|
198
198
|
* David Baumgold <david@davidbaumgold.com>
|
|
199
199
|
* Henry Walshaw <henry.walshaw@gmail.com>
|
|
@@ -222,10 +222,15 @@ Description: =======
|
|
|
222
222
|
* giumas <gmasetti@ccom.unh.edu>
|
|
223
223
|
* Leandro Lima <leandro@limaesilva.com.br>
|
|
224
224
|
* Maarten Vermeyen <maarten.vermeyen@rwo.vlaanderen.be>
|
|
225
|
-
*
|
|
225
|
+
* Joel Ostblom <joelostblom@users.noreply.github.com>
|
|
226
226
|
* Marco De Nadai <me@marcodena.it>
|
|
227
227
|
* Johan Euphrosine <proppy@aminche.com>
|
|
228
228
|
* James Gaboardi <jgaboardi@gmail.com>
|
|
229
|
+
* Denis Rykov <rykovd@gmail.com>
|
|
230
|
+
* Zachary Ware <zachary.ware@gmail.com>
|
|
231
|
+
* Pierre PACI <villerupt@gmail.com>
|
|
232
|
+
* Hugo van Kemenade (@hugovk)
|
|
233
|
+
* Juan Luis Cano Rodríguez <juanlu@satellogic.com>
|
|
229
234
|
|
|
230
235
|
See also: https://github.com/Toblerity/Shapely/graphs/contributors.
|
|
231
236
|
|
|
@@ -236,14 +241,28 @@ Description: =======
|
|
|
236
241
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
237
242
|
|
|
238
243
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
239
|
-
U.S. National Endowment for the Humanities (
|
|
244
|
+
U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
240
245
|
|
|
241
|
-
.. _Pleiades:
|
|
246
|
+
.. _Pleiades: https://pleiades.stoa.org
|
|
242
247
|
|
|
243
248
|
|
|
244
249
|
Changes
|
|
245
250
|
=======
|
|
246
251
|
|
|
252
|
+
1.7a3 (2019-12-31)
|
|
253
|
+
------------------
|
|
254
|
+
|
|
255
|
+
Bug fixes:
|
|
256
|
+
|
|
257
|
+
- Add /usr/local/lib to the list of directories to be searched for the GEOS
|
|
258
|
+
shared library (#795).
|
|
259
|
+
- ops.substring now returns a line with coords in end-to-front order when given
|
|
260
|
+
a start position that is greater than the end position (#628).
|
|
261
|
+
- Implement ``__bool__()`` for geometry base classes so that ``bool(geom)``
|
|
262
|
+
returns the logical complement of ``geom.is_empty`` (#754).
|
|
263
|
+
- Remove assertion on the number of version-like strings found in the GEOS
|
|
264
|
+
version string. It could be 2 or 3.
|
|
265
|
+
|
|
247
266
|
1.7a2 (2019-06-21)
|
|
248
267
|
------------------
|
|
249
268
|
|
|
@@ -918,12 +937,13 @@ Classifier: Operating System :: OS Independent
|
|
|
918
937
|
Classifier: Programming Language :: Python :: 2
|
|
919
938
|
Classifier: Programming Language :: Python :: 2.7
|
|
920
939
|
Classifier: Programming Language :: Python :: 3
|
|
921
|
-
Classifier: Programming Language :: Python :: 3.4
|
|
922
940
|
Classifier: Programming Language :: Python :: 3.5
|
|
923
941
|
Classifier: Programming Language :: Python :: 3.6
|
|
942
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
943
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
924
944
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
925
945
|
Requires: Python (>=2.6)
|
|
926
946
|
Requires: libgeos_c (>=3.3)
|
|
927
947
|
Provides-Extra: test
|
|
928
|
-
Provides-Extra: vectorized
|
|
929
948
|
Provides-Extra: all
|
|
949
|
+
Provides-Extra: vectorized
|
|
@@ -16,7 +16,7 @@ Manipulation and analysis of geometric objects in the Cartesian plane.
|
|
|
16
16
|
|
|
17
17
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
18
18
|
planar geometric objects. It is based on the widely deployed `GEOS
|
|
19
|
-
<
|
|
19
|
+
<https://trac.osgeo.org/geos/>`__ (the engine of `PostGIS
|
|
20
20
|
<http://postgis.org>`__) and `JTS
|
|
21
21
|
<https://locationtech.github.io/jts/>`__ (from which GEOS is ported)
|
|
22
22
|
libraries. Shapely is not concerned with data formats or coordinate systems,
|
|
@@ -43,8 +43,8 @@ Built distributions
|
|
|
43
43
|
-------------------
|
|
44
44
|
|
|
45
45
|
Windows users have two good installation options: the wheels at
|
|
46
|
-
|
|
47
|
-
Anaconda platform's `conda-forge <https://conda-forge.
|
|
46
|
+
https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely and the
|
|
47
|
+
Anaconda platform's `conda-forge <https://conda-forge.org/>`__
|
|
48
48
|
channel.
|
|
49
49
|
|
|
50
50
|
OS X and Linux users can get Shapely wheels with GEOS included from the
|
|
@@ -155,7 +155,7 @@ Support
|
|
|
155
155
|
=======
|
|
156
156
|
|
|
157
157
|
Questions about using Shapely may be asked on the `GIS StackExchange
|
|
158
|
-
<
|
|
158
|
+
<https://gis.stackexchange.com/questions/tagged/shapely>`__ using the "shapely"
|
|
159
159
|
tag.
|
|
160
160
|
|
|
161
161
|
Bugs may be reported at https://github.com/Toblerity/Shapely/issues.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7a3
|
|
4
4
|
Summary: Geometric objects, predicates, and operations
|
|
5
5
|
Home-page: https://github.com/Toblerity/Shapely
|
|
6
6
|
Author: Sean Gillies
|
|
@@ -26,7 +26,7 @@ Description: =======
|
|
|
26
26
|
|
|
27
27
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
28
28
|
planar geometric objects. It is based on the widely deployed `GEOS
|
|
29
|
-
<
|
|
29
|
+
<https://trac.osgeo.org/geos/>`__ (the engine of `PostGIS
|
|
30
30
|
<http://postgis.org>`__) and `JTS
|
|
31
31
|
<https://locationtech.github.io/jts/>`__ (from which GEOS is ported)
|
|
32
32
|
libraries. Shapely is not concerned with data formats or coordinate systems,
|
|
@@ -53,8 +53,8 @@ Description: =======
|
|
|
53
53
|
-------------------
|
|
54
54
|
|
|
55
55
|
Windows users have two good installation options: the wheels at
|
|
56
|
-
|
|
57
|
-
Anaconda platform's `conda-forge <https://conda-forge.
|
|
56
|
+
https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely and the
|
|
57
|
+
Anaconda platform's `conda-forge <https://conda-forge.org/>`__
|
|
58
58
|
channel.
|
|
59
59
|
|
|
60
60
|
OS X and Linux users can get Shapely wheels with GEOS included from the
|
|
@@ -165,7 +165,7 @@ Description: =======
|
|
|
165
165
|
=======
|
|
166
166
|
|
|
167
167
|
Questions about using Shapely may be asked on the `GIS StackExchange
|
|
168
|
-
<
|
|
168
|
+
<https://gis.stackexchange.com/questions/tagged/shapely>`__ using the "shapely"
|
|
169
169
|
tag.
|
|
170
170
|
|
|
171
171
|
Bugs may be reported at https://github.com/Toblerity/Shapely/issues.
|
|
@@ -179,12 +179,12 @@ Description: =======
|
|
|
179
179
|
* Sean Gillies <sean.gillies@gmail.com>
|
|
180
180
|
* Oliver Tonnhofer <olt@bogosoft.com>
|
|
181
181
|
* Joshua Arnott <josh@snorfalorpagus.net>
|
|
182
|
-
* Mike
|
|
182
|
+
* Mike Taves <mwtoews@gmail.com>
|
|
183
183
|
* Jacob Wasserman <jwasserman@gmail.com>
|
|
184
184
|
* Aron Bierbaum <aronbierbaum@gmail.com>
|
|
185
185
|
* Allan Adair <allan@rfspot.com>
|
|
186
186
|
* Johannes Schönberger <jschoenberger@demuc.de>
|
|
187
|
-
*
|
|
187
|
+
* George Ouzounoudis <geothrock@gmail.com>
|
|
188
188
|
* Phil Elson <pelson.pub@gmail.com>
|
|
189
189
|
* Howard Butler <hobu.inc@gmail.com>
|
|
190
190
|
* Kelsey Jordahl <kjordahl@enthought.com>
|
|
@@ -193,7 +193,7 @@ Description: =======
|
|
|
193
193
|
* Gabi Davar <grizzly.nyo@gmail.com>
|
|
194
194
|
* Thibault Deutsch <thibault.deutsch@gmail.com>
|
|
195
195
|
* Dave Collins <dave@hopest.net>
|
|
196
|
-
*
|
|
196
|
+
* Frédéric Junod <frederic.junod@camptocamp.com>
|
|
197
197
|
* Brad Hards <bradh@frogmouth.net>
|
|
198
198
|
* David Baumgold <david@davidbaumgold.com>
|
|
199
199
|
* Henry Walshaw <henry.walshaw@gmail.com>
|
|
@@ -222,10 +222,15 @@ Description: =======
|
|
|
222
222
|
* giumas <gmasetti@ccom.unh.edu>
|
|
223
223
|
* Leandro Lima <leandro@limaesilva.com.br>
|
|
224
224
|
* Maarten Vermeyen <maarten.vermeyen@rwo.vlaanderen.be>
|
|
225
|
-
*
|
|
225
|
+
* Joel Ostblom <joelostblom@users.noreply.github.com>
|
|
226
226
|
* Marco De Nadai <me@marcodena.it>
|
|
227
227
|
* Johan Euphrosine <proppy@aminche.com>
|
|
228
228
|
* James Gaboardi <jgaboardi@gmail.com>
|
|
229
|
+
* Denis Rykov <rykovd@gmail.com>
|
|
230
|
+
* Zachary Ware <zachary.ware@gmail.com>
|
|
231
|
+
* Pierre PACI <villerupt@gmail.com>
|
|
232
|
+
* Hugo van Kemenade (@hugovk)
|
|
233
|
+
* Juan Luis Cano Rodríguez <juanlu@satellogic.com>
|
|
229
234
|
|
|
230
235
|
See also: https://github.com/Toblerity/Shapely/graphs/contributors.
|
|
231
236
|
|
|
@@ -236,14 +241,28 @@ Description: =======
|
|
|
236
241
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
237
242
|
|
|
238
243
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
239
|
-
U.S. National Endowment for the Humanities (
|
|
244
|
+
U.S. National Endowment for the Humanities (https://www.neh.gov).
|
|
240
245
|
|
|
241
|
-
.. _Pleiades:
|
|
246
|
+
.. _Pleiades: https://pleiades.stoa.org
|
|
242
247
|
|
|
243
248
|
|
|
244
249
|
Changes
|
|
245
250
|
=======
|
|
246
251
|
|
|
252
|
+
1.7a3 (2019-12-31)
|
|
253
|
+
------------------
|
|
254
|
+
|
|
255
|
+
Bug fixes:
|
|
256
|
+
|
|
257
|
+
- Add /usr/local/lib to the list of directories to be searched for the GEOS
|
|
258
|
+
shared library (#795).
|
|
259
|
+
- ops.substring now returns a line with coords in end-to-front order when given
|
|
260
|
+
a start position that is greater than the end position (#628).
|
|
261
|
+
- Implement ``__bool__()`` for geometry base classes so that ``bool(geom)``
|
|
262
|
+
returns the logical complement of ``geom.is_empty`` (#754).
|
|
263
|
+
- Remove assertion on the number of version-like strings found in the GEOS
|
|
264
|
+
version string. It could be 2 or 3.
|
|
265
|
+
|
|
247
266
|
1.7a2 (2019-06-21)
|
|
248
267
|
------------------
|
|
249
268
|
|
|
@@ -918,12 +937,13 @@ Classifier: Operating System :: OS Independent
|
|
|
918
937
|
Classifier: Programming Language :: Python :: 2
|
|
919
938
|
Classifier: Programming Language :: Python :: 2.7
|
|
920
939
|
Classifier: Programming Language :: Python :: 3
|
|
921
|
-
Classifier: Programming Language :: Python :: 3.4
|
|
922
940
|
Classifier: Programming Language :: Python :: 3.5
|
|
923
941
|
Classifier: Programming Language :: Python :: 3.6
|
|
942
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
943
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
924
944
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
925
945
|
Requires: Python (>=2.6)
|
|
926
946
|
Requires: libgeos_c (>=3.3)
|
|
927
947
|
Provides-Extra: test
|
|
928
|
-
Provides-Extra: vectorized
|
|
929
948
|
Provides-Extra: all
|
|
949
|
+
Provides-Extra: vectorized
|
|
@@ -72,6 +72,7 @@ tests/binascii_hex.txt
|
|
|
72
72
|
tests/conftest.py
|
|
73
73
|
tests/test_affinity.py
|
|
74
74
|
tests/test_box.py
|
|
75
|
+
tests/test_buffer.py
|
|
75
76
|
tests/test_cga.py
|
|
76
77
|
tests/test_clip_by_rect.py
|
|
77
78
|
tests/test_collection.py
|
|
@@ -85,6 +86,7 @@ tests/test_emptiness.py
|
|
|
85
86
|
tests/test_empty_polygons.py
|
|
86
87
|
tests/test_equality.py
|
|
87
88
|
tests/test_geointerface.py
|
|
89
|
+
tests/test_geometry_base.py
|
|
88
90
|
tests/test_geomseq.py
|
|
89
91
|
tests/test_geos_err_handler.py
|
|
90
92
|
tests/test_getitem.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.7a3
|
|
@@ -118,7 +118,7 @@ Relationships
|
|
|
118
118
|
The spatial data model is accompanied by a group of natural language
|
|
119
119
|
relationships between geometric objects – `contains`, `intersects`, `overlaps`,
|
|
120
120
|
`touches`, etc. – and a theoretical framework for understanding them using the
|
|
121
|
-
3x3 matrix of the mutual intersections of their component point sets [
|
|
121
|
+
3x3 matrix of the mutual intersections of their component point sets [3]_: the
|
|
122
122
|
DE-9IM. A comprehensive review of the relationships in terms of the DE-9IM is
|
|
123
123
|
found in [4]_ and will not be reiterated in this manual.
|
|
124
124
|
|
|
@@ -207,8 +207,8 @@ General Attributes and Methods
|
|
|
207
207
|
|
|
208
208
|
.. code-block:: pycon
|
|
209
209
|
|
|
210
|
-
>>>
|
|
211
|
-
Point
|
|
210
|
+
>>> Point(0, 0).geom_type
|
|
211
|
+
'Point'
|
|
212
212
|
|
|
213
213
|
.. method:: object.distance(other)
|
|
214
214
|
|
|
@@ -1988,13 +1988,22 @@ for `func`.
|
|
|
1988
1988
|
from functools import partial
|
|
1989
1989
|
import pyproj
|
|
1990
1990
|
|
|
1991
|
+
proj_in = pyproj.Proj(init='epsg:4326')
|
|
1992
|
+
proj_out = pyproj.Proj(init='epsg:26913')
|
|
1993
|
+
|
|
1991
1994
|
project = partial(
|
|
1992
1995
|
pyproj.transform,
|
|
1993
|
-
|
|
1994
|
-
|
|
1996
|
+
proj_in,
|
|
1997
|
+
proj_out)
|
|
1995
1998
|
|
|
1996
1999
|
g2 = transform(project, g1)
|
|
1997
2000
|
|
|
2001
|
+
If using `pyproj>=2.1.0` a more performant method would be
|
|
2002
|
+
|
|
2003
|
+
.. code-block:: python
|
|
2004
|
+
|
|
2005
|
+
project = pyproj.Transformer.from_proj(proj_in, proj_out).transform
|
|
2006
|
+
|
|
1998
2007
|
Lambda expressions such as the one in
|
|
1999
2008
|
|
|
2000
2009
|
.. code-block:: python
|
|
@@ -2371,6 +2380,29 @@ accessible via :attr:`shapely.__version__`,
|
|
|
2371
2380
|
>>> shapely.geos.geos_version_string
|
|
2372
2381
|
'3.3.0-CAPI-1.7.0'
|
|
2373
2382
|
|
|
2383
|
+
Polylabel
|
|
2384
|
+
---------
|
|
2385
|
+
|
|
2386
|
+
.. function:: shapely.ops.polylabel(polygon, tolerance)
|
|
2387
|
+
|
|
2388
|
+
Finds the approximate location of the pole of inaccessibility for a given
|
|
2389
|
+
polygon. Based on Vladimir Agafonkin's polylabel_.
|
|
2390
|
+
|
|
2391
|
+
`New in version 1.6.0`
|
|
2392
|
+
|
|
2393
|
+
.. note::
|
|
2394
|
+
|
|
2395
|
+
Prior to 1.7 `polylabel` must be imported from `shapely.algorithms.polylabel`
|
|
2396
|
+
instead of `shapely.ops`.
|
|
2397
|
+
|
|
2398
|
+
.. code-block:: pycon
|
|
2399
|
+
|
|
2400
|
+
>>> from shapely.ops import polylabel
|
|
2401
|
+
>>> polygon = LineString([(0, 0), (50, 200), (100, 100), (20, 50),
|
|
2402
|
+
... (-100, -20), (-150, -200)]).buffer(100)
|
|
2403
|
+
>>> label = polylabel(polygon, tolerance=10)
|
|
2404
|
+
>>> label.wkt
|
|
2405
|
+
'POINT (59.35615556364569 121.8391962974644)'
|
|
2374
2406
|
|
|
2375
2407
|
STR-packed R-tree
|
|
2376
2408
|
=================
|
|
@@ -2447,8 +2479,8 @@ appropriate type, use ``loads()``.
|
|
|
2447
2479
|
|
|
2448
2480
|
>> from shapely.wkb import dumps, loads
|
|
2449
2481
|
>>> wkb = dumps(Point(0, 0))
|
|
2450
|
-
>>>
|
|
2451
|
-
010100000000000000000000000000000000000000
|
|
2482
|
+
>>> wkb.encode('hex')
|
|
2483
|
+
'010100000000000000000000000000000000000000'
|
|
2452
2484
|
>>> loads(wkb).wkt
|
|
2453
2485
|
'POINT (0.0000000000000000 0.0000000000000000)'
|
|
2454
2486
|
|
|
@@ -2466,10 +2498,10 @@ All of Shapely's geometry types are supported by these functions.
|
|
|
2466
2498
|
|
|
2467
2499
|
>> from shapely.wkt import dumps, loads
|
|
2468
2500
|
>> wkt = dumps(Point(0, 0))
|
|
2469
|
-
>>>
|
|
2470
|
-
POINT (0.0000000000000000 0.0000000000000000)
|
|
2471
|
-
>>> loads(wkt).wkt
|
|
2501
|
+
>>> wkt
|
|
2472
2502
|
'POINT (0.0000000000000000 0.0000000000000000)'
|
|
2503
|
+
>>> loads(wkt).wkt
|
|
2504
|
+
'POINT (0 0)'
|
|
2473
2505
|
|
|
2474
2506
|
Numpy and Python Arrays
|
|
2475
2507
|
-----------------------
|
|
@@ -2680,12 +2712,8 @@ References
|
|
|
2680
2712
|
|
|
2681
2713
|
.. _GEOS: https://trac.osgeo.org/geos/
|
|
2682
2714
|
.. _Java Topology Suite: https://projects.eclipse.org/projects/locationtech.jts
|
|
2683
|
-
.. _JTS: https://projects.eclipse.org/projects/locationtech.jts
|
|
2684
2715
|
.. _PostGIS: http://postgis.refractions.net
|
|
2685
|
-
..
|
|
2686
|
-
.. _Open Geospatial Consortium: http://www.opengeospatial.org/
|
|
2687
|
-
.. _Davis: https://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html
|
|
2688
|
-
.. _Understanding spatial relations: http://edndoc.esri.com/arcsde/9.1/general_topics/understand_spatial_relations.htm
|
|
2716
|
+
.. _Open Geospatial Consortium: https://www.opengeospatial.org/
|
|
2689
2717
|
.. _Strobl-PDF: https://giswiki.hsr.ch/images/3/3d/9dem_springer.pdf
|
|
2690
2718
|
.. |Strobl-PDF| replace:: PDF
|
|
2691
2719
|
.. _JTS-PDF: https://github.com/locationtech/jts/raw/master/doc/JTS%20Technical%20Specs.pdf
|
|
@@ -2693,3 +2721,4 @@ References
|
|
|
2693
2721
|
.. _frozenset: https://docs.python.org/library/stdtypes.html#frozenset
|
|
2694
2722
|
.. _Sorting HowTo: https://wiki.python.org/moin/HowTo/Sorting/
|
|
2695
2723
|
.. _Python geo interface: https://gist.github.com/2217756
|
|
2724
|
+
.. _polylabel: https://github.com/mapbox/polylabel
|
|
@@ -220,9 +220,10 @@ setup_args = dict(
|
|
|
220
220
|
'Programming Language :: Python :: 2',
|
|
221
221
|
'Programming Language :: Python :: 2.7',
|
|
222
222
|
'Programming Language :: Python :: 3',
|
|
223
|
-
'Programming Language :: Python :: 3.4',
|
|
224
223
|
'Programming Language :: Python :: 3.5',
|
|
225
224
|
'Programming Language :: Python :: 3.6',
|
|
225
|
+
'Programming Language :: Python :: 3.7',
|
|
226
|
+
'Programming Language :: Python :: 3.8',
|
|
226
227
|
'Topic :: Scientific/Engineering :: GIS',
|
|
227
228
|
],
|
|
228
229
|
cmdclass = {},
|
|
@@ -315,25 +316,18 @@ if (platform.python_implementation() == 'PyPy'):
|
|
|
315
316
|
ext_modules = []
|
|
316
317
|
libraries = []
|
|
317
318
|
|
|
318
|
-
if os.path.exists("MANIFEST.in"):
|
|
319
|
-
pyx_file = "shapely/speedups/_speedups.pyx"
|
|
320
|
-
c_file = "shapely/speedups/_speedups.c"
|
|
321
319
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
force_cython = True
|
|
320
|
+
pyx_file = "shapely/speedups/_speedups.pyx"
|
|
321
|
+
c_file = "shapely/speedups/_speedups.c"
|
|
325
322
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
raise
|
|
335
|
-
if not os.path.exists(c_file):
|
|
336
|
-
log.warn("speedup extension not found")
|
|
323
|
+
force_cython = False
|
|
324
|
+
# Always regenerate for sdist or absent c file
|
|
325
|
+
if 'sdist' in sys.argv or not os.path.exists(c_file):
|
|
326
|
+
force_cython = True
|
|
327
|
+
# Also regenerate if pyx_file is outdated.
|
|
328
|
+
elif os.path.exists(c_file):
|
|
329
|
+
if os.path.getmtime(pyx_file) > os.path.getmtime(c_file):
|
|
330
|
+
force_cython = True
|
|
337
331
|
|
|
338
332
|
ext_modules = [
|
|
339
333
|
Extension("shapely.speedups._speedups", ["shapely/speedups/_speedups.c"],
|
|
@@ -366,6 +360,19 @@ try:
|
|
|
366
360
|
except ImportError:
|
|
367
361
|
log.info("Numpy or Cython not available, shapely.vectorized submodule "
|
|
368
362
|
"not being built.")
|
|
363
|
+
force_cython = False
|
|
364
|
+
|
|
365
|
+
try:
|
|
366
|
+
if force_cython:
|
|
367
|
+
log.info("Updating C extension with Cython.")
|
|
368
|
+
subprocess.check_call(["cython", "shapely/speedups/_speedups.pyx"])
|
|
369
|
+
except (subprocess.CalledProcessError, OSError):
|
|
370
|
+
log.warn("Could not (re)create C extension with Cython.")
|
|
371
|
+
if force_cython:
|
|
372
|
+
raise
|
|
373
|
+
|
|
374
|
+
if not os.path.exists(c_file):
|
|
375
|
+
log.warn("speedup extension not found")
|
|
369
376
|
|
|
370
377
|
try:
|
|
371
378
|
# try building with speedups
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.7a3"
|
|
@@ -165,7 +165,7 @@ if sys.platform.startswith('linux'):
|
|
|
165
165
|
if not lgeos:
|
|
166
166
|
lgeos = load_dll('geos_c',
|
|
167
167
|
fallbacks=['libgeos_c.so.1', 'libgeos_c.so'])
|
|
168
|
-
free = load_dll('c').free
|
|
168
|
+
free = load_dll('c', fallbacks=['libc.so.6']).free
|
|
169
169
|
free.argtypes = [c_void_p]
|
|
170
170
|
free.restype = None
|
|
171
171
|
|
|
@@ -181,6 +181,8 @@ elif sys.platform == 'darwin':
|
|
|
181
181
|
"/Library/Frameworks/GEOS.framework/Versions/Current/GEOS",
|
|
182
182
|
# macports
|
|
183
183
|
'/opt/local/lib/libgeos_c.dylib',
|
|
184
|
+
# homebrew
|
|
185
|
+
'/usr/local/lib/libgeos_c.dylib',
|
|
184
186
|
]
|
|
185
187
|
lgeos = load_dll('geos_c', fallbacks=alt_paths)
|
|
186
188
|
|
|
@@ -239,7 +241,6 @@ def _geos_version():
|
|
|
239
241
|
geos_version_string = geos_version_string.decode('ascii')
|
|
240
242
|
|
|
241
243
|
res = re.findall(r'(\d+)\.(\d+)\.(\d+)', geos_version_string)
|
|
242
|
-
assert len(res) == 2, res
|
|
243
244
|
geos_version = tuple(int(x) for x in res[0])
|
|
244
245
|
capi_version = tuple(int(x) for x in res[1])
|
|
245
246
|
|
|
@@ -43,6 +43,8 @@ cdef extern from "geos_c.h":
|
|
|
43
43
|
char GEOSHasZ_r(GEOSContextHandle_t, GEOSGeometry *) nogil
|
|
44
44
|
char GEOSisRing_r(GEOSContextHandle_t, GEOSGeometry *) nogil
|
|
45
45
|
char GEOSisClosed_r(GEOSContextHandle_t, GEOSGeometry *) nogil
|
|
46
|
+
char GEOSisValid_r(GEOSContextHandle_t, GEOSGeometry *) nogil
|
|
47
|
+
char GEOSisSimple_r(GEOSContextHandle_t, GEOSGeometry *) nogil
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
cdef GEOSContextHandle_t get_geos_context_handle():
|
|
@@ -151,8 +151,10 @@ def rotate(geom, angle, origin='center', use_radians=False):
|
|
|
151
151
|
xoff = x0 - x0 * cos(r) + y0 * sin(r)
|
|
152
152
|
yoff = y0 - x0 * sin(r) - y0 * cos(r)
|
|
153
153
|
"""
|
|
154
|
+
if geom.is_empty:
|
|
155
|
+
return geom
|
|
154
156
|
if not use_radians: # convert from degrees
|
|
155
|
-
angle
|
|
157
|
+
angle = angle * pi/180.0
|
|
156
158
|
cosp = cos(angle)
|
|
157
159
|
sinp = sin(angle)
|
|
158
160
|
if abs(cosp) < 2.5e-16:
|
|
@@ -190,6 +192,8 @@ def scale(geom, xfact=1.0, yfact=1.0, zfact=1.0, origin='center'):
|
|
|
190
192
|
yoff = y0 - y0 * yfact
|
|
191
193
|
zoff = z0 - z0 * zfact
|
|
192
194
|
"""
|
|
195
|
+
if geom.is_empty:
|
|
196
|
+
return geom
|
|
193
197
|
x0, y0, z0 = interpret_origin(geom, origin, 3)
|
|
194
198
|
|
|
195
199
|
matrix = (xfact, 0.0, 0.0,
|
|
@@ -220,9 +224,11 @@ def skew(geom, xs=0.0, ys=0.0, origin='center', use_radians=False):
|
|
|
220
224
|
xoff = -y0 * tan(xs)
|
|
221
225
|
yoff = -x0 * tan(ys)
|
|
222
226
|
"""
|
|
227
|
+
if geom.is_empty:
|
|
228
|
+
return geom
|
|
223
229
|
if not use_radians: # convert from degrees
|
|
224
|
-
xs
|
|
225
|
-
ys
|
|
230
|
+
xs = xs * pi/180.0
|
|
231
|
+
ys = ys * pi/180.0
|
|
226
232
|
tanx = tan(xs)
|
|
227
233
|
tany = tan(ys)
|
|
228
234
|
if abs(tanx) < 2.5e-16:
|
|
@@ -248,6 +254,8 @@ def translate(geom, xoff=0.0, yoff=0.0, zoff=0.0):
|
|
|
248
254
|
| 0 0 1 zoff |
|
|
249
255
|
\ 0 0 0 1 /
|
|
250
256
|
"""
|
|
257
|
+
if geom.is_empty:
|
|
258
|
+
return geom
|
|
251
259
|
matrix = (1.0, 0.0, 0.0,
|
|
252
260
|
0.0, 1.0, 0.0,
|
|
253
261
|
0.0, 0.0, 1.0,
|