shapely 1.0.7__tar.gz → 1.0.12__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 (63) hide show
  1. {Shapely-1.0.7 → Shapely-1.0.12}/CHANGES.txt +22 -0
  2. Shapely-1.0.12/GEOS-C-API.txt +55 -0
  3. {Shapely-1.0.7 → Shapely-1.0.12}/PKG-INFO +1 -1
  4. {Shapely-1.0.7 → Shapely-1.0.12}/Shapely.egg-info/PKG-INFO +1 -1
  5. {Shapely-1.0.7 → Shapely-1.0.12}/Shapely.egg-info/SOURCES.txt +3 -1
  6. {Shapely-1.0.7 → Shapely-1.0.12}/Shapely.egg-info/dependency_links.txt +0 -0
  7. {Shapely-1.0.7 → Shapely-1.0.12}/Shapely.egg-info/requires.txt +0 -0
  8. {Shapely-1.0.7 → Shapely-1.0.12}/Shapely.egg-info/top_level.txt +0 -0
  9. {Shapely-1.0.7 → Shapely-1.0.12}/setup.py +1 -1
  10. {Shapely-1.0.7 → Shapely-1.0.12}/setup_windows.py +1 -1
  11. Shapely-1.0.12/shapely/ctypes_declarations.py +204 -0
  12. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geos.py +12 -9
  13. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/iterops.py +18 -22
  14. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/predicates.py +13 -8
  15. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/topology.py +34 -26
  16. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/wkt.py +1 -1
  17. {Shapely-1.0.7 → Shapely-1.0.12}/tests/attribute-chains.txt +2 -1
  18. {Shapely-1.0.7 → Shapely-1.0.12}/tests/test_doctests.py +1 -0
  19. Shapely-1.0.12/tests/wkt_locale.txt +26 -0
  20. Shapely-1.0.7/shapely/kml.py +0 -0
  21. {Shapely-1.0.7 → Shapely-1.0.12}/CREDITS.txt +0 -0
  22. {Shapely-1.0.7 → Shapely-1.0.12}/HISTORY.txt +0 -0
  23. {Shapely-1.0.7 → Shapely-1.0.12}/LICENSE.txt +0 -0
  24. {Shapely-1.0.7 → Shapely-1.0.12}/README.txt +0 -0
  25. {Shapely-1.0.7 → Shapely-1.0.12}/examples/geoms.py +0 -0
  26. {Shapely-1.0.7 → Shapely-1.0.12}/examples/world.py +0 -0
  27. {Shapely-1.0.7 → Shapely-1.0.12}/manual/manual.txt +0 -0
  28. {Shapely-1.0.7 → Shapely-1.0.12}/manual/style.css +0 -0
  29. {Shapely-1.0.7 → Shapely-1.0.12}/setup.cfg +0 -0
  30. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/__init__.py +0 -0
  31. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/__init__.py +0 -0
  32. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/base.py +0 -0
  33. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/collection.py +0 -0
  34. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/geo.py +0 -0
  35. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/linestring.py +0 -0
  36. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/multilinestring.py +0 -0
  37. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/multipoint.py +0 -0
  38. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/multipolygon.py +0 -0
  39. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/point.py +0 -0
  40. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/polygon.py +0 -0
  41. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/geometry/proxy.py +0 -0
  42. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/ops.py +0 -0
  43. {Shapely-1.0.7 → Shapely-1.0.12}/shapely/wkb.py +0 -0
  44. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Array.txt +0 -0
  45. {Shapely-1.0.7 → Shapely-1.0.12}/tests/GeoInterface.txt +0 -0
  46. {Shapely-1.0.7 → Shapely-1.0.12}/tests/IterOps.txt +0 -0
  47. {Shapely-1.0.7 → Shapely-1.0.12}/tests/LineString.txt +0 -0
  48. {Shapely-1.0.7 → Shapely-1.0.12}/tests/MultiLineString.txt +0 -0
  49. {Shapely-1.0.7 → Shapely-1.0.12}/tests/MultiPoint.txt +0 -0
  50. {Shapely-1.0.7 → Shapely-1.0.12}/tests/MultiPolygon.txt +0 -0
  51. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Operations.txt +0 -0
  52. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Persist.txt +0 -0
  53. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Point.txt +0 -0
  54. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Polygon.txt +0 -0
  55. {Shapely-1.0.7 → Shapely-1.0.12}/tests/Predicates.txt +0 -0
  56. {Shapely-1.0.7 → Shapely-1.0.12}/tests/__init__.py +0 -0
  57. {Shapely-1.0.7 → Shapely-1.0.12}/tests/binascii_hex.txt +0 -0
  58. {Shapely-1.0.7 → Shapely-1.0.12}/tests/dimensions.txt +0 -0
  59. {Shapely-1.0.7 → Shapely-1.0.12}/tests/invalid_intersection.txt +0 -0
  60. {Shapely-1.0.7 → Shapely-1.0.12}/tests/polygonize.txt +0 -0
  61. {Shapely-1.0.7 → Shapely-1.0.12}/tests/rungrind.dist +0 -0
  62. {Shapely-1.0.7 → Shapely-1.0.12}/tests/test_threads.py +0 -0
  63. {Shapely-1.0.7 → Shapely-1.0.12}/tests/valgrind-python.supp +0 -0
