#1 Thu 02 April 2020 19:13
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
QGIS: Erreur syntaxe formule SQL
bonjour,
en essayant d'exécuter cette formule :
create table point1 as ( select t.id_troncon, a.distanomsc, a.distanomcc, a.codanom, a.tricodanom, a.noteecoul, a.noteetanch, a.notegpdegrad, a.notegpstruct, a.incomplet, a.photoanom, a.videotroncon,st_collect(st_line_interpolate_point(st_linemerge(geom), (a.distanomsc/st_length(geom)))), st_line_interpolate_point(st_linemerge(geom), 1-(a.distanomcc/st_length(geom))) from Troncon t join TEST a on t.id_troncon=a.idtroncon group by t.id_troncon, a.distanomsc, a.distanomcc, a.tricodanom, a.tritypeanom, a.noteecoul, a.noteetanch, a.notegpdegrad, a.notegpstruct, a.incomplet, a.photoanom, a.videotroncon, geom);
J'ai pour résultat ceci... near "(": syntax error.
je n'arrive pas à comprendre pourquoi
Hors ligne
#2 Thu 02 April 2020 20:56
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
En enlevant la première "(" et la dernière ")", est-ce que ça marche ?
Hors ligne
#3 Thu 02 April 2020 21:26
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
En effet, merci mais maintenant il me donne une nouvelle erreur...
no such column: geom dans cette formule "geom" dpot etre un champ ma couche Troncon ?
Hors ligne
#4 Thu 02 April 2020 21:52
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Ça dépend de la source de données. Ça peut être "geometry" dans certaines sources. Il faudrait spécifier a. ou t. si il s'agit de couches géométriques, sinon c'est ambigu.
Dernière modification par carteq (Thu 02 April 2020 21:54)
Hors ligne
#5 Thu 02 April 2020 22:36
- Julien Gondellon
- Participant actif
- Date d'inscription: 17 Apr 2014
- Messages: 67
Re: QGIS: Erreur syntaxe formule SQL
Bonsoir,
Je rebondit sur cette discussion. J'étais en train de cherche sur le net l'utilité de la fonction st_line_interpolate_point. Et je tombe sur ce post.
Si je comprends bien vous cherchez à positionner des points le long d'une ligne.
Mais en retour à carteq. comment spécifier que a ou t sont des couches géométrique ?
Merci
Hors ligne
#6 Thu 02 April 2020 22:59
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
En fait, ici c'est soit "a", ou "t" qui contient la géométrie, ou les deux. Il faut indiquer de quelle table on la prend pour les opérations. Tous les champs sont référencés a. ou .t dans la requête, mais jamais "geom". Ça ne fait pas de sens, surtout si "geom" se trouve dans chaque table. Il faudrait nommer les champs qui contiendront les 2 opérations géométriques aussi. Il faudrait aussi inclure le champ "geom" dans le Select puisqu'il fait partie du Group BY.
Tous les champs hors du Group BY doivent être agrégés également, si il y en a.
Dernière modification par carteq (Thu 02 April 2020 23:20)
Hors ligne
#7 Thu 02 April 2020 23:08
- Julien Gondellon
- Participant actif
- Date d'inscription: 17 Apr 2014
- Messages: 67
Re: QGIS: Erreur syntaxe formule SQL
PLM, pourquoi tu n'essayes pas avec "Interpolate point on line" directement dans QGIS, si tu es sous qgis.
Pratique si tu as quelques points. Par contre si tu en as plusieurs, je ne sais pas comment tu peux l'utiliser. Je n'ai jamais réussi pour automatiser son fonctionnement.
D'accord avec Carteq, il faut que tu nous précises qu'elle est la table géométrique : la Troncon ou la Test ?
Hors ligne
#8 Thu 02 April 2020 23:23
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
@Julien, selon un post précédent, PLM veut faire ceci :
mon objectif final serait d'automatiser via des formules ou scripts car j'ai besoin de placer une multitude de points sur une multitude de lignes à des distances qui varient et qui sont consignés sur des CSV.
Hors ligne
#9 Thu 02 April 2020 23:44
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
D’accord @carteq ma couche Tronçon est une couche géométrique de lignes mai je n’ai pas de champs définissant la géométrie de chacun des tronçons sur lesquelles je veux faire un point.
Faut il ajouter un champ « geom » renseigner par le wkt de chaques tronçon ?
Hors ligne
#10 Thu 02 April 2020 23:45
- Julien Gondellon
- Participant actif
- Date d'inscription: 17 Apr 2014
- Messages: 67
Re: QGIS: Erreur syntaxe formule SQL
Du coup ma solution ne marchera pas.
Il faut donc que PLM améliore sa formule.
A mon avis, il faut que tu commences par cela :
Il faudrait aussi inclure le champ "geom" dans le Select puisqu'il fait partie du Group BY
Hors ligne
#11 Thu 02 April 2020 23:56
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Faut il ajouter un champ « geom » renseigner par le wkt de chaques tronçon ?
Si ta couche est géométrique, il y a implicitement une colonne géométrie quelque part. De quel type est ta source de données ? (shp, SQLite, geopackage , etc ?)
Personnellement, je créerais la couche de destination en premier lieu (juste la structure, donc vide d'entités). Ensuite, je ferais un Insert Into.
Hors ligne
#12 Fri 03 April 2020 00:28
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Un exemple, en couche virtuelle :
Select
st_collect(st_line_interpolate_point(st_linemerge(geometry) ,(a.dist/st_length(geometry)))) as geom2 from LIGNES as a
"geometry" est implicite : pas visible dans la table d'attribut.
Si tu es en SQLite, c'est "geom" je crois. À vérifier.
"Pour les géopackages il faut faire des conversions explicites de la géométrie (qui est stockée sous un BLOB différent) pour pouvoir utiliser les fonctions spatiales.
Ou alors lancer la requête suivant avant les requêtes spatiales :
Code:
select EnableGpkgAmphibiousMode()"
Dernière modification par carteq (Fri 03 April 2020 00:30)
Hors ligne
#13 Fri 03 April 2020 00:35
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
Faut il ajouter un champ « geom » renseigner par le wkt de chaques tronçon ?
Si ta couche est géométrique, il y a implicitement une colonne géométrie quelque part. De quel type est ta source de données ? (shp, SQLite, geopackage , etc ?)
Personnellement, je créerais la couche de destination en premier lieu (juste la structure, donc vide d'entités). Ensuite, je ferais un Insert Into.
Ma couche géométrique est un spatialite ou svp au choix donc geometry ou geom si j’ai bien compris.
Hors ligne
#14 Fri 03 April 2020 00:49
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Autre exemple, plus proche :
Select a.CL_CHE_PLA, b.testing,
st_line_interpolate_point(st_linemerge(a.geometry), 1-(a.ID_CHEMIN/st_length(a.geometry))) as geometry from LaCouche as a JOIN LaTable as b on a.ident = b.ident
Hors ligne
#15 Fri 03 April 2020 00:54
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
En Spatialite (SQLite) : geometry. J'ai vérifié.
Hors ligne
#16 Fri 03 April 2020 12:32
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
Bonjour @carteq, j'ai changé de stratégie,
SELECT ST_Line_Interpolate_Point( geometry , 0.5),* FROM Troncon
je vais utiliser cette formule mais je veux remplacer la valeur 0.5 par une valeur contenue dans un champs A de la couche tronçon comme l'écrire ?
Ensuite est-ce que cette formule peut fonctionner sachant que chacune de mes entités dans Troncon ont une une valeur de champ A différente.
Hors ligne
#17 Fri 03 April 2020 13:12
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
En définitive est-il possible de créer un modeleur avec la fonction st_line_interpolate_point (geometry, consigne) sachant que j'ai une couche vecteur de lignes contenant la (geometry) et un champ contenant la (consigne) variant pour chaques entités.
exemple :
ligne1 champ consigne 0.2 = je veux un point a 20% de ma ligne 1
ligne2 champ consigne 0.95 = je veux un point a 95% de ma ligne 2
ext......
j'ai réussi à faire fonctionner la formule pour une couche de 1 entité mais à plusieurs je bloque merci d'avance.
Hors ligne
#18 Fri 03 April 2020 14:22
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Commençons par le SQL, essaie ceci :
SELECT ST_Line_Interpolate_Point( a.geometry , b.A) FROM Troncon as a, Troncon as b where a.ID = b.ID
(non testé)
Hors ligne
#19 Fri 03 April 2020 14:47
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
Voici votre formule adapté à mes champs
select ST_Line_Interpolate_Point( a.geometry , b.danom) FROM Troncon as a, itv2 as b where a.id_troncon = b.idtronco
la formule est bonne mais il ne me crée pas de point.
Hors ligne
#20 Fri 03 April 2020 15:23
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Normal, c'est juste un select. Si vous faites une couche de points vide, disons "pts" :
Insert Into pts (geometry) select ST_Line_Interpolate_Point( a.geometry , b.danom) as geometry FROM Troncon as a, itv2 as b where a.id_troncon = b.idtronco
- non testé
Hors ligne
#21 Fri 03 April 2020 15:57
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
Il annonce une erreur :
Query execution error on CREATE TEMP VIEW _tview AS Insert Into pts (geometry) select ST_Line_Interpolate_Point( a.geometry , b.danom) FROM Troncon as a, itv2 as b where a.id_troncon = b.idtroncon: 1 - near "Insert": syntax error
Hors ligne
#22 Fri 03 April 2020 16:35
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Je vais devoir tester.
Hors ligne
#23 Sat 04 April 2020 16:19
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
J'ai testé avec une base Spatialite. Ça fonctionne.
Ça prend une couche point et une couche lignes (et votre table dans votre cas pour les distances). Dans mon exemple, la distance est dans la couche de lignes.
Insert Into pts (geometry)
select ST_Line_Interpolate_Point( a.geometry , 1-(b.dist/st_length(a.geometry))) as geometry
FROM lignes
as a, lignes
as b where a.id = b.id
Dans la fenêtre de QGIS, la donnée ne semble pas se rafraîchir. Mais dans la table et l'aperçu cartographique du DB Manager, les points sont ajoutés.
L'onglet Info du DB Manager vous informe de la colonne qui contient la géométrie de vos couches.
Si la valeur du 2e argument de ST_Line_Interpolate_Point n'est pas entre 0 et 1, le manager retourne une ligne. Il va donc renvoyer une erreur de mauvais geom-type puisque la cible est une couche de points.
Dernière modification par carteq (Sat 04 April 2020 16:30)
Hors ligne
#24 Mon 06 April 2020 11:29
- PLM
- Participant occasionnel
- Date d'inscription: 25 Feb 2019
- Messages: 13
Re: QGIS: Erreur syntaxe formule SQL
Bonjour,
J'ai testé ce week-end différentes choses suivant vos conseils éclairés. Mais je suis également reparti de ma formule qui fonctionnait l'année dernière. Et je n'arrive une fois de plus à aucun résultat.
Je redétaille mon problème :
J'ai un shape de polyligne (en pièce jointe) avec des identifiants unique contenu dans le champ (id)
J'ai un CSV (en pièce jointe) dans lequel les données en colonne sont entre autres :
Colonne (idtroncon)=(id de la shape) : Identifiant unique qui renvoi à l'identifiant de la polyligne,
Colonne (danom) : Un pourcentage, correspondant à la distance du point à créer depuis le début de la ligne.
Autres colonnes : Informations à intégrer dans le futur shape de points
Je dois donc créer des points sur les polylignes à partir des informations inscrites dans le CSV.
Sachant qu'il y a plusieurs points à créer sur les même lignes à des distances différentes.
J'espère que les pièces jointes seront d'une plus grande aide.
Merci de votre aide. Je désespère.
Hors ligne
#25 Mon 06 April 2020 19:29
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
Avez-vous essayé avec une BD Spatialite ?
En couche virtuelle (un shp par exemple), les Insert et les Update sont imposibles. Seuls les Select passent. Bref, c'est read-only.
Ça peut être geopackage, en suivant les instructions mentionnées plus tôt.
Je vais tester vos données en Spatialite.
Dernière modification par carteq (Mon 06 April 2020 19:29)
Hors ligne
#26 Mon 06 April 2020 21:46
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Erreur syntaxe formule SQL
J'ai fait un test avec un nombre limité de champs, en Spatialite.
Insert Into pts_finaux2 (geometry, distanomcc, codanom, idtroncon, danom )
select ST_Line_Interpolate_Point( a.geometry , (b.danom * st_length(a.geometry))) as geometry, b.distanomcc, b.codanom, b.idtroncon, b.danom
FROM troncon as a,
itv2 as b
where a.id = b.idtroncon
Ça fonctionne.
Dernière modification par carteq (Mon 06 April 2020 21:47)
Hors ligne