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 27/03/2019 17:50:15

femtome0903
Membre

Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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

Dernière modification par femtome0903 (28/03/2019 09:51:18)

Hors ligne

#2 27/03/2019 21:22:15

rjuju
Administrateur

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

Quel est le type du champ shape, et quelle(s) erreurs rencontrez-vous exactement ?

En ligne

#3 28/03/2019 09:49:21

femtome0903
Membre

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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é

Hors ligne

#4 28/03/2019 16:19:52

rjuju
Administrateur

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

S'agit-il du message d'erreur exact ?

Est-ce que la requête suivante fonctionne ?

select st_transform(pa.shape, 2154) from mytable pa where pera_id=50


Si ce n'est pas le cas, y a-t-il des lignes dont le SRID n'est pas 3587 ?

En ligne

#5 28/03/2019 16:31:01

femtome0903
Membre

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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.

Hors ligne

#6 28/03/2019 21:10:34

rjuju
Administrateur

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

Juste pour être sur, avez-vous la même erreur si vous testez sur la première ligne uniquement ?  Je n'ai sinon pas trouvé de trace de type st_geometry, vouliez-vous dire geometry?

En ligne

#7 29/03/2019 09:44:11

femtome0903
Membre

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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.

Hors ligne

#8 29/03/2019 13:25:55

rjuju
Administrateur

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

Non, je voulais dire


select st_transform(pa.shape, 2154) from mytable pa where pera_id=50 LIMIT 1;


quand au type st_geometry de mon champ shape , c'est un type propre à Esri

Ah, ça explique bien des choses, notamment le message d'erreur étrange.  C'est donc un problème entièrement lié à ESRI, et je n'y connais malheureusement rien du tout.

En ligne

#9 29/03/2019 13:46:34

femtome0903
Membre

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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.

Hors ligne

#10 29/03/2019 16:45:57

femtome0903
Membre

Re : Debutant en PgAdmin & PostgresSQL _ Requêtes spatiales

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.

Dernière modification par femtome0903 (29/03/2019 16:46:37)

Hors ligne

Pied de page des forums