@@ -1,5 +1,27 @@
1
1
  All tickets are children of http://trac.gispython.org/lab/ticket.
2
2
 
3
+ 1.0.12 (2009-04-09)
4
+ -------------------
5
+ - Fix for references held by topology and predicate descriptors.
6
+
7
+ 1.0.11 (2008-11-20)
8
+ -------------------
9
+ - Work around bug in GEOS 2.2.3, GEOSCoordSeq_getOrdinate not exported properly
10
+ (#178).
11
+
12
+ 1.0.10 (2008-11-17)
13
+ -------------------
14
+ - Fixed compatibility with GEOS 2.2.3 that was broken in 1.0.8 release (#176).
15
+
16
+ 1.0.9 (2008-11-16)
17
+ ------------------
18
+ - Find and load MacPorts libgeos.
19
+
20
+ 1.0.8 (2008-11-01)
21
+ ------------------
22
+ - Fill out GEOS function result and argument types to prevent faults on a
23
+ 64-bit arch.
24
+
3
25
  1.0.7 (2008-08-22)
4
26
  ------------------
5
27
  - Polygon rings now have the same dimensions as parent (#168).
@@ -0,0 +1,55 @@
1
+ Ctypes declarations for functions present in GEOS C API 1.4, but not present in
2
+ 1.3, are listed below:
3
+
4
+ lgeos.GEOS_getWKBOutputDims.restype = ctypes.c_int
5
+ lgeos.GEOS_getWKBByteOrder.restype = ctypes.c_int
6
+ lgeos.GEOS_setWKBByteOrder.restype = ctypes.c_int
7
+ lgeos.GEOS_setWKBByteOrder.argtypes = [ctypes.c_int]
8
+ lgeos.GEOSGeomFromHEX_buf.restype = ctypes.c_void_p
9
+ lgeos.GEOSGeomFromHEX_buf.argtypes = [ctypes.c_void_p, ctypes.c_size_t]
10
+ lgeos.GEOSSimplify.restype = ctypes.c_void_p
11
+ lgeos.GEOSSimplify.argtypes = [ctypes.c_void_p, ctypes.c_double]
12
+ lgeos.GEOSTopologyPreserveSimplify.restype = ctypes.c_void_p
13
+ lgeos.GEOSTopologyPreserveSimplify.argtypes = [ctypes.c_void_p, ctypes.c_double]
14
+ lgeos.GEOSEqualsExact.restype = ctypes.c_int
15
+ lgeos.GEOSEqualsExact.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_double]
16
+ lgeos.GEOSNormalize.restype = ctypes.c_int
17
+ lgeos.GEOSNormalize.argtypes = [ctypes.c_void_p]
18
+ lgeos.GEOSWKTReader_create.restype = ctypes.c_void_p
19
+ lgeos.GEOSWKTReader_destroy.restype = None
20
+ lgeos.GEOSWKTReader_destroy.argtypes = [ctypes.c_void_p]
21
+ lgeos.GEOSWKTReader_read.restype = ctypes.c_void_p
22
+ lgeos.GEOSWKTReader_read.argtypes = [ctypes.c_void_p, ctypes.c_char_p]
23
+ lgeos.GEOSWKTWriter_create.restype = ctypes.c_void_p
24
+ lgeos.GEOSWKTWriter_destroy.restype = None
25
+ lgeos.GEOSWKTWriter_destroy.argtypes = [ctypes.c_void_p]
26
+ lgeos.GEOSWKTWriter_write.restype = ctypes.c_char_p
27
+ lgeos.GEOSWKTWriter_write.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
28
+ lgeos.GEOSWKBReader_create.restype = ctypes.c_void_p
29
+ lgeos.GEOSWKBReader_destroy.restype = None
30
+ lgeos.GEOSWKBReader_destroy.argtypes = [ctypes.c_void_p]
31
+ lgeos.GEOSWKBReader_read.restype = ctypes.c_void_p
32
+ lgeos.GEOSWKBReader_read.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t]
33
+ lgeos.GEOSWKBReader_readHEX.restype = ctypes.c_void_p
34
+ lgeos.GEOSWKBReader_readHEX.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t]
35
+ lgeos.GEOSWKBWriter_create.restype = ctypes.c_void_p
36
+ lgeos.GEOSWKBWriter_destroy.restype = None
37
+ lgeos.GEOSWKBWriter_destroy.argtypes = [ctypes.c_void_p]
38
+ lgeos.GEOSWKBWriter_getOutputDimension.restype = ctypes.c_int
39
+ lgeos.GEOSWKBWriter_getOutputDimension.argtypes = [ctypes.c_void_p]
40
+ lgeos.GEOSWKBWriter_setOutputDimension.restype = None
41
+ lgeos.GEOSWKBWriter_setOutputDimension.argtypes = [ctypes.c_void_p, ctypes.c_int]
42
+ lgeos.GEOSWKBWriter_getByteOrder.restype = ctypes.c_int
43
+ lgeos.GEOSWKBWriter_getByteOrder.argtypes = [ctypes.c_void_p]
44
+ lgeos.GEOSWKBWriter_setByteOrder.restype = None
45
+ lgeos.GEOSWKBWriter_setByteOrder.argtypes = [ctypes.c_void_p, ctypes.c_int]
46
+ lgeos.GEOSWKBWriter_getIncludeSRID.restype = ctypes.c_char
47
+ lgeos.GEOSWKBWriter_getIncludeSRID.argtypes = [ctypes.c_void_p]
48
+ lgeos.GEOSWKBWriter_setIncludeSRID.restype = None
49
+ lgeos.GEOSWKBWriter_setIncludeSRID.argtypes = [ctypes.c_void_p, ctypes.c_char]
50
+
51
+ Furthermore, the following unneeded declarations are removed to avoid problems
52
+ with Debian's 2.2.3 package:
53
+
54
+ lgeos.GEOSCoordSeq_getOrdinate.restype = ctypes.c_int
55
+ lgeos.GEOSCoordSeq_getOrdinate.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_uint, ctypes.c_void_p]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: Shapely
3
- Version: 1.0.7
3
+ Version: 1.0.12
4
4
  Summary: Geospatial geometries, predicates, and operations
