Obtenir la longueur de la géométrie en mètres?


13

Dans PostGIS, la ST_length()fonction renvoie la longueur d'une chaîne de lignes dans certaines unités, mais pas en mètres.

Y a-t-il une fonction comme ST_Length()mais en mètres?

Réponses:


11

St_Length () renvoie la longueur dans les unités de son système de référence spatiale. Si vous souhaitez obtenir des compteurs, vous devrez transformer votre fonction en un SRS différent qui utilise les compteurs comme unités. Cela peut être fait à la volée, alors ne vous inquiétez pas d'écrire un autre ensemble de données.

SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;

Dans cet exemple, SRID 26915 est UTM Zone 15 N, NAD83.


Ou ajoutez simplement votre propre champ et gérez le calcul vous-même. REMARQUE, vous devez écrire votre propre déclencheur ou le recalculer en fonction des modifications de vos longueurs.
Brad Nesom

18

Il semble que depuis PostGIS 2.0 (peut-être avant), vous pouvez également le faire ST_Lengthen refondant la géométrie à la géographie:

ST_Length(geom::geography)

Par exemple, la distance entre 50 ° N, 12 ° E et 51 ° N, 13 ° E:

SELECT ST_Length(geom) AS deg,
       ST_Length(geom::geography)/1000 AS km_1,
       ST_Length_Spheroid(geom, 'SPHEROID["WGS 84",6378137,298.257223563]')/1000 as km_2
FROM   ST_GeomFromText('LINESTRING(12 50, 13 51)' , 4326) AS geom

qui donne

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384


0

Utilisez la formule suivante:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.