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 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

carteq a écrit:

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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB