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?

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.


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


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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.