5
5
  Home-page: http://trac.gispython.org/lab/wiki/Shapely
6
6
  Author: Sean Gillies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: Shapely
3
- Version: 1.0.7
3
+ Version: 1.0.12
4
4
  Summary: Geospatial geometries, predicates, and operations
5
5
  Home-page: http://trac.gispython.org/lab/wiki/Shapely
6
6
  Author: Sean Gillies
@@ -1,5 +1,6 @@
1
1
  CHANGES.txt
2
2
  CREDITS.txt
3
+ GEOS-C-API.txt
3
4
  HISTORY.txt
4
5
  LICENSE.txt
5
6
  README.txt
@@ -15,9 +16,9 @@ examples/world.py
15
16
  manual/manual.txt
16
17
  manual/style.css
17
18
  shapely/__init__.py
19
+ shapely/ctypes_declarations.py
18
20
  shapely/geos.py
19
21
  shapely/iterops.py
20
- shapely/kml.py
21
22
  shapely/ops.py
22
23
  shapely/predicates.py
23
24
  shapely/topology.py
@@ -56,3 +57,4 @@ tests/rungrind.dist
56
57
  tests/test_doctests.py
57
58
  tests/test_threads.py
58
59
  tests/valgrind-python.supp
60
+ tests/wkt_locale.txt
@@ -10,7 +10,7 @@ if version_info[:2] < (2,5):
10
10
  readme_text = file('README.txt', 'rb').read()
11
11
 
