Bonjour,
Dans mon application python 2.1.1, j'utilise la lib shapely 1.2.13.
Je fais l'union de polygones, et j'ai une erreur. Si je fais cette union dans un autre ordre je n'ai pas d'erreur. Voici l'extrait de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
		l_polygon = self.d_polygons.keys()
		print "d_polygons[ l_polygon[0]]=",self.d_polygons[ l_polygon[0] ]
		envelop = self.d_polygons[ l_polygon[0] ]
		i = 1
		for p in reversed(l_polygon[1:]):
			points = self.d_polygons[ p ]
			print "i=%d  l_polygon[i]=%s" % (i,l_polygon[i])
			i += 1
			envelop = envelop.union(points)
Le résultat est ici OK
si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
		l_polygon = self.d_polygons.keys()
		print "d_polygons[ l_polygon[0]]=",self.d_polygons[ l_polygon[0] ]
		envelop = self.d_polygons[ l_polygon[0] ]
		i = 1
		for p in l_polygon[1:]:
			points = self.d_polygons[ p ]
			print "i=%d  l_polygon[i]=%s" % (i,l_polygon[i])
			i += 1
			envelop = envelop.union(points)
j'ai l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>linux awalter 48>: python ./HMI/holes_and_overlaps.py -u awalter -p ipas0 -s ACE2011B -d ALLSIMUL -a FCBALDB -m Y
IPAS_ENV file used : </ipas2/opeint/IPAS/ACE2011B/IPAS/tmp/IPAS_ENV_NESU.data>
d_polygons[ l_polygon[0]]= POLYGON ((186581.0000000000000000 23067.0000000000000000, 186621.0000000000000000 22995.0000000000000000, 186709.0000000000000000 23005.0000000000000000, 186725.0000000000000000 23003.0000000000000000, 186716.0000000000000000 23158.0000000000000000, 186727.0000000000000000 23412.0000000000000000, 186819.0000000000000000 23716.0000000000000000, 186840.0000000000000000 23805.0000000000000000, 186877.0000000000000000 23973.0000000000000000, 186920.0000000000000000 24402.0000000000000000, 186961.0000000000000000 24447.0000000000000000, 186879.0000000000000000 24756.0000000000000000, 186679.0000000000000000 25123.0000000000000000, 186177.0000000000000000 23879.0000000000000000, 186581.0000000000000000 23067.0000000000000000))
i=1  l_polygon[i]=A039
i=2  l_polygon[i]=A032
...
i=123  l_polygon[i]=A072
i=124  l_polygon[i]=A049B
Traceback (most recent call last):
  File "./HMI/holes_and_overlaps.py", line 2270, in <module>
    hole_overlap = Application__(options.user, options.password, options.simulation, options.database, options.airspace, options.watch_dog, options.mmi)
  File "./HMI/holes_and_overlaps.py", line 134, in __init__
    self.I_main = Main__(self)
  File "./HMI/holes_and_overlaps.py", line 943, in __init__
    envelop = envelop.union(points)
  File "/opt/IPASTEST/lib/python2.7/site-packages/shapely/geometry/base.py", line 343, in union
    return geom_factory(self.impl['union'](self, other))
  File "/opt/IPASTEST/lib/python2.7/site-packages/shapely/topology.py", line 53, in __call__
    "This operation produced a null geometry. Reason: unknown")
shapely.geos.TopologicalError: This operation produced a null geometry. Reason: unknown
>
Je n'ai pas trop d'idée pour m'en sortir si ce n'est pas déterministe.
Merci