Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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: 3798

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

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 567
Site web

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

 

Pied de page des forums

Powered by FluxBB