PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » ArcGis Pro - Requete Spatiale / ERROR parse error - invalid geometry » 18/04/2019 14:36:26

Je re actualise le post :

J'ai trouvé une piste puisque que j'ai reussi à insérer la geometrie de l'intersection d'une autre maniére :
en creant une table pour l'ajouter et en l'insérant dans cette requete :


round(sum(st_area(i.shape))) as surf_3857_intersection,
round(
sum
(st_area
(st_transform
(st_geomfromtext
(st_astext(i.shape)::varchar,3857)
,2154)
))) as surf_2154_intersection

from
intersection i

et en enlevant le st_intersection. A partir de ça je me suis également rendu compte ( avec la formule st_astext uniquement que la geometrie de mon intersection est de type MULTIPOLYGON contrairement à mes deux tables de base qui sont de type POLYGON. est-til possible que le type MULTIPOLYGON pose probléme ?

#2 Général » ArcGis Pro - Requete Spatiale / ERROR parse error - invalid geometry » 18/04/2019 13:17:02

femtome0903
Réponses : 2

Bonjour,

je rencontre un problème en lien avec ma requête sql sous arcgis pro( et son type st_geometry au lieu de geom)  basé sur le calcul d'une surface avec n paramètres puis reprojeté d'un srid à un autre ; le message d'erreur est le suivant :



ERROR: ERREUR: parse error - invalid geometry HINT: "FC" <-- parse error at position 2 within geometry État SQL :XX000


ce message d'erreur est généré à partir de la requête suivante :

sum(       
(st_area
(st_transform
(st_geomfromtext
(st_astext
(st_intersection(pa.shape,s.shape)::varchar),3857),2154
))))
from table1 pa, table2 s
where( quelques critéres)
and st_intersects(pa.shape,s.shape)
and st_intersection(pa.shape,s.shape)::varchar like 'FC%' -- ligne test


au préalable, à quoi correspond ce invalid geometry HINT sur ce fameux " FC" ? , a ceci :

nom zone       st_intersection
zone de ...      FC0700000801000008010000110F0000A01F0000010000009C83A7A3A10C84D3....
v

A savoir que le problème sera le même avec toutes autres géométries si j'enleve la clause st_intersection like 'fc' dans le where , là c’était juste pour mettre en évidence un résultat ciblé.
Les documentations trouvées sur le web tournent pour la plupart sur le fait  de devoir modifier la table mais ça ne sera pas possible en ce qui me concerne. Par ailleurs , la même requête renvoie au moins des résultats quand je travaille sous Postgres /  Qgis ( et arcgis pro imposé).

Une personne aurait t-elle une idée à proposer ?
Merci d'avance

#3 Re : Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 29/03/2019 16:45:57

Finalement, la solution a été trouvé :

  round(sum(st_area(st_transform(st_geomfromtext(st_astext(pa.shape)::varchar,3857),2154)))) as src2154. 

si ::varchar est retiré de ma formule celà va donner ce message d'erreur :
la fonction st_geomfromtext(cstring, integer) n'existe pas .
Donc j'obtiens ce résultat que je vérifie dans arcgis par le geotraitement Project qui me donne une valeur cohérente !

Merci malgré tout pour les réponses données.

#4 Re : Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 29/03/2019 13:46:34

la requête offre le même message d'erreur.
Du coup, je vais effectivement rechercher sur cette piste.
Merci pour les réponses ! je posterais la solution quand j'aurais quelque chose.

#5 Re : Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 29/03/2019 09:44:11

bonjour,

vous voulez dire la 1ere ligne de mon premier post basée sur " select sum(st_area(st_transform(st_geomfromtext('MULTIPOLYGON (((  [ 1026721.62370000 5271604.49020000 ...+ le reste...] )))',3857),2154))) as src2154
from mytable pa where mycolumn=50 " ? 
Si oui cette ligne fonctionne.

quand au type st_geometry de mon champ shape , c'est un type propre à Esri:
https://desktop.arcgis.com/fr/arcmap/la … e-type.htm

il semblerait que c'est le passage du 3857 au 2154 qui pose problème , pas la syntaxe elle-même.

#6 Re : Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 28/03/2019 16:31:01

Merci pour vos réponses.
votre requête me donne le même résultat  qui est le suivant : ERROR: ERREUR: ESRI: error generating shape2 [-2020]: État SQL :22P02
et j'ai bien le srid 3857 associé à chaque ligne.

#7 Re : Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 28/03/2019 09:49:21

bonjour, le champ shape est de type st_geometry et en terme en messages d'erreurs et de requêtes qui fonctionnent :


Vérification du SRID actuel :

select st_srid (pa.shape)  from mytable pa limit 1 me donne 3857
Fonctionnel :
select sum(st_area(pa.shape))    from  mytable pa where pera_id=50   


ERREUR: ESRI: error generating shape2 [-2020]: État SQL :22P02  pour la requete ci dessous:

select sum(st_area(st_transform(pa.shape,2154)))as src2154 from mytable pa where pera_id=50   
Bien sur si je remplace 2154 ci dessus par 3857 , ça me renvoie le résultat que je veux changer

j'ai également ce message d'erreurs pour d'autres tournures que j'avais testé

#8 Général » Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales » 27/03/2019 17:50:15

femtome0903
Réponses : 9

Bonjour,

Actuellement en début de stage sig depuis peu ( consacré entre autres à pgadmin , arcgisPro, python ,.. )
je commence un travail consacré aux requêtes spatiales à l'utilisation des "st_" ..

Une des demandes de mon stage est le suivante:

- l'objectif est de calculer une surface depuis un champ en 3857 et de la recalculer avec un autre srid 2154. Jusqu'à présent le
seul moyen trouvé est , comme ci dessous de calculer sa surface par son contenu textuel avec en plus l'utiliser d'un
st_transform pour passer du 3857 au 2154.



select sum(st_area(st_transform(st_geomfromtext('MULTIPOLYGON (((  [ 1026721.62370000 5271604.49020000 ...+ le reste...] )))',3857),2154))) as src2154
from mytable pa where mycolumn=50

celà fonctionne bel et bien apparemment mais dans ma démarche je voudrais l'appliquer sur tout le champ geom ( du moins shape en ce qui me concerne puisqu'arcgis pro ) pour transformer chaque ligne en 2154 ( et qui devrait ressembler à :

select sum(st_area(st_transform(pa.shape,3857),2154)) as src2154 from mytable pa where mycolumn=50 .

J'ai beau avoir tester X possibilités je n'arrive pas à appliquer ma formule sur mon champ 'shape' .

Pied de page des forums

Propulsé par FluxBB