shapely 1.2b6__tar.gz → 1.2rc1__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.2b6 → Shapely-1.2rc1}/CHANGES.txt +4 -0
- Shapely-1.2rc1/CREDITS.txt +24 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/PKG-INFO +23 -21
- {Shapely-1.2b6 → Shapely-1.2rc1}/README.txt +22 -20
- {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/PKG-INFO +23 -21
- {Shapely-1.2b6 → Shapely-1.2rc1}/setup.py +1 -1
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/base.py +27 -9
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/linestring.py +4 -18
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/point.py +7 -18
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/polygon.py +7 -35
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/proxy.py +18 -11
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geos.py +4 -3
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/prepared.py +3 -3
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/__init__.py +2 -1
- Shapely-1.2b6/CREDITS.txt +0 -9
- {Shapely-1.2b6 → Shapely-1.2rc1}/LICENSE.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/MANIFEST.in +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/SOURCES.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/dependency_links.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/top_level.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/examples/dissolve.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/examples/intersect.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/setup.cfg +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/__init__.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/coords.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/ctypes_declarations.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/__init__.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/collection.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/geo.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multilinestring.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multipoint.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multipolygon.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geoms.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/impl.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/iterops.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/linref.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/ops.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/predicates.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Array.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/GeoInterface.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/IterOps.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/LineString.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiLineString.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiPoint.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiPolygon.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Operations.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Persist.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Point.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Polygon.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Predicates.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/attribute-chains.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/binascii_hex.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/dimensions.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/invalid_intersection.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/linear-referencing.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/linemerge.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/polygonize.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_doctests.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_equality.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_geomseq.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_prepared.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_xy.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/threading_test.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/wkt_locale.txt +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/topology.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/wkb.py +0 -0
- {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/wkt.py +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Shapely is written by:
|
|
2
|
+
|
|
3
|
+
* Sean Gillies
|
|
4
|
+
* Aron Bierbaum
|
|
5
|
+
* Kai Lautaportti
|
|
6
|
+
|
|
7
|
+
Patches contributed by:
|
|
8
|
+
|
|
9
|
+
* Howard Butler
|
|
10
|
+
* Fr |eaigue| d |eaigue| ric Junod
|
|
11
|
+
* Eric Lemoine
|
|
12
|
+
* Jonathan Tartley
|
|
13
|
+
* Kristian Thy
|
|
14
|
+
* Oliver Tonnhofer
|
|
15
|
+
|
|
16
|
+
Additional help from:
|
|
17
|
+
|
|
18
|
+
* Justin Bronn (GeoDjango) for ctypes inspiration
|
|
19
|
+
* Martin Davis (JTS)
|
|
20
|
+
* Jaakko Salli for the Windows distributions
|
|
21
|
+
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
22
|
+
|
|
23
|
+
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
24
|
+
U.S. National Endowment for the Humanities (http://www.neh.gov).
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 1.0
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2rc1
|
|
4
4
|
Summary: Planar geometries, predicates, and operations
|
|
5
5
|
Home-page: http://trac.gispython.org/lab/wiki/Shapely
|
|
6
6
|
Author: Sean Gillies
|
|
7
7
|
Author-email: sean.gillies@gmail.com
|
|
8
8
|
License: BSD
|
|
9
|
-
Description:
|
|
9
|
+
Description: =======
|
|
10
10
|
Shapely
|
|
11
11
|
=======
|
|
12
12
|
|
|
@@ -15,9 +15,9 @@ Description:
|
|
|
15
15
|
:height: 400
|
|
16
16
|
|
|
17
17
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
18
|
-
planar geometries. It is not concerned with data formats or coordinate
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
planar geometries. It is not concerned with data formats or coordinate systems.
|
|
19
|
+
It is based on the widely deployed GEOS_ (the engine of PostGIS_) and JTS_
|
|
20
|
+
(from which GEOS is ported) libraries. This C dependency is traded for the
|
|
21
21
|
ability to analyze geometries with blazing speed.
|
|
22
22
|
|
|
23
23
|
In a nutshell: Shapely lets you do PostGIS-ish stuff outside the context of a
|
|
@@ -27,7 +27,6 @@ Description:
|
|
|
27
27
|
* Shapely manual_
|
|
28
28
|
* Shapely `example apps`_
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
Dependencies
|
|
32
31
|
------------
|
|
33
32
|
|
|
@@ -36,7 +35,6 @@ Description:
|
|
|
36
35
|
* Python >=2.5,<3
|
|
37
36
|
* libgeos_c >=3.1 (3.0 and below have not been tested, YMMV)
|
|
38
37
|
|
|
39
|
-
|
|
40
38
|
Installation
|
|
41
39
|
------------
|
|
42
40
|
|
|
@@ -50,7 +48,6 @@ Description:
|
|
|
50
48
|
|
|
51
49
|
$ python setup.py install
|
|
52
50
|
|
|
53
|
-
|
|
54
51
|
Usage
|
|
55
52
|
-----
|
|
56
53
|
|
|
@@ -67,12 +64,19 @@ Description:
|
|
|
67
64
|
See the manual_ for comprehensive usage snippets and the dissolve.py and
|
|
68
65
|
intersect.py `example apps`_.
|
|
69
66
|
|
|
67
|
+
Integration
|
|
68
|
+
-----------
|
|
69
|
+
|
|
70
|
+
Shapely does not read or write data files, but it can serialize and deserialize
|
|
71
|
+
using several well known formats and protocols. The shapely.wkb and shapely.wkt
|
|
72
|
+
modules provide dumpers and loaders inspired by Python's pickle module.::
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
>>> from shapely.wkt import dumps, loads
|
|
75
|
+
>>> dumps(loads('POINT (0 0)'))
|
|
76
|
+
'POINT (0.0000000000000000 0.0000000000000000)'
|
|
73
77
|
|
|
74
|
-
All linear geometries, such as the rings of a polygon
|
|
75
|
-
interface
|
|
78
|
+
All linear geometries, such as the rings of a polygon (like ``patch`` above),
|
|
79
|
+
provide the Numpy array interface.::
|
|
76
80
|
|
|
77
81
|
>>> from numpy import asarray
|
|
78
82
|
>>> ag = asarray(patch.exterior)
|
|
@@ -83,9 +87,9 @@ Description:
|
|
|
83
87
|
...
|
|
84
88
|
[ 1.00000000e+01, 0.00000000e+00]])
|
|
85
89
|
|
|
86
|
-
That yields a numpy array of [x, y] arrays. This is not exactly what one
|
|
87
|
-
for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
88
|
-
property for getting separate arrays of coordinate x and y values
|
|
90
|
+
That yields a numpy array of [x, y] arrays. This is not always exactly what one
|
|
91
|
+
wants for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
92
|
+
property for getting separate arrays of coordinate x and y values.::
|
|
89
93
|
|
|
90
94
|
>>> x, y = patch.exterior.xy
|
|
91
95
|
>>> ax = asarray(x)
|
|
@@ -100,15 +104,14 @@ Description:
|
|
|
100
104
|
>>> asLineString(ag).wkt
|
|
101
105
|
'LINESTRING (10.0000000000000000 0.0000000000000000, ...)'
|
|
102
106
|
|
|
103
|
-
|
|
104
107
|
Testing
|
|
105
108
|
-------
|
|
106
109
|
|
|
107
|
-
Shapely uses a Zope-stye suite of unittests and doctests, excercised
|
|
110
|
+
Shapely uses a Zope-stye suite of unittests and doctests, excercised via
|
|
111
|
+
setup.py.::
|
|
108
112
|
|
|
109
113
|
$ python setup.py test
|
|
110
114
|
|
|
111
|
-
|
|
112
115
|
Support
|
|
113
116
|
-------
|
|
114
117
|
|
|
@@ -118,7 +121,6 @@ Description:
|
|
|
118
121
|
|
|
119
122
|
http://trac.gispython.org/projects/PCL/wiki/CommunityList
|
|
120
123
|
|
|
121
|
-
|
|
122
124
|
Credits
|
|
123
125
|
-------
|
|
124
126
|
|
|
@@ -141,18 +143,18 @@ Description:
|
|
|
141
143
|
|
|
142
144
|
* Justin Bronn (GeoDjango) for ctypes inspiration
|
|
143
145
|
* Martin Davis (JTS)
|
|
146
|
+
* Jaakko Salli for the Windows distributions
|
|
144
147
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
145
148
|
|
|
146
149
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
147
150
|
U.S. National Endowment for the Humanities (http://www.neh.gov).
|
|
148
151
|
|
|
149
|
-
|
|
150
152
|
.. _JTS: http://www.vividsolutions.com/jts/jtshome.htm
|
|
151
153
|
.. _PostGIS: http://postgis.org
|
|
152
154
|
.. _GEOS: http://trac.osgeo.org/geos/
|
|
153
155
|
.. _example apps: http://trac.gispython.org/lab/wiki/Examples
|
|
154
156
|
.. _wiki: http://trac.gispython.org/lab/wiki/Shapely
|
|
155
|
-
.. _manual: http://gispython.org/shapely/
|
|
157
|
+
.. _manual: http://gispython.org/shapely/docs/1.2
|
|
156
158
|
.. |eaigue| unicode:: U+00E9
|
|
157
159
|
:trim:
|
|
158
160
|
.. _Pleiades: http://pleiades.stoa.org
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
=======
|
|
2
2
|
Shapely
|
|
3
3
|
=======
|
|
4
4
|
|
|
@@ -7,9 +7,9 @@ Shapely
|
|
|
7
7
|
:height: 400
|
|
8
8
|
|
|
9
9
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
10
|
-
planar geometries. It is not concerned with data formats or coordinate
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
planar geometries. It is not concerned with data formats or coordinate systems.
|
|
11
|
+
It is based on the widely deployed GEOS_ (the engine of PostGIS_) and JTS_
|
|
12
|
+
(from which GEOS is ported) libraries. This C dependency is traded for the
|
|
13
13
|
ability to analyze geometries with blazing speed.
|
|
14
14
|
|
|
15
15
|
In a nutshell: Shapely lets you do PostGIS-ish stuff outside the context of a
|
|
@@ -19,7 +19,6 @@ database using idiomatic Python. For more details, see:
|
|
|
19
19
|
* Shapely manual_
|
|
20
20
|
* Shapely `example apps`_
|
|
21
21
|
|
|
22
|
-
|
|
23
22
|
Dependencies
|
|
24
23
|
------------
|
|
25
24
|
|
|
@@ -28,7 +27,6 @@ Shapely 1.2 depends on:
|
|
|
28
27
|
* Python >=2.5,<3
|
|
29
28
|
* libgeos_c >=3.1 (3.0 and below have not been tested, YMMV)
|
|
30
29
|
|
|
31
|
-
|
|
32
30
|
Installation
|
|
33
31
|
------------
|
|
34
32
|
|
|
@@ -42,7 +40,6 @@ or from a source distribution with the setup script::
|
|
|
42
40
|
|
|
43
41
|
$ python setup.py install
|
|
44
42
|
|
|
45
|
-
|
|
46
43
|
Usage
|
|
47
44
|
-----
|
|
48
45
|
|
|
@@ -59,12 +56,19 @@ buffering a point::
|
|
|
59
56
|
See the manual_ for comprehensive usage snippets and the dissolve.py and
|
|
60
57
|
intersect.py `example apps`_.
|
|
61
58
|
|
|
59
|
+
Integration
|
|
60
|
+
-----------
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
Shapely does not read or write data files, but it can serialize and deserialize
|
|
63
|
+
using several well known formats and protocols. The shapely.wkb and shapely.wkt
|
|
64
|
+
modules provide dumpers and loaders inspired by Python's pickle module.::
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
>>> from shapely.wkt import dumps, loads
|
|
67
|
+
>>> dumps(loads('POINT (0 0)'))
|
|
68
|
+
'POINT (0.0000000000000000 0.0000000000000000)'
|
|
69
|
+
|
|
70
|
+
All linear geometries, such as the rings of a polygon (like ``patch`` above),
|
|
71
|
+
provide the Numpy array interface.::
|
|
68
72
|
|
|
69
73
|
>>> from numpy import asarray
|
|
70
74
|
>>> ag = asarray(patch.exterior)
|
|
@@ -75,9 +79,9 @@ interface::
|
|
|
75
79
|
...
|
|
76
80
|
[ 1.00000000e+01, 0.00000000e+00]])
|
|
77
81
|
|
|
78
|
-
That yields a numpy array of [x, y] arrays. This is not exactly what one
|
|
79
|
-
for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
80
|
-
property for getting separate arrays of coordinate x and y values
|
|
82
|
+
That yields a numpy array of [x, y] arrays. This is not always exactly what one
|
|
83
|
+
wants for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
84
|
+
property for getting separate arrays of coordinate x and y values.::
|
|
81
85
|
|
|
82
86
|
>>> x, y = patch.exterior.xy
|
|
83
87
|
>>> ax = asarray(x)
|
|
@@ -92,15 +96,14 @@ Numpy arrays can also be adapted to Shapely linestrings::
|
|
|
92
96
|
>>> asLineString(ag).wkt
|
|
93
97
|
'LINESTRING (10.0000000000000000 0.0000000000000000, ...)'
|
|
94
98
|
|
|
95
|
-
|
|
96
99
|
Testing
|
|
97
100
|
-------
|
|
98
101
|
|
|
99
|
-
Shapely uses a Zope-stye suite of unittests and doctests, excercised
|
|
102
|
+
Shapely uses a Zope-stye suite of unittests and doctests, excercised via
|
|
103
|
+
setup.py.::
|
|
100
104
|
|
|
101
105
|
$ python setup.py test
|
|
102
106
|
|
|
103
|
-
|
|
104
107
|
Support
|
|
105
108
|
-------
|
|
106
109
|
|
|
@@ -110,7 +113,6 @@ If you have questions, please consider joining our community list:
|
|
|
110
113
|
|
|
111
114
|
http://trac.gispython.org/projects/PCL/wiki/CommunityList
|
|
112
115
|
|
|
113
|
-
|
|
114
116
|
Credits
|
|
115
117
|
-------
|
|
116
118
|
|
|
@@ -133,18 +135,18 @@ Additional help from:
|
|
|
133
135
|
|
|
134
136
|
* Justin Bronn (GeoDjango) for ctypes inspiration
|
|
135
137
|
* Martin Davis (JTS)
|
|
138
|
+
* Jaakko Salli for the Windows distributions
|
|
136
139
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
137
140
|
|
|
138
141
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
139
142
|
U.S. National Endowment for the Humanities (http://www.neh.gov).
|
|
140
143
|
|
|
141
|
-
|
|
142
144
|
.. _JTS: http://www.vividsolutions.com/jts/jtshome.htm
|
|
143
145
|
.. _PostGIS: http://postgis.org
|
|
144
146
|
.. _GEOS: http://trac.osgeo.org/geos/
|
|
145
147
|
.. _example apps: http://trac.gispython.org/lab/wiki/Examples
|
|
146
148
|
.. _wiki: http://trac.gispython.org/lab/wiki/Shapely
|
|
147
|
-
.. _manual: http://gispython.org/shapely/
|
|
149
|
+
.. _manual: http://gispython.org/shapely/docs/1.2
|
|
148
150
|
.. |eaigue| unicode:: U+00E9
|
|
149
151
|
:trim:
|
|
150
152
|
.. _Pleiades: http://pleiades.stoa.org
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 1.0
|
|
2
2
|
Name: Shapely
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2rc1
|
|
4
4
|
Summary: Planar geometries, predicates, and operations
|
|
5
5
|
Home-page: http://trac.gispython.org/lab/wiki/Shapely
|
|
6
6
|
Author: Sean Gillies
|
|
7
7
|
Author-email: sean.gillies@gmail.com
|
|
8
8
|
License: BSD
|
|
9
|
-
Description:
|
|
9
|
+
Description: =======
|
|
10
10
|
Shapely
|
|
11
11
|
=======
|
|
12
12
|
|
|
@@ -15,9 +15,9 @@ Description:
|
|
|
15
15
|
:height: 400
|
|
16
16
|
|
|
17
17
|
Shapely is a BSD-licensed Python package for manipulation and analysis of
|
|
18
|
-
planar geometries. It is not concerned with data formats or coordinate
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
planar geometries. It is not concerned with data formats or coordinate systems.
|
|
19
|
+
It is based on the widely deployed GEOS_ (the engine of PostGIS_) and JTS_
|
|
20
|
+
(from which GEOS is ported) libraries. This C dependency is traded for the
|
|
21
21
|
ability to analyze geometries with blazing speed.
|
|
22
22
|
|
|
23
23
|
In a nutshell: Shapely lets you do PostGIS-ish stuff outside the context of a
|
|
@@ -27,7 +27,6 @@ Description:
|
|
|
27
27
|
* Shapely manual_
|
|
28
28
|
* Shapely `example apps`_
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
Dependencies
|
|
32
31
|
------------
|
|
33
32
|
|
|
@@ -36,7 +35,6 @@ Description:
|
|
|
36
35
|
* Python >=2.5,<3
|
|
37
36
|
* libgeos_c >=3.1 (3.0 and below have not been tested, YMMV)
|
|
38
37
|
|
|
39
|
-
|
|
40
38
|
Installation
|
|
41
39
|
------------
|
|
42
40
|
|
|
@@ -50,7 +48,6 @@ Description:
|
|
|
50
48
|
|
|
51
49
|
$ python setup.py install
|
|
52
50
|
|
|
53
|
-
|
|
54
51
|
Usage
|
|
55
52
|
-----
|
|
56
53
|
|
|
@@ -67,12 +64,19 @@ Description:
|
|
|
67
64
|
See the manual_ for comprehensive usage snippets and the dissolve.py and
|
|
68
65
|
intersect.py `example apps`_.
|
|
69
66
|
|
|
67
|
+
Integration
|
|
68
|
+
-----------
|
|
69
|
+
|
|
70
|
+
Shapely does not read or write data files, but it can serialize and deserialize
|
|
71
|
+
using several well known formats and protocols. The shapely.wkb and shapely.wkt
|
|
72
|
+
modules provide dumpers and loaders inspired by Python's pickle module.::
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
>>> from shapely.wkt import dumps, loads
|
|
75
|
+
>>> dumps(loads('POINT (0 0)'))
|
|
76
|
+
'POINT (0.0000000000000000 0.0000000000000000)'
|
|
73
77
|
|
|
74
|
-
All linear geometries, such as the rings of a polygon
|
|
75
|
-
interface
|
|
78
|
+
All linear geometries, such as the rings of a polygon (like ``patch`` above),
|
|
79
|
+
provide the Numpy array interface.::
|
|
76
80
|
|
|
77
81
|
>>> from numpy import asarray
|
|
78
82
|
>>> ag = asarray(patch.exterior)
|
|
@@ -83,9 +87,9 @@ Description:
|
|
|
83
87
|
...
|
|
84
88
|
[ 1.00000000e+01, 0.00000000e+00]])
|
|
85
89
|
|
|
86
|
-
That yields a numpy array of [x, y] arrays. This is not exactly what one
|
|
87
|
-
for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
88
|
-
property for getting separate arrays of coordinate x and y values
|
|
90
|
+
That yields a numpy array of [x, y] arrays. This is not always exactly what one
|
|
91
|
+
wants for plotting shapes with Matplotlib, so Shapely 1.2 adds a `xy` geometry
|
|
92
|
+
property for getting separate arrays of coordinate x and y values.::
|
|
89
93
|
|
|
90
94
|
>>> x, y = patch.exterior.xy
|
|
91
95
|
>>> ax = asarray(x)
|
|
@@ -100,15 +104,14 @@ Description:
|
|
|
100
104
|
>>> asLineString(ag).wkt
|
|
101
105
|
'LINESTRING (10.0000000000000000 0.0000000000000000, ...)'
|
|
102
106
|
|
|
103
|
-
|
|
104
107
|
Testing
|
|
105
108
|
-------
|
|
106
109
|
|
|
107
|
-
Shapely uses a Zope-stye suite of unittests and doctests, excercised
|
|
110
|
+
Shapely uses a Zope-stye suite of unittests and doctests, excercised via
|
|
111
|
+
setup.py.::
|
|
108
112
|
|
|
109
113
|
$ python setup.py test
|
|
110
114
|
|
|
111
|
-
|
|
112
115
|
Support
|
|
113
116
|
-------
|
|
114
117
|
|
|
@@ -118,7 +121,6 @@ Description:
|
|
|
118
121
|
|
|
119
122
|
http://trac.gispython.org/projects/PCL/wiki/CommunityList
|
|
120
123
|
|
|
121
|
-
|
|
122
124
|
Credits
|
|
123
125
|
-------
|
|
124
126
|
|
|
@@ -141,18 +143,18 @@ Description:
|
|
|
141
143
|
|
|
142
144
|
* Justin Bronn (GeoDjango) for ctypes inspiration
|
|
143
145
|
* Martin Davis (JTS)
|
|
146
|
+
* Jaakko Salli for the Windows distributions
|
|
144
147
|
* Sandro Santilli, Mateusz Loskot, Paul Ramsey, et al (GEOS Project)
|
|
145
148
|
|
|
146
149
|
Major portions of this work were supported by a grant (for Pleiades_) from the
|
|
147
150
|
U.S. National Endowment for the Humanities (http://www.neh.gov).
|
|
148
151
|
|
|
149
|
-
|
|
150
152
|
.. _JTS: http://www.vividsolutions.com/jts/jtshome.htm
|
|
151
153
|
.. _PostGIS: http://postgis.org
|
|
152
154
|
.. _GEOS: http://trac.osgeo.org/geos/
|
|
153
155
|
.. _example apps: http://trac.gispython.org/lab/wiki/Examples
|
|
154
156
|
.. _wiki: http://trac.gispython.org/lab/wiki/Shapely
|
|
155
|
-
.. _manual: http://gispython.org/shapely/
|
|
157
|
+
.. _manual: http://gispython.org/shapely/docs/1.2
|
|
156
158
|
.. |eaigue| unicode:: U+00E9
|
|
157
159
|
:trim:
|
|
158
160
|
.. _Pleiades: http://pleiades.stoa.org
|
|
@@ -16,7 +16,7 @@ readme_text = file('README.txt', 'rb').read()
|
|
|
16
16
|
setup_args = dict(
|
|
17
17
|
metadata_version = '1.2',
|
|
18
18
|
name = 'Shapely',
|
|
19
|
-
version = '1.
|
|
19
|
+
version = '1.2rc1',
|
|
20
20
|
requires_python = '>=2.5,<3',
|
|
21
21
|
requires_external = 'libgeos_c (>=3.1)',
|
|
22
22
|
description = 'Planar geometries, predicates, and operations',
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from functools import wraps
|
|
5
5
|
import sys
|
|
6
|
+
import warnings
|
|
6
7
|
|
|
7
8
|
from shapely.coords import CoordinateSequence
|
|
8
9
|
from shapely.geos import lgeos
|
|
@@ -53,6 +54,7 @@ def exceptNull(func):
|
|
|
53
54
|
return func(*args, **kwargs)
|
|
54
55
|
return wrapper
|
|
55
56
|
|
|
57
|
+
EMPTY = wkb.deserialize('010700000000000000'.decode('hex'))
|
|
56
58
|
|
|
57
59
|
class BaseGeometry(object):
|
|
58
60
|
"""
|
|
@@ -78,7 +80,7 @@ class BaseGeometry(object):
|
|
|
78
80
|
# _owned : bool
|
|
79
81
|
# True if this object's GEOS geometry is owned by another as in the case
|
|
80
82
|
# of a multipart geometry member.
|
|
81
|
-
__geom__ =
|
|
83
|
+
__geom__ = EMPTY
|
|
82
84
|
__p__ = None
|
|
83
85
|
_ctypes_data = None
|
|
84
86
|
_ndim = None
|
|
@@ -88,13 +90,18 @@ class BaseGeometry(object):
|
|
|
88
90
|
# Backend config
|
|
89
91
|
impl = DefaultImplementation
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
@property
|
|
94
|
+
def _is_empty(self):
|
|
95
|
+
return self.__geom__ in [EMPTY, None]
|
|
93
96
|
|
|
94
|
-
def
|
|
95
|
-
if self.
|
|
97
|
+
def empty(self):
|
|
98
|
+
if not (self._owned or self._is_empty):
|
|
96
99
|
from shapely.geos import lgeos
|
|
97
100
|
lgeos.GEOSGeom_destroy(self.__geom__)
|
|
101
|
+
self.__geom__ = EMPTY
|
|
102
|
+
|
|
103
|
+
def __del__(self):
|
|
104
|
+
self.empty()
|
|
98
105
|
self.__geom__ = None
|
|
99
106
|
self.__p__ = None
|
|
100
107
|
|
|
@@ -106,12 +113,14 @@ class BaseGeometry(object):
|
|
|
106
113
|
return (self.__class__, (), self.to_wkb())
|
|
107
114
|
|
|
108
115
|
def __setstate__(self, state):
|
|
116
|
+
self.empty()
|
|
109
117
|
self.__geom__ = wkb.deserialize(state)
|
|
110
118
|
|
|
111
119
|
# The _geom property
|
|
112
120
|
def _get_geom(self):
|
|
113
121
|
return self.__geom__
|
|
114
122
|
def _set_geom(self, val):
|
|
123
|
+
self.empty()
|
|
115
124
|
self.__geom__ = val
|
|
116
125
|
_geom = property(_get_geom, _set_geom)
|
|
117
126
|
|
|
@@ -252,13 +261,15 @@ class BaseGeometry(object):
|
|
|
252
261
|
"""A figure that envelopes the geometry"""
|
|
253
262
|
return geom_factory(self.impl['envelope'](self))
|
|
254
263
|
|
|
255
|
-
def buffer(self, distance, quadsegs=
|
|
264
|
+
def buffer(self, distance, resolution=16, quadsegs=None):
|
|
256
265
|
"""Returns a geometry with an envelope at a distance from the object's
|
|
257
266
|
envelope
|
|
258
267
|
|
|
259
268
|
A negative distance has a "shrink" effect. A zero distance may be used
|
|
260
269
|
to "tidy" a polygon. The resolution of the buffer around each vertex of
|
|
261
|
-
the object increases by increasing the
|
|
270
|
+
the object increases by increasing the resolution keyword parameter
|
|
271
|
+
or second positional parameter. Note: the use of a `quadsegs` parameter
|
|
272
|
+
is deprecated and will be gone from the next major release.
|
|
262
273
|
|
|
263
274
|
Example:
|
|
264
275
|
|
|
@@ -271,7 +282,14 @@ class BaseGeometry(object):
|
|
|
271
282
|
>>> g.buffer(1.0, 3).area # triangle approximation
|
|
272
283
|
3.0
|
|
273
284
|
"""
|
|
274
|
-
|
|
285
|
+
if quadsegs is not None:
|
|
286
|
+
warnings.warn(
|
|
287
|
+
"The `quadsegs` argument is deprecated. Use `resolution`.",
|
|
288
|
+
DeprecationWarning)
|
|
289
|
+
res = quadsegs
|
|
290
|
+
else:
|
|
291
|
+
res = resolution
|
|
292
|
+
return geom_factory(self.impl['buffer'](self, distance, res))
|
|
275
293
|
|
|
276
294
|
def simplify(self, tolerance, preserve_topology=True):
|
|
277
295
|
"""Returns a simplified geometry produced by the Douglas-Puecker
|
|
@@ -320,7 +338,7 @@ class BaseGeometry(object):
|
|
|
320
338
|
@property
|
|
321
339
|
def is_empty(self):
|
|
322
340
|
"""True if the set of points in this geometry is empty, else False"""
|
|
323
|
-
return bool(self.impl['is_empty'](self))
|
|
341
|
+
return bool(self.impl['is_empty'](self)) or (self._geom is None)
|
|
324
342
|
|
|
325
343
|
@property
|
|
326
344
|
def is_ring(self):
|
|
@@ -37,14 +37,8 @@ class LineString(BaseGeometry):
|
|
|
37
37
|
2.0
|
|
38
38
|
"""
|
|
39
39
|
BaseGeometry.__init__(self)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def _init_geom(self, coordinates):
|
|
43
|
-
if coordinates is None:
|
|
44
|
-
# allow creation of null lines, to support unpickling
|
|
45
|
-
pass
|
|
46
|
-
else:
|
|
47
|
-
self._geom, self._ndim = geos_linestring_from_py(coordinates)
|
|
40
|
+
if coordinates is not None:
|
|
41
|
+
self._set_coords(coordinates)
|
|
48
42
|
|
|
49
43
|
@property
|
|
50
44
|
def __geo_interface__(self):
|
|
@@ -66,14 +60,9 @@ class LineString(BaseGeometry):
|
|
|
66
60
|
__array_interface__ = property(array_interface)
|
|
67
61
|
|
|
68
62
|
# Coordinate access
|
|
69
|
-
|
|
70
63
|
def _set_coords(self, coordinates):
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
self.__geom__ = None
|
|
74
|
-
if self._geom is None:
|
|
75
|
-
self._init_geom(coordinates)
|
|
76
|
-
update_linestring_from_py(self, coordinates)
|
|
64
|
+
self.empty()
|
|
65
|
+
self._geom, self._ndim = geos_linestring_from_py(coordinates)
|
|
77
66
|
|
|
78
67
|
coords = property(BaseGeometry._get_coords, _set_coords)
|
|
79
68
|
|
|
@@ -94,9 +83,6 @@ class LineString(BaseGeometry):
|
|
|
94
83
|
|
|
95
84
|
class LineStringAdapter(CachingGeometryProxy, LineString):
|
|
96
85
|
|
|
97
|
-
context = None
|
|
98
|
-
_owned = False
|
|
99
|
-
|
|
100
86
|
def __init__(self, context):
|
|
101
87
|
self.context = context
|
|
102
88
|
self.factory = geos_linestring_from_py
|
|
@@ -45,17 +45,8 @@ class Point(BaseGeometry):
|
|
|
45
45
|
Easting, northing, and elevation.
|
|
46
46
|
"""
|
|
47
47
|
BaseGeometry.__init__(self)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def _init_geom(self, *args):
|
|
51
|
-
if len(args) == 0:
|
|
52
|
-
# allow creation of null points, to support unpickling
|
|
53
|
-
pass
|
|
54
|
-
else:
|
|
55
|
-
if len(args) == 1:
|
|
56
|
-
self._geom, self._ndim = geos_point_from_py(args[0])
|
|
57
|
-
else:
|
|
58
|
-
self._geom, self._ndim = geos_point_from_py(tuple(args))
|
|
48
|
+
if len(args) > 0:
|
|
49
|
+
self._set_coords(*args)
|
|
59
50
|
|
|
60
51
|
# Coordinate getters and setters
|
|
61
52
|
|
|
@@ -110,14 +101,12 @@ class Point(BaseGeometry):
|
|
|
110
101
|
|
|
111
102
|
# Coordinate access
|
|
112
103
|
|
|
113
|
-
def _set_coords(self,
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
self.
|
|
117
|
-
if self._geom is None:
|
|
118
|
-
self._init_geom(coordinates)
|
|
104
|
+
def _set_coords(self, *args):
|
|
105
|
+
self.empty()
|
|
106
|
+
if len(args) == 1:
|
|
107
|
+
self._geom, self._ndim = geos_point_from_py(args[0])
|
|
119
108
|
else:
|
|
120
|
-
|
|
109
|
+
self._geom, self._ndim = geos_point_from_py(tuple(args))
|
|
121
110
|
|
|
122
111
|
coords = property(BaseGeometry._get_coords, _set_coords)
|
|
123
112
|
|
|
@@ -20,11 +20,6 @@ class LinearRing(LineString):
|
|
|
20
20
|
invalid and operations on it may fail.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
_ndim = None
|
|
24
|
-
__geom__ = None
|
|
25
|
-
__p__ = None
|
|
26
|
-
_owned = False
|
|
27
|
-
|
|
28
23
|
def __init__(self, coordinates=None):
|
|
29
24
|
"""
|
|
30
25
|
Parameters
|
|
@@ -46,14 +41,8 @@ class LinearRing(LineString):
|
|
|
46
41
|
4.0
|
|
47
42
|
"""
|
|
48
43
|
BaseGeometry.__init__(self)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def _init_geom(self, coordinates):
|
|
52
|
-
if coordinates is None:
|
|
53
|
-
# allow creation of null lines, to support unpickling
|
|
54
|
-
pass
|
|
55
|
-
else:
|
|
56
|
-
self._geom, self._ndim = geos_linearring_from_py(coordinates)
|
|
44
|
+
if coordinates is not None:
|
|
45
|
+
self._set_coords(coordinates)
|
|
57
46
|
|
|
58
47
|
@property
|
|
59
48
|
def __geo_interface__(self):
|
|
@@ -67,30 +56,19 @@ class LinearRing(LineString):
|
|
|
67
56
|
_get_coords = BaseGeometry._get_coords
|
|
68
57
|
|
|
69
58
|
def _set_coords(self, coordinates):
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
self.__geom__ = None
|
|
73
|
-
if self._geom is None:
|
|
74
|
-
self._init_geom(coordinates)
|
|
75
|
-
update_linearring_from_py(self, coordinates)
|
|
59
|
+
self.empty()
|
|
60
|
+
self._geom, self._ndim = geos_linearring_from_py(coordinates)
|
|
76
61
|
|
|
77
62
|
coords = property(_get_coords, _set_coords)
|
|
78
63
|
|
|
79
64
|
|
|
80
65
|
class LinearRingAdapter(LineStringAdapter):
|
|
81
66
|
|
|
82
|
-
context = None
|
|
83
|
-
__geom__ = None
|
|
84
67
|
__p__ = None
|
|
85
|
-
_owned = False
|
|
86
68
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if self.__geom__ is not None:
|
|
91
|
-
lgeos.GEOSGeom_destroy(self.__geom)
|
|
92
|
-
self.__geom, n = geos_linearring_from_py(self.context)
|
|
93
|
-
return self.__geom
|
|
69
|
+
def __init__(self, context):
|
|
70
|
+
self.context = context
|
|
71
|
+
self.factory = geos_linearring_from_py
|
|
94
72
|
|
|
95
73
|
@property
|
|
96
74
|
def __geo_interface__(self):
|
|
@@ -194,8 +172,6 @@ class Polygon(BaseGeometry):
|
|
|
194
172
|
_exterior = None
|
|
195
173
|
_interiors = []
|
|
196
174
|
_ndim = 2
|
|
197
|
-
__geom__ = None
|
|
198
|
-
_owned = False
|
|
199
175
|
|
|
200
176
|
def __init__(self, shell=None, holes=None):
|
|
201
177
|
"""
|
|
@@ -276,10 +252,6 @@ class Polygon(BaseGeometry):
|
|
|
276
252
|
|
|
277
253
|
class PolygonAdapter(PolygonProxy, Polygon):
|
|
278
254
|
|
|
279
|
-
context = None
|
|
280
|
-
__geom__ = None
|
|
281
|
-
_owned = False
|
|
282
|
-
|
|
283
255
|
def __init__(self, shell, holes=None):
|
|
284
256
|
self.shell = shell
|
|
285
257
|
self.holes = holes
|
|
@@ -2,27 +2,37 @@
|
|
|
2
2
|
"""
|
|
3
3
|
|
|
4
4
|
from shapely.geos import lgeos
|
|
5
|
+
from shapely import wkb
|
|
6
|
+
|
|
7
|
+
EMPTY = wkb.deserialize('010700000000000000'.decode('hex'))
|
|
5
8
|
|
|
6
9
|
|
|
7
10
|
class CachingGeometryProxy(object):
|
|
8
11
|
|
|
9
12
|
context = None
|
|
10
13
|
factory = None
|
|
11
|
-
__geom__ =
|
|
14
|
+
__geom__ = EMPTY
|
|
12
15
|
_gtag = None
|
|
13
16
|
|
|
14
17
|
def __init__(self, context):
|
|
15
18
|
self.context = context
|
|
16
19
|
|
|
20
|
+
@property
|
|
21
|
+
def _is_empty(self):
|
|
22
|
+
return self.__geom__ in [EMPTY, None]
|
|
23
|
+
|
|
24
|
+
def empty(self):
|
|
25
|
+
if not self._is_empty:
|
|
26
|
+
from shapely.geos import lgeos
|
|
27
|
+
lgeos.GEOSGeom_destroy(self.__geom__)
|
|
28
|
+
self.__geom__ = EMPTY
|
|
29
|
+
|
|
17
30
|
@property
|
|
18
31
|
def _geom(self):
|
|
19
32
|
"""Keeps the GEOS geometry in synch with the context."""
|
|
20
33
|
gtag = self.gtag()
|
|
21
|
-
if gtag != self._gtag:
|
|
22
|
-
|
|
23
|
-
lgeos.GEOSGeom_destroy(self.__geom__)
|
|
24
|
-
self.__geom__, n = self.factory(self.context)
|
|
25
|
-
elif self.__geom__ is None:
|
|
34
|
+
if gtag != self._gtag or self._is_empty:
|
|
35
|
+
self.empty()
|
|
26
36
|
self.__geom__, n = self.factory(self.context)
|
|
27
37
|
self._gtag = gtag
|
|
28
38
|
return self.__geom__
|
|
@@ -37,11 +47,8 @@ class PolygonProxy(CachingGeometryProxy):
|
|
|
37
47
|
def _geom(self):
|
|
38
48
|
"""Keeps the GEOS geometry in synch with the context."""
|
|
39
49
|
gtag = self.gtag()
|
|
40
|
-
if gtag != self._gtag:
|
|
41
|
-
|
|
42
|
-
lgeos.GEOSGeom_destroy(self.__geom__)
|
|
43
|
-
self.__geom__, n = self.factory(self.context[0], self.context[1])
|
|
44
|
-
elif self.__geom__ is None:
|
|
50
|
+
if gtag != self._gtag or self._is_empty:
|
|
51
|
+
self.empty()
|
|
45
52
|
self.__geom__, n = self.factory(self.context[0], self.context[1])
|
|
46
53
|
self._gtag = gtag
|
|
47
54
|
return self.__geom__
|
|
@@ -99,7 +99,7 @@ def _geos_c_version():
|
|
|
99
99
|
v = func().split('-')[2]
|
|
100
100
|
return tuple(int(n) for n in v.split('.'))
|
|
101
101
|
|
|
102
|
-
geos_c_version = _geos_c_version()
|
|
102
|
+
geos_capi_version = geos_c_version = _geos_c_version()
|
|
103
103
|
|
|
104
104
|
class allocated_c_char_p(c_char_p):
|
|
105
105
|
pass
|
|
@@ -136,6 +136,7 @@ if geos_c_version >= (1,5,0):
|
|
|
136
136
|
# Handle special case.
|
|
137
137
|
_lgeos.initGEOS_r.restype = c_void_p
|
|
138
138
|
_lgeos.initGEOS_r.argtypes = [c_void_p, c_void_p]
|
|
139
|
+
_lgeos.finishGEOS_r.argtypes = [c_void_p]
|
|
139
140
|
|
|
140
141
|
# Exceptions
|
|
141
142
|
|
|
@@ -160,7 +161,7 @@ def notice_handler(fmt, list):
|
|
|
160
161
|
notice_h = CFUNCTYPE(None, c_char_p, c_char_p)(notice_handler)
|
|
161
162
|
|
|
162
163
|
def cleanup():
|
|
163
|
-
if _lgeos is not None:
|
|
164
|
+
if _lgeos is not None :
|
|
164
165
|
_lgeos.finishGEOS()
|
|
165
166
|
|
|
166
167
|
atexit.register(cleanup)
|
|
@@ -347,7 +348,7 @@ class LGEOS16LR(LGEOS16):
|
|
|
347
348
|
"""Proxy for the reentrant GEOS_C DLL/SO API version 1.6 with linear
|
|
348
349
|
referencing
|
|
349
350
|
"""
|
|
350
|
-
geos_capi_version =
|
|
351
|
+
geos_capi_version = geos_c_version
|
|
351
352
|
def __init__(self, dll):
|
|
352
353
|
super(LGEOS16LR, self).__init__(dll)
|
|
353
354
|
|
|
@@ -48,7 +48,7 @@ class PreparedGeometry(object):
|
|
|
48
48
|
return bool(self.impl['prepared_covers'](self, other))
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
def prep(
|
|
52
|
-
"""Creates and returns a prepared
|
|
53
|
-
return PreparedGeometry(
|
|
51
|
+
def prep(ob):
|
|
52
|
+
"""Creates and returns a prepared geometric object."""
|
|
53
|
+
return PreparedGeometry(ob)
|
|
54
54
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
from unittest import TestSuite
|
|
2
2
|
|
|
3
3
|
import test_doctests, test_prepared, test_equality, test_geomseq, test_xy
|
|
4
|
-
import test_collection
|
|
4
|
+
import test_collection, test_emptiness
|
|
5
5
|
|
|
6
6
|
def test_suite():
|
|
7
7
|
suite = TestSuite()
|
|
8
8
|
suite.addTest(test_doctests.test_suite())
|
|
9
9
|
suite.addTest(test_prepared.test_suite())
|
|
10
|
+
suite.addTest(test_emptiness.test_suite())
|
|
10
11
|
suite.addTest(test_equality.test_suite())
|
|
11
12
|
suite.addTest(test_geomseq.test_suite())
|
|
12
13
|
suite.addTest(test_xy.test_suite())
|
Shapely-1.2b6/CREDITS.txt
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
Sean Gillies (Pleiades)
|
|
2
|
-
Howard Butler (Hobu, Inc.)
|
|
3
|
-
Kai Lautaportti (Hexagon IT)
|
|
4
|
-
Frédéric Junod (Camptocamp SA)
|
|
5
|
-
Eric Lemoine (Camptocamp SA)
|
|
6
|
-
Justin Bronn (GeoDjango) for ctypes inspiration
|
|
7
|
-
|
|
8
|
-
Some of this work was supported by a grant from the U.S. National Endowment for
|
|
9
|
-
the Humanities (http://www.neh.gov).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|