Message posté par : Olivier Pompier (pompierolivier(a)hotmail.com)
----------------------------------------
Bonjour à la communauté,
Je sollicite votre aide concernant un script qui a pour but d'intersecter les éléments
d'une couche et de calculer le nombre de superpositions. J'ai pondu le script
suivant qui fait le job:
-----------------
Code :
while compteur > 0:
outFn =
os.path.join(os.path.dirname(path_file),'intersection'+str(compteur)+'.shp')
writer = QgsVectorFileWriter(outFn, 'UTF-8', fields, QgsWkbTypes.Polygon,
layer.sourceCrs(), 'ESRI Shapefile')
l1 = list()
for feat in features:
l1.append(feat)
l2 = l1 # la liste 2 est une copie de la liste 1
l3 = [] # liste contenant les surfaces des éléments intersectés
for elt1 in l1:
for elt2 in l2:
if elt1.id() > elt2.id():
if elt1.geometry().intersects(elt2.geometry()):
intersection = elt1.geometry().intersection(elt2.geometry())
elt = QgsFeature(fields)
elt.setAttribute('nb_sup',compteur)
elt.setGeometry(intersection)
if round(elt.geometry().area(),4) not in l3:
writer.addFeature(elt)
l3.append(round(elt.geometry().area(),4))
# iface.addVectorLayer(outFn, '','ogr')
del(writer)
if len(l3) == 0:
compteur = 0
else:
compteur += 1
layer = QgsVectorLayer(outFn, str(compteur), "ogr")
features = layer.getFeatures()
-----------------
Problème, lorsque la couche contient beaucoup d' éléments, le temps de traitement est
extrêmement long (des heures et des heures), et généralement, je stoppe l’exécution du
script avant.
Auriez vous des suggestions / idées pour un meilleur code ?
Merci
O. Pompier
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=329965#p329965
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net