Message posté par : Saliha
----------------------------------------
Bonjour,
Je vous remercie de m'avoir répondu. Effectivement, je développe une application avec le micro-framework FLASK et je veux intégrer une carte interactive qui permet de visualiser des informations en tant réel à une position spatiale ou une zone. Concernant la bibliothèques utilisée, je n'ai pas compris de quelle bibliothèque vous parlez puisque je suis débutante dans l'utilisation de FLASK, de QGIS (des systèmes d'informations géographiques en général). J'espère que j'ai pu donner les détails nécessaires et expliquer ce que je veux réaliser. Je reste à votre disposition pour d'autres informations que vous jugez utiles. Merci encore.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329478#p329478
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
Message posté par : F.Duval
----------------------------------------
Concernant la boucle, j'ai peut être avancé :
Je n'ai pas de message d'erreur mais rien ne se modifie visuellement/
-----------------
Code :
valeur = 'Bien joué'
for objet in Lctrl.dataProvider().getFeatures():
objet.setAttribute(3, valeur)
Lctrl.commitChanges()
-----------------
sur des sites style stackoverflow, j'ai vu que sur qgis 2. on pouvait devoir faire un 'update' avant le 'commit', mais je ne vois pas l'équivalent sur le cookbook 3.4.
Je pensais que soit on passait pas dataProvider() soit par getFeatures(), je trouve donc bizarre que
Lctrl.dataProvider().getFeatures():
ne génère pas d'erreurs...
J'espère que vous pourrez m'apporter quelques réponses.
Cordialement,
F.DUVAL
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329476#p329476
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
Message posté par : F.Duval
----------------------------------------
Bonjour à tous,
Et merci à ceux qui prendront la peine de lire. Je suis novice dans le développement Python pour QGIS.
J'essaye de faire des auto-exercices 'step by step' pour acquérir les notions/traitement de bases, en suivant principalement le cookbook version 3.4.
A l'avenir j'aimerais (évidemment) être capable de remplir, pour chaque objet, un champ avec une valeur issu d'un calcul préalable, d'une géométrie d'une autre couche, etc...
Pour le moment je bloque pour tout simplement modifier un champ que je viens de créer (ici 'Alors') pour remplacer les 'NULL' par une valeur constante (ici 'Bien joué').
Voici mon code
[Je sais qu'il y a des choses inutiles, surtout au début de celui ci, mais cela me permet de garder une trace de chaque petite étape, pour plus tard)
-----------------
Code :
from qgis.core import *
from qgis.utils import *
from qgis.gui import *
iface=qgis.utils.iface
pjt=QgsProject.instance()
canvas=iface.mapCanvas()
for layer in canvas.layers():
print (layer.name())
#Renvoie :
#"Troncon CTRL"
#"Listing GEOSAT"
#"Listing CTRL"
Tctrl = canvas.layers()[0]
Lgeosat = canvas.layers()[1]
Lctrl = canvas.layers()[2]
#les numéros sont, a priori, dans l'ordre du canvas
print(Lctrl.name())
#Renvoie : "Listing CTRL"
iface.setActiveLayer(Lgeosat)
#Listing GEOSAT devient la couche sélectionnée
XLctrl=Lctrl.dataProvider().fields()[0]
caps = Lctrl.dataProvider().capabilities()
#voir si la couche vecteur est modifiable
if caps & QgsVectorDataProvider.DeleteFeatures:
print('C\'est possible')
else :
print('Pas possible')
#Renvoie : "C'est possible"
XLctrl=Lctrl.dataProvider().fields()[0]
caps = Lctrl.dataProvider().capabilities()
Lctrl.startEditing() #ouvrir mode édition de Listing Ctrl
# je fais sans problème les suppressions et ajouts de champs via le dataprovider
if caps & QgsVectorDataProvider.DeleteAttributes:
Lctrl.dataProvider().deleteAttributes([3])
Lctrl.dataProvider().addAttributes([QgsField("Alors", QVariant.String)])
AlorsLctrl=Lctrl.dataProvider().fieldNameIndex("Alors")
fid = 10
valeur = 'Bien joué'
# j'ai réussi à faire la modif via getFeature mais sur un seul objet : fid = 10, comme décrit dans le cookbook
Lctrl.changeAttributeValue(fid, AlorsLctrl, valeur)
Lctrl.commitChanges()
-----------------
je peux aussi le faire via le data provider (j'ai trouvé la solution en rédigeant ce post):
-----------------
Code :
Lctrl.startEditing() #ouvrir mode édition de Listing Ctrl
if caps & QgsVectorDataProvider.DeleteAttributes:
Lctrl.dataProvider().deleteAttributes([3])
Lctrl.dataProvider().addAttributes([QgsField("Alors", QVariant.String)])
AlorsLctrl=Lctrl.dataProvider().fieldNameIndex("Alors")
fid = 15
attrib = {3:"Bien joué"}
Lctrl.dataProvider().changeAttributeValues({fid : attrib})
Lctrl.commitChanges()
-----------------
J'ai cherché comment remplacer l'argument 'fid' par un symbole ou une formule qui dirait 'pour tous les objets/id', pour que tous aient la valeur 'Bien joué', mais je n'ai pas trouvé, c'est surement très simple pour certains d'entre vous...
J'avais essayé d'inclure les deux façons de faire dans une boucle mais sans réussir non plus.
un truc du style :
-----------------
Code :
fid = 15
attrib = {3:"Bien joué"}
for objet in Lctrl.dataProvider():
Lctrl.dataProvider.changeAttributeValues({fid : attrib})
-----------------
D'ailleurs existe -t-il un glossaire des erreurs qui aiguille sur ce qui bloque, ce qu'il faut corriger : "not iterable", has no attribute", etc... ?
Dans le cook book, je n'arrive pas à comprendre la différence entre :
page 24
-----------------
Code :
if caps & QgsVectorDataProvider.ChangeAttributeValues:
attrs = { 0 : "hello", 1 : 123 }
layer.dataProvider().changeAttributeValues({ fid : attrs })
-----------------
et page 25
-----------------
Code :
layer.changeAttributeValue(fid, fieldIndex, value)
-----------------
si ce n'est qu'il y a une histoire de undo/redo, mais c'est une autre question...
Je récapitule mes principales questions :
Existe -t-il un 'glossaire des erreurs' qui puisse aiguiller sur ce qui bloque, ce qu'il faut corriger : lors des "not iterable", has no attribute", etc... ?
Y a t il un symbole ou une formule en code python pour dire 'pour tous les objets/id' ou 'sur toutes les lignes' ?
Est ce que quelqu'un pourrait m'indiquer comment corriger la boucle SVP ?
Je vous remercie beaucoup d'avoir lu jusque là, et encore plus si vous avez des pistes ou réponses à certaines questions.
Bien cordialement,
F.DUVAL
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329474#p329474
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
Message posté par : Jean-Daniel Lomenède
----------------------------------------
Bonjour,
formule de mise à jour du champs quartier de la couche jardin
en supposant que votre couche s'appelle quartier et que le nom de champs s'appelle "nom_quartier"
pensez à bien choisir texte comme type de donnée.
Fonctionne uniquement sous qgis 3 :
-----------------
Code :
aggregate('quartien','concatenate_unique', "nom_quartier", filter:=intersects(geometry(@parent), $geometry))
-----------------
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329471#p329471
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
Message posté par : geomou
----------------------------------------
Super ! Merci pour les conseils.
Je ne maitrise absolument pas les tuiles. Je viens d'en créer une pour une image et il m'a créé, en 3 secondes, un fichier"nom.mbtiles".
Que dois-je faire avec ce fichier ? le stocker au même endroit que l'image original ? Il sera automatiquement associé à l'image si je veux importer cette dernière dans un autre projet ?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329468#p329468
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
Message posté par : AH
----------------------------------------
Vous travaillez avec des shapes ou sur une base type PostgreSQL ?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329467#p329467
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
Message posté par : Thomas DUMONT
----------------------------------------
Bonjour,
J'ai essayé mais cela ne met pas à jour ma colonne. Cela crée une copie de ma couche en y ajoutant la colonne de la couche de référence... Admettons, mais comment après, mettre à jour ma colonne. Je reviens au point de départ si ce n'est que la jointure se fera sur des champs et non plus sur des objets. Cela ne m'avance pas vraiment.
Merci quand même d'avoir essayé.
Thomas.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329466#p329466
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
Message posté par : AH
----------------------------------------
Bonjour,
Menu Vecteur/Outils de gestion de données/Joindre les attributs par localisation devrait répondre à votre question.
Cordialement.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329465#p329465
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
Message posté par : MLaure19
----------------------------------------
Bonjour,
Je travaille sur QGIS 3.4 et j'ai, à l'aide d'un plugin (QuickMapServices) incorporé la carte mondiale OSM (qui est je pense sous forme de raster). Je souhaiterais en revanche garder uniquement la partie de la carte OSM qui correspond à ma limite communale (masque).
Or je n'arrive pas à transformer la carte OSM en vecteur et je suis donc bloquée dans ma démarche.
Est-ce que quelqu’un aurait une idée lumineuse à ce sujet?
Merci d'avance,
Marie-Laure
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329464#p329464
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
Message posté par : HappyCX (dumont.thom(a)gmail.com)
----------------------------------------
Bonjour,
Je gère les espaces verts d'une commune. J'ai donc une couche des jardins (polygones)et une couche des quartiers (polygones). J'aimerais mettre à jour la colonne quartier de ma couche jardin en passant par une analyse spatiale : chaque objet de la couche jardin prend le nom du quartier dans lequel il se situe.
Avec MapInfo c'était facile mais je ne trouve pas sur QGIS.
Quelqu'un aurait-il une solution à m'apporter?
Merci d'avance, Thomas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=329459#p329459
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