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?

José Alejandro
la source

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.

DavidF
la source
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
andybega
la source
0

Utilisez la formule suivante:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Loni
la source