12
12
  setup(name = 'Shapely',
13
- version = '1.0.7',
13
+ version = '1.0.12',
14
14
  description = 'Geospatial geometries, predicates, and operations',
15
15
  license = 'BSD',
16
16
  keywords = 'geometry topology',
@@ -10,7 +10,7 @@ if version_info[:2] < (2,5):
10
10
  readme_text = file('README.txt', 'rb').read()
11
11
 
12
12
  setup(name = 'Shapely',
13
- version = '1.0.7',
13
+ version = '1.0.12',
14
14
  description = 'Geospatial geometries, predicates, and operations',
15
15
  license = 'BSD',
16
16
  keywords = 'geometry topology',
@@ -0,0 +1,204 @@
1
+ import ctypes
2
+
3
+ lgeos = lgeos # reduce pyflakes complaints
4
+
5
+ lgeos.initGEOS.restype = None
6
+
7
+ lgeos.finishGEOS.restype = None
8
+
9
+ lgeos.GEOSversion.restype = ctypes.c_char_p
10
+
11
+ lgeos.GEOSGeomFromWKT.restype = ctypes.c_void_p
12
+ lgeos.GEOSGeomFromWKT.argtypes = [ctypes.c_char_p]
13
+
14
+ lgeos.GEOSGeomToWKT.restype = ctypes.c_char_p
15
+ lgeos.GEOSGeomToWKT.argtypes = [ctypes.c_void_p]
16
+
17
+ lgeos.GEOS_setWKBOutputDims.restype = ctypes.c_int
18
+ lgeos.GEOS_setWKBOutputDims.argtypes = [ctypes.c_int]
19
+
20
+ lgeos.GEOSGeomFromWKB_buf.restype = ctypes.c_void_p
21
+ lgeos.GEOSGeomFromWKB_buf.argtypes = [ctypes.c_void_p, ctypes.c_size_t]
22
+
23
+ lgeos.GEOSCoordSeq_create.restype = ctypes.c_void_p
24
+ lgeos.GEOSCoordSeq_create.argtypes = [ctypes.c_uint, ctypes.c_uint]
25
+
26
+ lgeos.GEOSCoordSeq_clone.restype = ctypes.c_void_p
27
+ lgeos.GEOSCoordSeq_clone.argtypes = [ctypes.c_void_p]
28
+
29
+ lgeos.GEOSCoordSeq_destroy.restype = None
30
+ lgeos.GEOSCoordSeq_destroy.argtypes = [ctypes.c_void_p]
31
+
32
+ lgeos.GEOSCoordSeq_setX.restype = ctypes.c_int
33
+ lgeos.GEOSCoordSeq_setX.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_double]
34
+
35
+ lgeos.GEOSCoordSeq_setY.restype = ctypes.c_int
36
+ lgeos.GEOSCoordSeq_setY.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_double]
37
+
38
+ lgeos.GEOSCoordSeq_setZ.restype = ctypes.c_int
39
+ lgeos.GEOSCoordSeq_setZ.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_double]
40
+
41
+ lgeos.GEOSCoordSeq_setOrdinate.restype = ctypes.c_int
42
+ lgeos.GEOSCoordSeq_setOrdinate.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_uint, ctypes.c_double]
43
+
44
+ lgeos.GEOSCoordSeq_getX.restype = ctypes.c_int
45
+ lgeos.GEOSCoordSeq_getX.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_void_p]
46
+
47
+ lgeos.GEOSCoordSeq_getY.restype = ctypes.c_int
48
+ lgeos.GEOSCoordSeq_getY.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_void_p]
49
+
50
+ lgeos.GEOSCoordSeq_getZ.restype = ctypes.c_int
51
+ lgeos.GEOSCoordSeq_getZ.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_void_p]
52
+
53
+ lgeos.GEOSCoordSeq_getSize.restype = ctypes.c_int
54
+ lgeos.GEOSCoordSeq_getSize.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
55
+
56
+ lgeos.GEOSCoordSeq_getDimensions.restype = ctypes.c_int
57
+ lgeos.GEOSCoordSeq_getDimensions.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
58
+
59
+ lgeos.GEOSGeom_createPoint.restype = ctypes.c_void_p
60
+ lgeos.GEOSGeom_createPoint.argtypes = [ctypes.c_void_p]
61
+
62
+ lgeos.GEOSGeom_createLinearRing.restype = ctypes.c_void_p
63
+ lgeos.GEOSGeom_createLinearRing.argtypes = [ctypes.c_void_p]
64
+
65
+ lgeos.GEOSGeom_createLineString.restype = ctypes.c_void_p
66
+ lgeos.GEOSGeom_createLineString.argtypes = [ctypes.c_void_p]
67
+
68
+ lgeos.GEOSGeom_createPolygon.restype = ctypes.c_void_p
69
+ lgeos.GEOSGeom_createPolygon.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint]
70
+
71
+ lgeos.GEOSGeom_createCollection.restype = ctypes.c_void_p
72
+ lgeos.GEOSGeom_createCollection.argtypes = [ctypes.c_int, ctypes.c_void_p, ctypes.c_uint]
73
+
74
+ lgeos.GEOSGeom_clone.restype = ctypes.c_void_p
75
+ lgeos.GEOSGeom_clone.argtypes = [ctypes.c_void_p]
76
+
77
+ lgeos.GEOSGeom_destroy.restype = None
78
+ lgeos.GEOSGeom_destroy.argtypes = [ctypes.c_void_p]
79
+
80
+ lgeos.GEOSEnvelope.restype = ctypes.c_void_p
81
+ lgeos.GEOSEnvelope.argtypes = [ctypes.c_void_p]
82
+
83
+ lgeos.GEOSIntersection.restype = ctypes.c_void_p
84
+ lgeos.GEOSIntersection.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
85
+
86
+ lgeos.GEOSBuffer.restype = ctypes.c_void_p
87
+ lgeos.GEOSBuffer.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.c_int]
88
+
89
+ lgeos.GEOSConvexHull.restype = ctypes.c_void_p
90
+ lgeos.GEOSConvexHull.argtypes = [ctypes.c_void_p]
91
+
92
+ lgeos.GEOSDifference.restype = ctypes.c_void_p
93
+ lgeos.GEOSDifference.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
94
+
95
+ lgeos.GEOSSymDifference.restype = ctypes.c_void_p
96
+ lgeos.GEOSSymDifference.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
97
+
98
+ lgeos.GEOSBoundary.restype = ctypes.c_void_p
99
+ lgeos.GEOSBoundary.argtypes = [ctypes.c_void_p]
100
+
101
+ lgeos.GEOSUnion.restype = ctypes.c_void_p
102
+ lgeos.GEOSUnion.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
103
+
104
+ lgeos.GEOSPointOnSurface.restype = ctypes.c_void_p
105
+ lgeos.GEOSPointOnSurface.argtypes = [ctypes.c_void_p]
106
+
107
+ lgeos.GEOSGetCentroid.restype = ctypes.c_void_p
108
+ lgeos.GEOSGetCentroid.argtypes = [ctypes.c_void_p]
109
+
110
+ lgeos.GEOSRelate.restype = ctypes.c_char_p
111
+ lgeos.GEOSRelate.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
112
+
113
+ lgeos.GEOSPolygonize.restype = ctypes.c_void_p
114
+ lgeos.GEOSPolygonize.argtypes = [ctypes.c_void_p, ctypes.c_uint]
115
+
116
+ lgeos.GEOSLineMerge.restype = ctypes.c_void_p
117
+ lgeos.GEOSLineMerge.argtypes = [ctypes.c_void_p]
118
+
119
+ lgeos.GEOSRelatePattern.restype = ctypes.c_char
120
+ lgeos.GEOSRelatePattern.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_char_p]
121
+
122
+ lgeos.GEOSDisjoint.restype = ctypes.c_int
123
+ lgeos.GEOSDisjoint.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
124
+
125
+ lgeos.GEOSTouches.restype = ctypes.c_int
126
+ lgeos.GEOSTouches.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
127
+
128
+ lgeos.GEOSIntersects.restype = ctypes.c_int
129
+ lgeos.GEOSIntersects.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
130
+
131
+ lgeos.GEOSCrosses.restype = ctypes.c_int
132
+ lgeos.GEOSCrosses.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
133
+
134
+ lgeos.GEOSWithin.restype = ctypes.c_int
135
+ lgeos.GEOSWithin.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
136
+
137
+ lgeos.GEOSContains.restype = ctypes.c_int
138
+ lgeos.GEOSContains.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
139
+
140
+ lgeos.GEOSOverlaps.restype = ctypes.c_int
141
+ lgeos.GEOSOverlaps.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
142
+
143
+ lgeos.GEOSEquals.restype = ctypes.c_int
144
+ lgeos.GEOSEquals.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
145
+
146
+ lgeos.GEOSisEmpty.restype = ctypes.c_int
147
+ lgeos.GEOSisEmpty.argtypes = [ctypes.c_void_p]
148
+
149
+ lgeos.GEOSisValid.restype = ctypes.c_int
150
+ lgeos.GEOSisValid.argtypes = [ctypes.c_void_p]
151
+
152
+ lgeos.GEOSisSimple.restype = ctypes.c_int
153
+ lgeos.GEOSisSimple.argtypes = [ctypes.c_void_p]
154
+
155
+ lgeos.GEOSisRing.restype = ctypes.c_int
156
+ lgeos.GEOSisRing.argtypes = [ctypes.c_void_p]
157
+
158
+ lgeos.GEOSHasZ.restype = ctypes.c_int
159
+ lgeos.GEOSHasZ.argtypes = [ctypes.c_void_p]
160
+
161
+ lgeos.GEOSGeomType.restype = ctypes.c_char_p
162
+ lgeos.GEOSGeomType.argtypes = [ctypes.c_void_p]
163
+
164
+ lgeos.GEOSGeomTypeId.restype = ctypes.c_int
165
+ lgeos.GEOSGeomTypeId.argtypes = [ctypes.c_void_p]
166
+
167
+ lgeos.GEOSGetSRID.restype = ctypes.c_int
168
+ lgeos.GEOSGetSRID.argtypes = [ctypes.c_void_p]
169
+
170
+ lgeos.GEOSSetSRID.restype = None
171
+ lgeos.GEOSSetSRID.argtypes = [ctypes.c_void_p, ctypes.c_int]
172
+
173
+ lgeos.GEOSGetNumGeometries.restype = ctypes.c_int
174
+ lgeos.GEOSGetNumGeometries.argtypes = [ctypes.c_void_p]
175
+
176
+ lgeos.GEOSGetGeometryN.restype = ctypes.c_void_p
177
+ lgeos.GEOSGetGeometryN.argtypes = [ctypes.c_void_p, ctypes.c_int]
178
+
179
+ lgeos.GEOSGetNumInteriorRings.restype = ctypes.c_int
180
+ lgeos.GEOSGetNumInteriorRings.argtypes = [ctypes.c_void_p]
181
+
182
+ lgeos.GEOSGetInteriorRingN.restype = ctypes.c_void_p
183
+ lgeos.GEOSGetInteriorRingN.argtypes = [ctypes.c_void_p, ctypes.c_int]
184
+
185
+ lgeos.GEOSGetExteriorRing.restype = ctypes.c_void_p
186
+ lgeos.GEOSGetExteriorRing.argtypes = [ctypes.c_void_p]
187
+
188
+ lgeos.GEOSGetNumCoordinates.restype = ctypes.c_int
189
+ lgeos.GEOSGetNumCoordinates.argtypes = [ctypes.c_void_p]
190
+
191
+ lgeos.GEOSGeom_getCoordSeq.restype = ctypes.c_void_p
192
+ lgeos.GEOSGeom_getCoordSeq.argtypes = [ctypes.c_void_p]
193
+
194
+ lgeos.GEOSGeom_getDimensions.restype = ctypes.c_int
195
+ lgeos.GEOSGeom_getDimensions.argtypes = [ctypes.c_void_p]
196
+
197
+ lgeos.GEOSArea.restype = ctypes.c_double
198
+ lgeos.GEOSArea.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
199
+
200
+ lgeos.GEOSLength.restype = ctypes.c_int
201
+ lgeos.GEOSLength.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
202
+
203
+ lgeos.GEOSDistance.restype = ctypes.c_int
204
+ lgeos.GEOSDistance.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
@@ -3,12 +3,10 @@ Exports the libgeos_c shared lib, GEOS-specific exceptions, and utilities.
3
3
  """
4
4
 
5
5
  import atexit
6
- from ctypes import cdll, CDLL, pydll, PyDLL, CFUNCTYPE, c_char_p
7
- from ctypes.util import find_library
8
6
  import os
9
7
  import sys
10
-
11
- import shapely
8
+ from ctypes import cdll, CDLL, PyDLL, CFUNCTYPE, c_char_p
9
+ from ctypes.util import find_library
12
10
 
13
11
  if sys.platform == 'win32':
14
12
  try:
@@ -31,13 +29,15 @@ elif sys.platform == 'darwin':
31
29
  lib_paths = [
32
30
  # The Framework build from Kyng Chaos:
33
31
  "/Library/Frameworks/GEOS.framework/Versions/Current/GEOS",
32
+ # macports
33
+ '/opt/local/lib/libgeos_c.dylib',
34
34
  ]
35
35
  for path in lib_paths:
36
36
  if os.path.exists(path):
37
37
  lib = path
38
38
  break
39
- else:
40
- raise ImportError, "Could not find geos_c library"
39
+ if lib is None:
40
+ raise ImportError, "Could not find geos_c library"
41
41
  lgeos = PyDLL(lib)
42
42
  free = CDLL(find_library('libc')).free
43
43
  else:
@@ -51,6 +51,10 @@ else:
51
51
  free = CDLL('libc.so.6').free
52
52
 
53
53
 
54
+ # Load the ctypes restype and argtype declarations for geos_c functions.
55
+ _here = os.path.abspath(os.path.dirname(__file__))
56
+ execfile(os.path.join(_here, 'ctypes_declarations.py'))
57
+
54
58
  class allocated_c_char_p(c_char_p):
55
59
  pass
56
60
 
@@ -83,10 +87,9 @@ notice_h = CFUNCTYPE(None, c_char_p, c_char_p)(notice_handler)
83
87
  # Register a cleanup function
84
88
 
85
89
  def cleanup():
86
- lgeos.finishGEOS()
90
+ if lgeos is not None:
91
+ lgeos.finishGEOS()
87
92
 
88
93
  atexit.register(cleanup)
89
94
 
90
95
  lgeos.initGEOS(notice_h, error_h)
91
-
92
-
@@ -13,23 +13,17 @@ def geos_from_geometry(geom):
13
13
  c_size_t(len(data))
14
14
  )
15
15
 
16
- class BinaryPredicateIterator(object):
16
+
17
+ class IterOp(object):
17
18
 
18
19
  """A generating non-data descriptor.
