-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_multipolygon.py
72 lines (61 loc) · 2.83 KB
/
test_multipolygon.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from . import unittest
from shapely.geometry import Polygon, MultiPolygon, asMultiPolygon
from shapely.geometry.base import dump_coords
class MultiPolygonTestCase(unittest.TestCase):
def test_multipolygon(self):
# From coordinate tuples
geom = MultiPolygon(
[(((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0)),
[((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))])])
self.assertIsInstance(geom, MultiPolygon)
self.assertEqual(len(geom.geoms), 1)
self.assertEqual(
dump_coords(geom),
[[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0),
[(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25),
(0.25, 0.25)]]])
# Or from polygons
p = Polygon(((0, 0), (0, 1), (1, 1), (1, 0)),
[((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))])
geom = MultiPolygon([p])
self.assertEqual(len(geom.geoms), 1)
self.assertEqual(
dump_coords(geom),
[[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0),
[(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25),
(0.25, 0.25)]]])
# Or from another multi-polygon
geom2 = MultiPolygon(geom)
self.assertEqual(len(geom2.geoms), 1)
self.assertEqual(
dump_coords(geom2),
[[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0),
[(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25),
(0.25, 0.25)]]])
# Sub-geometry Access
self.assertIsInstance(geom.geoms[0], Polygon)
self.assertEqual(
dump_coords(geom.geoms[0]),
[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0),
[(0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25),
(0.25, 0.25)]])
with self.assertRaises(IndexError): # index out of range
geom.geoms[1]
# Geo interface
self.assertEqual(
geom.__geo_interface__,
{'type': 'MultiPolygon',
'coordinates': [(((0.0, 0.0), (0.0, 1.0), (1.0, 1.0),
(1.0, 0.0), (0.0, 0.0)),
((0.25, 0.25), (0.25, 0.5), (0.5, 0.5),
(0.5, 0.25), (0.25, 0.25)))]})
# Adapter
coords = ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0))
holes_coords = [((0.25, 0.25), (0.25, 0.5), (0.5, 0.5), (0.5, 0.25))]
mpa = asMultiPolygon([(coords, holes_coords)])
self.assertEqual(len(mpa.geoms), 1)
self.assertEqual(len(mpa.geoms[0].exterior.coords), 5)
self.assertEqual(len(mpa.geoms[0].interiors), 1)
self.assertEqual(len(mpa.geoms[0].interiors[0].coords), 5)
def test_suite():
return unittest.TestLoader().loadTestsFromTestCase(MultiPolygonTestCase)