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.
Files changed (67) hide show
  1. {Shapely-1.2b6 → Shapely-1.2rc1}/CHANGES.txt +4 -0
  2. Shapely-1.2rc1/CREDITS.txt +24 -0
  3. {Shapely-1.2b6 → Shapely-1.2rc1}/PKG-INFO +23 -21
  4. {Shapely-1.2b6 → Shapely-1.2rc1}/README.txt +22 -20
  5. {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/PKG-INFO +23 -21
  6. {Shapely-1.2b6 → Shapely-1.2rc1}/setup.py +1 -1
  7. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/base.py +27 -9
  8. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/linestring.py +4 -18
  9. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/point.py +7 -18
  10. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/polygon.py +7 -35
  11. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/proxy.py +18 -11
  12. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geos.py +4 -3
  13. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/prepared.py +3 -3
  14. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/__init__.py +2 -1
  15. Shapely-1.2b6/CREDITS.txt +0 -9
  16. {Shapely-1.2b6 → Shapely-1.2rc1}/LICENSE.txt +0 -0
  17. {Shapely-1.2b6 → Shapely-1.2rc1}/MANIFEST.in +0 -0
  18. {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/SOURCES.txt +0 -0
  19. {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/dependency_links.txt +0 -0
  20. {Shapely-1.2b6 → Shapely-1.2rc1}/Shapely.egg-info/top_level.txt +0 -0
  21. {Shapely-1.2b6 → Shapely-1.2rc1}/examples/dissolve.py +0 -0
  22. {Shapely-1.2b6 → Shapely-1.2rc1}/examples/intersect.py +0 -0
  23. {Shapely-1.2b6 → Shapely-1.2rc1}/setup.cfg +0 -0
  24. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/__init__.py +0 -0
  25. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/coords.py +0 -0
  26. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/ctypes_declarations.py +0 -0
  27. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/__init__.py +0 -0
  28. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/collection.py +0 -0
  29. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/geo.py +0 -0
  30. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multilinestring.py +0 -0
  31. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multipoint.py +0 -0
  32. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geometry/multipolygon.py +0 -0
  33. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/geoms.py +0 -0
  34. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/impl.py +0 -0
  35. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/iterops.py +0 -0
  36. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/linref.py +0 -0
  37. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/ops.py +0 -0
  38. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/predicates.py +0 -0
  39. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Array.txt +0 -0
  40. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/GeoInterface.txt +0 -0
  41. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/IterOps.txt +0 -0
  42. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/LineString.txt +0 -0
  43. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiLineString.txt +0 -0
  44. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiPoint.txt +0 -0
  45. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/MultiPolygon.txt +0 -0
  46. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Operations.txt +0 -0
  47. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Persist.txt +0 -0
  48. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Point.txt +0 -0
  49. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Polygon.txt +0 -0
  50. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/Predicates.txt +0 -0
  51. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/attribute-chains.txt +0 -0
  52. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/binascii_hex.txt +0 -0
  53. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/dimensions.txt +0 -0
  54. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/invalid_intersection.txt +0 -0
  55. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/linear-referencing.txt +0 -0
  56. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/linemerge.txt +0 -0
  57. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/polygonize.txt +0 -0
  58. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_doctests.py +0 -0
  59. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_equality.py +0 -0
  60. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_geomseq.py +0 -0
  61. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_prepared.py +0 -0
  62. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/test_xy.py +0 -0
  63. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/threading_test.py +0 -0
  64. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/tests/wkt_locale.txt +0 -0
  65. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/topology.py +0 -0
  66. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/wkb.py +0 -0
  67. {Shapely-1.2b6 → Shapely-1.2rc1}/shapely/wkt.py +0 -0
@@ -1,5 +1,9 @@
1
1
  All tickets are children of http://trac.gispython.org/lab/ticket.
2
2
 
3
+ 1.2b7 (2010-04-22)
4
+ ------------------
5
+ - Memory leak associated with new empty geometry state fixed.
6
+
3
7
  1.2b6 (2010-04-13)
4
8
  ------------------
5
9
  - Broken GeometryCollection fixed.
@@ -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.2b6
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
- systems. It is based on the widely deployed GEOS_ (the engine of PostGIS_) and
20
- JTS_ (from which GEOS is ported) libraries. This C dependency is traded for the
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
- Numpy integration
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, provide the Numpy array
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 wants
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 like::
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/manual.html
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
- systems. It is based on the widely deployed GEOS_ (the engine of PostGIS_) and
12
- JTS_ (from which GEOS is ported) libraries. This C dependency is traded for the
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
- Numpy integration
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
- All linear geometries, such as the rings of a polygon, provide the Numpy array
67
- interface::
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 wants
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 like::
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/manual.html
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.2b6
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
- systems. It is based on the widely deployed GEOS_ (the engine of PostGIS_) and
20
- JTS_ (from which GEOS is ported) libraries. This C dependency is traded for the
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
- Numpy integration
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, provide the Numpy array
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 wants
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 like::
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/manual.html
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.2b6',
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__ = None
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
- def __init__(self):
92
- self.__geom__ = wkb.deserialize('010700000000000000'.decode('hex'))
93
+ @property
94
+ def _is_empty(self):
95
+ return self.__geom__ in [EMPTY, None]
93
96
 
94
- def __del__(self):
95
- if self.__geom__ is not None and not self._owned:
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=16):
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 quadsegs parameter.
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
- return geom_factory(self.impl['buffer'](self, distance, quadsegs))
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
- self._init_geom(coordinates)
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
- if self.is_empty:
72
- lgeos.GEOSGeom_destroy(self.__geom__)
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
- self._init_geom(*args)
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, coordinates):
114
- if self.is_empty:
115
- lgeos.GEOSGeom_destroy(self.__geom__)
116
- self.__geom__ = None
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
- update_point_from_py(self, coordinates)
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
- self._init_geom(coordinates)
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
- if self.is_empty:
71
- lgeos.GEOSGeom_destroy(self.__geom__)
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
- @property
88
- def _geom(self):
89
- """Keeps the GEOS geometry in synch with the context."""
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__ = None
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
- if self.__geom__ is not None:
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
- if self.__geom__ is not None:
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 = (1, 6, 0.5)
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(geom):
52
- """Creates and returns a prepared geometry."""
53
- return PreparedGeometry(geom)
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