回答:
St_Length()は、空間参照系の単位で長さを返します。メートルを取得する場合は、フィーチャをメートルを単位として使用する別のSRSに変換する必要があります。これはオンザフライで実行できるため、別のデータセットを書き出すことを心配しないでください。
SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;
この例では、SRID 26915はUTM Zone 15 N、NAD83です。
PostGIS 2.0(以前の場合もある)以降ST_Length
、ジオメトリを地理に再キャストすることでこれを行うこともできます。
ST_Length(geom::geography)
たとえば、北緯50度、東経12度から東経51度、東経13度の間の距離:
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
与える
deg | km_1 | km_2
-----------------+------------------+------------------
1.4142135623731 | 131.935962780384 | 131.935962780384
SQLリクエストの例:ポストラインの複数のテーブルのポリラインジオメトリの長さを計算する方法
SQLリクエスト(km単位の長さ(/ 1000-メートル単位で削除)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";