19
20
  """
20
-
21
- fn = None
22
- context = None
23
-
21
+
24
22
  def __init__(self, fn):
25
23
  self.fn = fn
26
-
27
- def __get__(self, obj, objtype=None):
28
- self.context = obj
29
- return self
30
-
31
- def __call__(self, geom, iterator, value=True):
32
- if geom._geom is None:
24
+
25
+ def __call__(self, context, iterator, value=True):
26
+ if context._geom is None:
33
27
  raise ValueError, "Null geometry supports no operations"
34
28
  for item in iterator:
35
29
  try:
@@ -39,18 +33,20 @@ class BinaryPredicateIterator(object):
39
33
  ob = this_geom
40
34
  if not this_geom._geom:
41
35
  raise ValueError, "Null geometry supports no operations"
42
- retval = self.fn(geom._geom, this_geom._geom)
36
+ retval = self.fn(context._geom, this_geom._geom)
43
37
  if retval == 2:
44
- raise PredicateError, "Failed to evaluate %s" % repr(self.fn)
38
+ raise PredicateError, \
39
+ "Failed to evaluate %s" % repr(self.fn)
45
40
  elif bool(retval) == value:
46
41
  yield ob
47
42
 
43
+
48
44
  # utilities
49
- disjoint = BinaryPredicateIterator(lgeos.GEOSDisjoint)
50
- touches = BinaryPredicateIterator(lgeos.GEOSTouches)
51
- intersects = BinaryPredicateIterator(lgeos.GEOSIntersects)
52
- crosses = BinaryPredicateIterator(lgeos.GEOSCrosses)
53
- within = BinaryPredicateIterator(lgeos.GEOSWithin)
54
- contains = BinaryPredicateIterator(lgeos.GEOSContains)
55
- overlaps = BinaryPredicateIterator(lgeos.GEOSOverlaps)
56
- equals = BinaryPredicateIterator(lgeos.GEOSEquals)
45
+ disjoint = IterOp(lgeos.GEOSDisjoint)
46
+ touches = IterOp(lgeos.GEOSTouches)
47
+ intersects = IterOp(lgeos.GEOSIntersects)
48
+ crosses = IterOp(lgeos.GEOSCrosses)
49
+ within = IterOp(lgeos.GEOSWithin)
50
+ contains = IterOp(lgeos.GEOSContains)
51
+ overlaps = IterOp(lgeos.GEOSOverlaps)
52
+ equals = IterOp(lgeos.GEOSEquals)
@@ -4,7 +4,18 @@ Support for GEOS spatial predicates.
4
4
 
5
5
  from shapely.geos import PredicateError
6
6
 
7
- # Predicates
7
+
8
+ class OpWrapper(object):
9
+
10
+ def __init__(self, fn, context):
11
+ self.fn = fn
12
+ self.context = context
13
+
14
+ def __call__(self, other):
15
+ if not other._geom:
16
+ raise ValueError, "Null geometry can not be operated upon"
17
+ return bool(self.fn(self.context._geom, other._geom))
18
+
8
19
 
9
20
  class BinaryPredicate(object):
10
21
 
@@ -25,13 +36,7 @@ class BinaryPredicate(object):
25
36
  def __get__(self, obj, objtype=None):
26
37
  if not obj._geom:
27
38
  raise ValueError, "Null geometry supports no operations"
28
- self.context = obj
29
- return self
30
-
31
- def __call__(self, other):
32
- if not other._geom:
33
- raise ValueError, "Null geometry can not be operated upon"
34
- return bool(self.fn(self.context._geom, other._geom))
39
+ return OpWrapper(self.fn, obj)
35
40
 
36
41
 
37
42
  # A data descriptor
@@ -5,44 +5,52 @@ Support for GEOS topological operations.
5
5
  from shapely.geos import TopologicalError
6
6
 
7
7
 
8
+ class OpWrapper(object):
9
+
10
+ def __init__(self, fn, context, factory):
11
+ self.fn = fn
12
+ self.context = context
13
+ self.factory = factory
14
+
15
+ def __call__(self, other):
16
+ context = self.context
17
+ if other._geom is None:
18
+ raise ValueError, "Null geometry supports no operations"
19
+ product = self.fn(context._geom, other._geom)
20
+ if not product:
21
+ # Check validity of geometries
22
+ if not context.is_valid:
23
+ raise TopologicalError, \
24
+ "The operation '%s' produced a null geometry. Likely cause is invalidity of the geometry %s" % (self.fn.__name__, repr(context))
25
+ elif not other.is_valid:
26
+ raise TopologicalError, \
27
+ "The operation '%s' produced a null geometry. Likely cause is invalidity of the 'other' geometry %s" % (self.fn.__name__, repr(other))
28
+ return self.factory(product)
29
+
30
+
8
31
  class BinaryTopologicalOp(object):
9
-
10
- """A callable non-data descriptor.
11
-
32
+
33
+ """A non-data descriptor that returns a callable.
34
+
12
35
  Wraps a GEOS function. The factory is a callable which wraps results in
13
36
  the appropriate shapely geometry class.
14
37
  """
