Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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 ?
Julien.
https://rjuju.github.io/
Hors 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 ?
Julien.
https://rjuju.github.io/
Hors 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?
Julien.
https://rjuju.github.io/
Hors 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.
Julien.
https://rjuju.github.io/
Hors 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