#1 Sat 17 July 2021 22:08
- JC_
- Participant occasionnel
- Date d'inscription: 25 Mar 2021
- Messages: 14
QGIS: Creer des points 3D avec Pygis
Bonjour,
Je cherche à créer des points avec une valeur Z avec Pygis. Débutant complet en Python, j'ai trouvé un script qui me créer 4 points mais seulement en coordonnées (x,y), alors que je voudrais ajouter un Z également.
Code:
layer = QgsVectorLayer('Point?crs=EPSG:4326', 'point', 'memory') provider = layer.dataProvider() provider.addAttributes([QgsField('Name', QVariant.String)]) provider.addAttributes([QgsField('ID', QVariant.Int)]) layer.updateFields() f = QgsFeature() p1 = QgsPointXY(78.25, 14.25) p2 = QgsPointXY(78.25, 14.50) p3 = QgsPointXY(78.50, 14.50) p4 = QgsPointXY(78.50, 14.25) f.setGeometry(QgsGeometry.fromPointXY(p1)) f.setAttributes(['Lower Left',1]) provider.addFeature(f) f.setGeometry(QgsGeometry.fromPointXY(p2)) f.setAttributes(['Upper Left',2]) provider.addFeature(f) f.setGeometry(QgsGeometry.fromPointXY(p3)) f.setAttributes(['Upper Right',3]) provider.addFeature(f) f.setGeometry(QgsGeometry.fromPointXY(p4)) f.setAttributes(['Lower Right',4]) provider.addFeature(f) layer.updateExtents() QgsProject.instance().addMapLayer(layer) QgsVectorFileWriter.writeAsVectorFormat(layer, "C:/Users/XXX/Desktop/Articles PEM/Graphiques/testpoint11.shp", "UTF-8", layer.crs(), "ESRI Shapefile") path = "C:/XXX/XXX/Desktop/Articles PEM/Graphiques" layerfile = QgsVectorLayer(path, "test point", "ogr") QgsProject.instance().addMapLayer(layerfile)
J'ai partiellement trouvé un élément de réponse ici : https://gis.stackexchange.com/questions … -in-pyqgis mais je suis bien trop débutant pour adapter mon code, rien ne fonctionne.
Quelqu'un a t-il déjà été confronté au problème ? Une adaptation est-elle possible ?
Merci !
Hors ligne
#2 Sat 17 July 2021 22:28
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Creer des points 3D avec Pygis
Bonjour,
Pas testé le code mais QgsPointXY crée des points 2D. Pour la 3D, il vous faut utiliser QgsPoint et passer les 3 valeurs de coordonnées x,y,z à vos p1..p4
Hors ligne
#3 Sun 18 July 2021 21:45
- JC_
- Participant occasionnel
- Date d'inscription: 25 Mar 2021
- Messages: 14
Re: QGIS: Creer des points 3D avec Pygis
Bonjour,
Merci pour votre éclaircissement.
J'ai changé mon code par celui-là du coup mais il ne fonctionne toujours pas, le Z n'existe pas...
Code:
layer = QgsVectorLayer('Point?crs=EPSG:4326', 'point', 'memory') provider = layer.dataProvider() provider.addAttributes([QgsField('Name', QVariant.String)]) provider.addAttributes([QgsField('ID', QVariant.Int)]) layer.updateFields() f = QgsFeature() f.setGeometry(QgsPoint(78.25, 14.25, 500)) f.setAttributes(['Lower Left',1]) provider.addFeature(f) f.setGeometry(QgsPoint(78.25, 14.50, 400)) f.setAttributes(['Upper Left',2]) provider.addFeature(f) f.setGeometry(QgsPoint(78.50, 14.50, 600)) f.setAttributes(['Upper Right',3]) provider.addFeature(f) f.setGeometry(QgsPoint(78.50, 14.25, 400)) f.setAttributes(['Lower Right',4]) provider.addFeature(f) layer.updateExtents() QgsProject.instance().addMapLayer(layer) QgsVectorFileWriter.writeAsVectorFormat(layer, "C:/Users/XXX/Desktop/Articles PEM/Graphiques/testpoint11.shp", "UTF-8", layer.crs(), "ESRI Shapefile") path = "C:/Users/XXX/Desktop/Articles PEM/Graphiques" layerfile = QgsVectorLayer(path, "test point", "ogr") QgsProject.instance().addMapLayer(layerfile)
Est-ce que j'ai bien fait ?
Hors ligne
#4 Mon 19 July 2021 09:55
Re: QGIS: Creer des points 3D avec Pygis
Bonjour,
Il faut modifier la première ligne de votre code qui crée la couche pour lui indiquer que vous souhaitez stocker le z des points
Code:
layer = QgsVectorLayer('Point z?crs=EPSG:4326', 'point', 'memory')
Jean-Marie
Azimut
Hors ligne
#5 Mon 19 July 2021 10:29
- JC_
- Participant occasionnel
- Date d'inscription: 25 Mar 2021
- Messages: 14
Re: QGIS: Creer des points 3D avec Pygis
Merci beaucoup Jean-Marie, ça marche !!
Bonne journée !
Hors ligne