Pages: 1
- Sujet précédent - différence entre getArea de GPolygon et ST_Area de postgis ? - Sujet suivant
#1 Wed 26 May 2010 21:34
différence entre getArea de GPolygon et ST_Area de postgis ?
bonjour.
je souhaiterais utiliser la fonction ST_Area de postgis mais j'ai l'impression que l'unité utilisée n'est pas correcte (je voudrais des kilomètres²) : avec un polygone très précis de paris, j'obtiens 0.0129023924443382
alors qu'en insérant mon polygone dans un GPolygone (pr l'afficher avec google map api) puis en appelant getArea, j'ai la bonne superficie. j'ai essayé de trouvé le coefficiant multiplicateur à appliquer au résultat retourné par ST_Area mais c'est apparemment plus compliqué que ça car sur un très grand polygone, la proportionnalité n'est plus respecté.
avez vous une idée de la convertion à appliquer à ST_Area ?
merci d'avance!
Hors ligne
#2 Thu 27 May 2010 05:49
- mbaudier
- Participant occasionnel
- Date d'inscription: 6 May 2010
- Messages: 11
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
quel est votre projection? (et surtout son unité)
Je suis loin d'être un expert PostGIS, mais j'ai utilisé récemment cette fonction avec la projection ETRS89 / ETRS-LAEA (EPSG 3035) dont l'unité est le mètre.
Je convertissais ensuite en ha en divisant par 10000 (pour des km² cela serait 1000000 ou 10^6).
Peut-être que l'unité que vous utilisez est le degré, d'où ce résultat?
Juste une idée de piste...
Mathieu
Hors ligne
#3 Thu 27 May 2010 09:00
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
bonjour.
merci de ta réponse. je ne suis pas expert non plus sur postgis, mais on va s'en sortir
j'ai ajouté un polygone avec INSERT INTO polygons_department (id_po_de, id_de, polygone) VALUES (154,64,ST_GeomFromText( 'POLYGON((-0.278513523192217 42.9392355563593, ... ))', -1 ) );
je crois que la projection correspond au second paramètre de ST_GeomFromText (pour moi -1), que faut-il mettre à la place ?
merci d'avance
Hors ligne
#4 Thu 27 May 2010 09:45
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
bonjour.
merci de ta réponse. je ne suis pas expert non plus sur postgis, mais on va s'en sortir
j'ai ajouté un polygone avec INSERT INTO polygons_department (id_po_de, id_de, polygone) VALUES (154,64,ST_GeomFromText( 'POLYGON((-0.278513523192217 42.9392355563593, ... ))', -1 ) );
je crois que la projection correspond au second paramètre de ST_GeomFromText (pour moi -1), que faut-il mettre à la place ?
merci d'avance
Bonjour,
Le polygone rentré est visiblement exprimé en latitude, longitude: il faut lui mettre un systeme de reference spatial coherent. (peut etre WGS84, le plus courant des systemes lat/long, dont le SRID (code de projection) est 4326.)
Ca ne suffira pas dans postgis pour calculer une aire en m2 ou km2: il faudra:
soit reprojeter ce polygone dans un systeme metrique (lambert 93 par ex )
soit le stocker dans postigs sous forme de GEOGRAPHY (le nouveau type apporté par Pgis 1.5) et non pas GEOMETRY. ce nouveau type "sait" que les données sont relatives a la "sphere" terrestre et calcule les aires et distances convenablement.
L'ambiguité avec google vient du fait qu'il utilise une projection pour ses données (un vilain mercator spherique, métrique) mais qu'il exprime les coordonnées en sortie en lat/lon, en faisant la conversion tout seul. (enfin je crois )
Nicolas
Hors ligne
#5 Thu 27 May 2010 09:46
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
bonjour,
Il faut mettre 4326 à la place de -1 dans ton cas.
st_area renvoie une surface en unité de la projection, donc il ne renverra pas de km²
Il y a peut être plus simple mais tu peux toujours reprojeter en lambert 2 étendue et calculer la surface.
st_area(transform(the_geom,27572))
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#6 Thu 27 May 2010 10:37
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
merci de vos réponses. j'essaye la réponse de Yves ce soir et je vous tiens au courant.
la solution de GEOGRAPHY ne convient pas dans mon cas car j'utilise postgis 1.4
encore merci
Hors ligne
#7 Thu 27 May 2010 11:12
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
merci de vos réponses. j'essaye la réponse de Yves ce soir et je vous tiens au courant.
la solution de GEOGRAPHY ne convient pas dans mon cas car j'utilise postgis 1.4
encore merci
Faut etre sur du SRID avant de mettre 4326.
Il existe des dizaines de SRS geographiques (lat/long).
D'ou viennent donc ces données ?
Hors ligne
#8 Thu 27 May 2010 13:15
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
bonjour.
ces données viennent d'un KML représentant les départements de france : http://www.gitesdegaule.fr/KaraMeLise/
est-ce bien le 4326 ?
merci !
Hors ligne
#9 Thu 27 May 2010 13:25
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
Si le fichier suit bien le standard KML il doit être en 4326.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#10 Thu 27 May 2010 19:27
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
je viens d'updater mes polygones avec ça :
UPDATE polygons_department SET polygone = ST_SetSRID(polygone, 4326);
puis je fais ça :
select st_area(polygon) , id_de from polygons_department;
mais j'ai tjrs le même résultat...
Hors ligne
#11 Thu 27 May 2010 20:48
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
je viens d'updater mes polygones avec ça :
UPDATE polygons_department SET polygone = ST_SetSRID(polygone, 4326);
puis je fais ça :
select st_area(polygon) , id_de from polygons_department;
mais j'ai tjrs le même résultat...
Bonsoir,
Mettre a jour le SRID des objets geometriques ne suffit pas. Ils sont toujours en lat/lon et postgis calcule toujours l'aire en degres carrés.
Pour calculer une aire en m2, il faut reprojeter les données dans un systeme de projection metrique, comme l'indiquait Yves.
Le systeme de projection choisi doit etre en accord avec la zone geographique des données. Pour la france, vous avez le choix entre Lambert 2 Etendu; SRID 27582, ou mieux, Lambert 93, srid 2154.
quelque chose comme:
select st_area(st_transform(polygone, 27582)) as aire from polygons_departement;
Nicolas
PS: pensez aussi a mettre la table geometry_columns a jour, apres avoir changé le SRID de la colonne polygone.
Cette table doit contenir une entrée décrivant la table polygons_departement.
Certains logiciels se servent de cette table pour lister les données geographiques presentes dans une base postgis.
Hors ligne
#12 Thu 27 May 2010 20:56
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
d'accord merci je commence à comprendre
lorsque j'effectue ton select, j'ai l'erreur :
ERREUR: AddToPROJ4SRSCache: Cannot find SRID (27582) in spatial_ref_sys
comment ajouter le srid dans la table ?
merci d'avance
Hors ligne
#13 Thu 27 May 2010 21:09
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
hi hi! ca à l'air de fonctionner )
pour info, voici ce que j'ai passé pour remplir mes spatial_ref_sys :
psql toupil < /usr/share/postgresql-8.4/contrib/postgis-1.5/spatial_ref_sys.sql
merci à tous! je suis impressionné de ce qu'il est possible de faire avec postgis !!!
Hors ligne
#14 Thu 27 May 2010 21:41
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
hi hi! ca à l'air de fonctionner )
pour info, voici ce que j'ai passé pour remplir mes spatial_ref_sys :
psql toupil < /usr/share/postgresql-8.4/contrib/postgis-1.5/spatial_ref_sys.sql
merci à tous! je suis impressionné de ce qu'il est possible de faire avec postgis !!!
Cool !
Oui, installer postgis sur une base de données postgresql, ca veut dire principalement lancer deux fichiers: postgis.sql et spatial_ref_sys.sql: Le manuel en francais est disponible ici: http://www.postgis.fr/node/496
Postgis est vraiment un outil extremement puissant pour le stockage et la manipulation d'objets geographiques.
Nicolas
Hors ligne
#15 Thu 27 May 2010 21:45
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
hi hi! ca à l'air de fonctionner )
pour info, voici ce que j'ai passé pour remplir mes spatial_ref_sys :
psql toupil < /usr/share/postgresql-8.4/contrib/postgis-1.5/spatial_ref_sys.sql
merci à tous! je suis impressionné de ce qu'il est possible de faire avec postgis !!!
Hmm... /contrib/postgis-1.5/spatial_ref_sys.sql ?
Vous avez postgis 1.5 alors, finalement ? ou plusieurs installations ?. Si c'est le cas, il faut mieux installer les bons fichiers SQL sur la version de postgis courante.
Si vous avez 1.5, le nouveau type geography est a essayer, dans votre cas
Nico
Hors ligne
#16 Thu 27 May 2010 22:30
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
merci de vos réponses
j'ai en effet la 1.5 (j'ai tellement galéré pour installer postgis sur gentoo que je ne me rappelle même plus quelle version est installé...).
j'essayerai geography pour une prochaine utilisation.
encore merci
Hors ligne
#17 Mon 08 February 2021 11:42
- cg
- Juste Inscrit !
- Date d'inscription: 8 Feb 2021
- Messages: 2
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
Petite question sur ce vieux post, en lien avec l'utilisation de la fonction st_area dans QGIS.
Après pas mal de recherches, l'utilisation de la fonction st_area, y compris avec l'outil transform, me renvoie toujours la même chose que l'utilisation de l'outil area($geometry) et donc, si j'ai bien compris, la surface "géométrique", sans prise en compte du système de projection et de l'ellipsoïde que je souhaiterais utiliser... ce qui me pose un souci de cohérence avec des surfaces calculées "en dur" en utilisant l'outil $area dans la table attributaire.
Un peu de contexte est sans doute nécessaire !
Jusque là, notre équipe calculait des surfaces "en dur" dans la table attributaire via la fonction $area, sur des entités contenues dans des couches projetées en Lambert 93/EPSG 2154, dans des projets paramétrés dans leurs propriétés pour calculer les surfaces en utilisant l'ellipsoïde GRS 80 (EPSG 7019) avec des m² comme unité.
Je cherche à calculer de manière dynamique ces surfaces grâce à une couche virtuelle.
J'ai essayé différentes syntaxes :
select st_area(COUCHE.geometry) as surf_sig from COUCHE
> Cela me retourne la même surface que l'outil area($geometry) en dur, assez logiquement si j'ai bien compris, la fonction renvoyant aux entités géométriques (et géographiques ?)
select st_area(COUCHE.geometry, true) as surf_sig from COUCHE
> Cela ne me retourne rien dans ma couche virtuelle
select st_area(st_transform(COUCHE.geometry, 2154)) as surf_sig_2154 from COUCHE
> Cela ne me retourne rien dans ma couche virtuelle
J'ai sans doute un problème de syntaxe et/ou de référence au système de référence spatiales mais que je n'arrive pas à identifier.
En vous remerciant pour votre aide ... Claire
Hors ligne
#18 Tue 09 February 2021 17:52
- Theos2000
- Participant assidu
- Date d'inscription: 15 Jun 2015
- Messages: 221
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
Je me greffe a ce sujet pour faire remonter un problème de calcul en apparence simple. J'ai un polygone en 4326 que j'arrive a reprojeter avec Qgis en 2154 pour calculer sa surface. Cependant je n'arrive pas a la même surface dans postgis avec un st_area. Pourtant le système de projection est le même (2154) mais avec des résultats différents...
Hors ligne
#19 Tue 09 February 2021 23:32
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
Peut-être que cela est à mettre en rapport avec la différence entre '$area' et 'area' ?
Cf. ici, je cite :
14.3.13.2. $area
Renvoie la surface de l’entité courante. La surface calculée par cette fonction respecte à la fois le paramétrage de l’ellipsoïde du projet et les unités de distance. Par exemple, si un ellipsoïde a été paramétré pour le projet alors la surface sera ellipsoïdale, sinon, elle sera calculée selon un plan.
14.3.13.3. area
Renvoie la surface d’une géométrie polygonale. Les calculs sont toujours planimétriques dans le Système de Coordonnées de Référence (SCR) de la géométrie et les unités de la surface correspondent aux unités du SCR. Cette fonction est différente des calculs effectués par la fonction $area qui réalise des calculs ellipsoïdaux en se basant sur les paramètres d’ellipsoïde du projet et des unités de surface.
Hors ligne
#20 Wed 10 February 2021 13:58
- cg
- Juste Inscrit !
- Date d'inscription: 8 Feb 2021
- Messages: 2
Re: différence entre getArea de GPolygon et ST_Area de postgis ?
Bonjour,
C'est tout à fait cela ! Et je cherche bien à reproduire les calculs de la fonction $area dans ma couche virtuelle/en sql, sans succès pour l'instant...
Dernière modification par cg (Wed 10 February 2021 13:58)
Hors ligne
Pages: 1
- Sujet précédent - différence entre getArea de GPolygon et ST_Area de postgis ? - Sujet suivant