Geometrielänge in Metern ermitteln?

13

In PostGIS gibt die ST_length()Funktion die Länge einer Linienfolge in einigen Einheiten zurück, jedoch nicht in Metern.

Gibt es eine Funktion wie ST_Length()aber in Metern?

José Alejandro
quelle

Antworten:

11

St_Length () gibt die Länge in Einheiten seines Raumbezugssystems zurück. Wenn Sie Zähler erhalten möchten, müssen Sie Ihre Funktion in einen anderen SRS umwandeln, der Zähler als Einheiten verwendet. Dies kann im laufenden Betrieb erfolgen. Machen Sie sich also keine Sorgen, wenn Sie einen anderen Datensatz ausschreiben.

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

In diesem Beispiel lautet die SRID 26915 UTM Zone 15 N, NAD83.

DavidF
quelle
Oder fügen Sie einfach Ihr eigenes Feld hinzu und verwalten Sie die Berechnung selbst. HINWEIS Sie müssen Ihren eigenen Trigger schreiben oder ihn bei Längenänderungen neu berechnen.
Brad Nesom
18

Es sieht so aus, als ob Sie dies seit PostGIS 2.0 (vielleicht schon früher) auch einfach tun können, ST_Lengthindem Sie die Geometrie in Geographie umwandeln:

ST_Length(geom::geography)

Zum Beispiel der Abstand zwischen 50 ° N, 12 ° E und 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

was gibt

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384
andybega
quelle
0

Verwenden Sie die folgende Formel:

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