15
-
38
+
16
39
  fn = None
17
- context = None
18
40
  factory = None
19
-
41
+
20
42
  def __init__(self, fn, factory):
21
43
  self.fn = fn
22
44
  self.factory = factory
23
-
45
+
24
46
  def __get__(self, obj, objtype=None):
25
- self.context = obj
26
- return self
27
-
28
- def __call__(self, other):
29
- if self.context._geom is None or other._geom is None:
47
+ if not obj._geom:
30
48
  raise ValueError, "Null geometry supports no operations"
31
- product = self.fn(self.context._geom, other._geom)
32
- if not product:
33
- # Check validity of geometries
34
- if not self.context.is_valid:
35
- raise TopologicalError, \
36
- "The operation '%s' produced a null geometry. Likely cause is invalidity of the geometry %s" % (self.fn.__name__, repr(self.context))
37
- elif not other.is_valid:
38
- raise TopologicalError, \
39
- "The operation '%s' produced a null geometry. Likely cause is invalidity of the 'other' geometry %s" % (self.fn.__name__, repr(other))
40
-
41
- return self.factory(product, self.context)
49
+ return OpWrapper(self.fn, obj, self.factory)
42
50
 
43
51
 
44
52
  class UnaryTopologicalOp(object):
45
-
53
+
46
54
  """A data descriptor.
47
55
 
48
56
  Wraps a GEOS function. The factory is a callable which wraps results in
@@ -51,11 +59,11 @@ class UnaryTopologicalOp(object):
51
59
 
52
60
  fn = None
53
61
  factory = None
54
-
62
+
55
63
  def __init__(self, fn, factory):
56
64
  self.fn = fn
57
65
  self.factory = factory
58
-
66
+
59
67
  def __get__(self, obj, objtype=None):
60
68
  if obj._geom is None:
61
69
  raise ValueError, "Null geometry supports no operations"
@@ -32,7 +32,7 @@ def dumps(ob):
32
32
  return retval
33
33
  func.restype = allocated_c_char_p
34
34
  func.errcheck = errcheck
35
- return lgeos.GEOSGeomToWKT(ob._geom)
35
+ return func(ob._geom)
36
36
 
37
37
  def dump(ob, fp):
38
38
  """Dump a geometry to an open file."""
@@ -8,7 +8,8 @@ See also ticket #151.
8
8
  >>> list(p.boundary.coords)
9
9
  [(0.0, 0.0), (0.0, 1.0), (-1.0, 1.0), (-1.0, 0.0), (0.0, 0.0)]
10
10
 
11
- >>> print list(p.buffer(1).exterior.coords)
11
+ >>> from shapely.geometry import Point
12
+ >>> print list(Point(0.0, 0.0).buffer(1.0).exterior.coords)
12
13
  [(0.0, -1.0), (-1.0, -1.0), ...
13
14
 
14
15
  Test chained access to interiors
@@ -8,6 +8,7 @@ optionflags = (doctest.REPORT_ONLY_FIRST_FAILURE |
8
8
  doctest.ELLIPSIS)
9
9
 
10
10
  def list_doctests():
11
+ print __file__
11
12
  return [filename
12
13
  for filename
13
14
  in glob.glob(os.path.join(os.path.dirname(__file__), '*.txt'))]
@@ -0,0 +1,26 @@
1
+ Test locale independence of WKT
2
+ ===============================
3
+
4
+ Set locale to one that uses a comma as decimal seperator`
5
+
6
+ >>> import locale
7
+ >>> locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
8
+ 'pt_BR.UTF-8'
9
+
10
+ Test reading and writing`
11
+
12
+ >>> from shapely.wkt import loads
13
+ >>> p = loads('POINT (0.0 0.0)')
14
+ >>> p.x == 0.0
15
+ True
16
+ >>> p.y == 0.0
17
+ True
18
+ >>> p.wkt
19
+ 'POINT (0.0...)'
20
+ >>> from shapely.wkt import dumps
21
+ >>> dumps(p)
22
+ 'POINT (0.0...)'
23
+
24
+ Reset locale
25
+
26
+ >>> _ = locale.setlocale(locale.LC_ALL, '')
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