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?
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:
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.
Es sieht so aus, als ob Sie dies seit PostGIS 2.0 (vielleicht schon früher) auch einfach tun können, ST_Length
indem 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
Beispiele für SQL-Anforderungen: Berechnen der Länge der Polyliniengeometrie für mehrere Tabellen in Postgis
SQL-Anfrage (Länge in km (/ 1000 -Delete für Meter)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";