# How can I get the geometry length in meters?

The ST_length() function returns the length of a linestring but not in meters.

Is there a function like ST_Length() but in meters?.

-

## 3 Answers

St_Length() returns the length in the units of its Spatial Reference System. If you want to get meters, you will need to transform your feature to a different SRS that uses meters as units. This can be done on-the-fly, so don't worry about writing out another data set.

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

In this example, SRID 26915 is UTM Zone 15 N, NAD83.

-
Or simply add your own field and manage the calculation yourself. NOTE you have to write your own trigger or recalculate it on changes in your lengths. – Brad Nesom Oct 11 '12 at 4:12

Examples of SQL request: how-to-calculate-length-of-polyline-geometry-for-several-tables-in-postgis

SQL request (length in km (/1000 -delete for meters)):

``````SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";
``````
-

It looks like since PostGIS 2.0 (maybe before) you can also just do this with `ST_Length` by recasting the geometry to geography:

`ST_Length(geom::geography)`

For example, the distance between 50°N, 12°E and 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
``````

which gives

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