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

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 …

Faire un don 

Retrouver nos membres bienfaiteurs

#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

 

#2 Sun 08 May 2022 14:55

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 209
Site web

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.

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

Sylther a écrit:

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

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 949
Site web

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

ThomasG a écrit:

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


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

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 949
Site web

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

ThomasG a écrit:

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


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

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 949
Site web

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

ThomasG a écrit:

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

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 949
Site web

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

 

Pied de page des forums

Powered by FluxBB