Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

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

share|improve this question
up vote 11 down vote accepted

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.

share|improve this answer
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

It looks like since PostGIS 2.0 (maybe before) you can also just do this with ST_Length by recasting the geometry to 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
share|improve this answer

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)):

sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads 
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.