ジオメトリの長さをメートル単位で取得しますか?


13

PostGISでは、ST_length()関数はメートル単位ではなく、いくつかの単位でラインストリングの長さを返します。

ST_Length()メートル単位のような機能はありますか?

回答:


11

St_Length()は、空間参照系の単位で長さを返します。メートルを取得する場合は、フィーチャをメートルを単位として使用する別のSRSに変換する必要があります。これはオンザフライで実行できるため、別のデータセットを書き出すことを心配しないでください。

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

この例では、SRID 26915はUTM Zone 15 N、NAD83です。


または、独自のフィールドを追加して、計算を自分で管理します。注:独自のトリガーを作成するか、長さの変更時に再計算する必要があります。
ブラッドネソム

18

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


0

次の式を使用します。

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.