Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
Pages: 1
- Sujet précédent - QGIS: Transformation d'une table MySQL en couche ponctuelle - Sujet suivant
#1 Sat 07 May 2022 10:06
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
J'aurais besoin d'aide SVP, je souhaiterais pouvoir transformer une table issue de MySQL contenant les coordonnées de points XY, en une couche ponctuelle.
Autrement dit, réaliser l'opération faite par l'outil "Ajouter une couche de texte délimitée" à partir d'une table située sur MySQL.
Hors ligne
#3 Sun 08 May 2022 17:21
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Peut-être aire un export de la table mySQL en csv ?
DBeaver peut aider
Bonne journée.
Merci pour votre réponse.
En fait je souhaiterais que mon lien reste dynamique, autrement dit lorsque la table est modifiée, ma couche shape ponctuelle dans mon projet QGIS soit mise à jour en temps réel.
Hors ligne
#4 Sun 08 May 2022 18:11
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Pas forcément simple mais un exemple basique pour illustrer devrait vous aider
Créer une table dans MySQL
Code:
CREATE TABLE IF NOT EXISTS points_xy ( identifier INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), x FLOAT, y FLOAT ) ENGINE=INNODB;
Insérer quelques valeurs dans cette même table créée
Code:
INSERT INTO points_xy(name, x, y) VALUES ('az', 1.84, 43.23), ('by', 2.38, 46.37), ('cx', 5.12, 34.24), ('dw', -2.5, 44.17);
Tester votre connexion à MySQL avec cette ligne de commande (optionnel)
Code:
ogrinfo -so MySQL:mydbname,user=myuser,password=mypassword points_xy -dialect SQLite -sql "SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy"
Créer un VRT (inspiré du test ci-dessus). Ici en ligne de commande, sinon copier/coller manuellement le bloc <OGRVRTDataSource></OGRVRTDataSource> dans un fichier)
Code:
echo '<OGRVRTDataSource> <OGRVRTLayer name="points_xy"> <SrcDataSource>MySQL:mydbname,user=myuser,password=mypassword</SrcDataSource> <SrcSQL dialect="SQlite">SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy</SrcSQL> </OGRVRTLayer> </OGRVRTDataSource>' >| demo.vrt
Enfin, ajouter le fichier demo.vrt en l'ouvrant comme une couche vecteur dans QGIS. Il est possible d'établir une connexion entre MySQL et QGIS sans passer par cet intermédiaire mais votre table doit contenir une colonne spécifique avec un type GEOMETRY. J'évite ce problème en demandant à GDAL de faire le passe-plat via un VRT.
Thomas
Hors ligne
#5 Mon 09 May 2022 10:24
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Pas forcément simple mais un exemple basique pour illustrer devrait vous aider
Créer une table dans MySQLCode:
CREATE TABLE IF NOT EXISTS points_xy ( identifier INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), x FLOAT, y FLOAT ) ENGINE=INNODB;Insérer quelques valeurs dans cette même table créée
Code:
INSERT INTO points_xy(name, x, y) VALUES ('az', 1.84, 43.23), ('by', 2.38, 46.37), ('cx', 5.12, 34.24), ('dw', -2.5, 44.17);Tester votre connexion à MySQL avec cette ligne de commande (optionnel)
Code:
ogrinfo -so MySQL:mydbname,user=myuser,password=mypassword points_xy -dialect SQLite -sql "SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy"Créer un VRT (inspiré du test ci-dessus). Ici en ligne de commande, sinon copier/coller manuellement le bloc <OGRVRTDataSource></OGRVRTDataSource> dans un fichier)
Code:
echo '<OGRVRTDataSource> <OGRVRTLayer name="points_xy"> <SrcDataSource>MySQL:mydbname,user=myuser,password=mypassword</SrcDataSource> <SrcSQL dialect="SQlite">SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy</SrcSQL> </OGRVRTLayer> </OGRVRTDataSource>' >| demo.vrtEnfin, ajouter le fichier demo.vrt en l'ouvrant comme une couche vecteur dans QGIS. Il est possible d'établir une connexion entre MySQL et QGIS sans passer par cet intermédiaire mais votre table doit contenir une colonne spécifique avec un type GEOMETRY. J'évite ce problème en demandant à GDAL de faire le passe-plat via un VRT.
Thomas
Merci pour votre retour.
J'ai copié cela dans un bloc note puis enregistrer sous test.vrt mais ça ne fonctionne pas.
<OGRVRTDataSource>
<OGRVRTLayer name="pointxy">
<SrcDataSource>MySQL:dbname,user=username,password=mdp</SrcDataSource>
<SrcSQL dialect="SQlite">SELECT *, MakePoint(coordx,coordy, 4326) AS geom FROM pointxy</SrcSQL>
</OGRVRTLayer>
</OGRVRTDataSource>
Ma base MySQL est en local, est-ce que dans ce code, il ne manquerait pas l'indication: host=localhost
J'ai aussi une interrogation sur le format des champs de coordonnées, je sais pas trop si c'est le bon.
Dernière modification par sporito (Mon 09 May 2022 10:26)
Hors ligne
#6 Mon 09 May 2022 12:12
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Testez en ligne de commande
Code:
ogrinfo -so -al MySQL:dbname,user=username,password=mdp
Pas besoin de mettre localhost, c'est implicite comme indiqué dans la documentation de GDAL (https://gdal.org/drivers/vector/mysql.html)
No hostname is provided, so localhost is assumed
Vous avez à priori pas testé la commande ogrinfo déjà mentionnée (rappelée ci-dessous): la syntaxe dans le fichier VRT est la même. Si cette commande fonctionne, votre VRT fonctionne
Code:
ogrinfo -so MySQL:mydbname,user=myuser,password=mypassword points_xy -dialect SQLite -sql "SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy"
Thomas
Hors ligne
#7 Mon 09 May 2022 13:49
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Testez en ligne de commandeCode:
ogrinfo -so -al MySQL:dbname,user=username,password=mdpPas besoin de mettre localhost, c'est implicite comme indiqué dans la documentation de GDAL (https://gdal.org/drivers/vector/mysql.html)
No hostname is provided, so localhost is assumed
Vous avez à priori pas testé la commande ogrinfo déjà mentionnée (rappelée ci-dessous): la syntaxe dans le fichier VRT est la même. Si cette commande fonctionne, votre VRT fonctionneCode:
ogrinfo -so MySQL:mydbname,user=myuser,password=mypassword points_xy -dialect SQLite -sql "SELECT *, MakePoint(x,y, 4326) AS geom FROM points_xy"Thomas
en effet j'ai un souci dès ce niveau là:
j'ai installé FWTools puis j'ai tapé cmd, pour ouvrir l'invit de commande, je me suis placé dans le repertoire FWTools2.4.7 puis j'ai écris la commande, ça me met ce message d'erreur:
'ogrinfo' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Hors ligne
#8 Mon 09 May 2022 19:26
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Ne passez pas par FWTools, ce logiciel n'a pas été mis à jour depuis 6 ans (https://trac.osgeo.org/gdal/wiki/FWTools). Il utilise des versions de GDAL dépassées.
Si vous avez déjà installé QGIS, vous avez sans le savoir déjà GDAL d'installé. Pour confirmer, ouvrez une commande dans Windows en lançant le raccourci "OSGEO4W Shell" puis tapez "ogrinfo" pour confirmer.
Thomas
Hors ligne
#9 Tue 10 May 2022 09:02
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Ne passez pas par FWTools, ce logiciel n'a pas été mis à jour depuis 6 ans (https://trac.osgeo.org/gdal/wiki/FWTools). Il utilise des versions de GDAL dépassées.
Si vous avez déjà installé QGIS, vous avez sans le savoir déjà GDAL d'installé. Pour confirmer, ouvrez une commande dans Windows en lançant le raccourci "OSGEO4W Shell" puis tapez "ogrinfo" pour confirmer.
Thomas
j'ai lancé la commande, ça à l'air de fonctionner, je vais tenter le .vrt
Dernière modification par sporito (Tue 10 May 2022 09:07)
Hors ligne
#10 Tue 10 May 2022 10:01
- loicbcn
- Participant occasionnel
- Date d'inscription: 22 Jan 2018
- Messages: 26
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Bonjour,
Il semble possible d'ouvrir une table mysql directement dans QGIS:
Couche - Ajouter une couche - Ajouter une couche vecteur
Puis choisir base de données, et mysql pour le type.
https://freegistutorial.com/how-to-open … e-on-qgis/
Hors ligne
#11 Tue 10 May 2022 22:04
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Hello,
@loicbcn a raison mais c'est sous réserve d'avoir une colonne de type GEOMETRY sinon vous n'aurez que la table attributaire sans représentation spatiale qui sera chargée. Le choix entre les différentes approches dépend surtout si vous pouvez ou non toucher à la structure de la table MySQL que vous utilisez.
J'ai fait un récapitulatif sur https://gist.github.com/ThomasG77/40503 … 38fbaa6114
Thomas
Hors ligne
#12 Wed 11 May 2022 10:46
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: QGIS: Transformation d'une table MySQL en couche ponctuelle
Finalement je suis passé par l'outil ajouter une couche virtuelle car en effet je n'avais pas de représentation spatiale donc j'ai tapé la requete spatiale chargeant la couche et créant la caractéristique spatiale à partir des coordonnées avec MakePoint(x,y, 4326) AS geom.
Merci ThomasG pour votre aide !
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Transformation d'une table MySQL en couche ponctuelle - Sujet suivant