Ottenere la lunghezza della geometria in metri?


13

In PostGIS, la ST_length()funzione restituisce la lunghezza di un linestring in alcune unità, ma non in metri.

Esiste una funzione simile ST_Length()ma in metri?

Risposte:


11

St_Length () restituisce la lunghezza in unità del suo sistema di riferimento spaziale. Se vuoi ottenere contatori, dovrai trasformare la tua funzione in un SRS diverso che utilizza i contatori come unità. Questo può essere fatto al volo, quindi non preoccuparti di scrivere un altro set di dati.

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

In questo esempio, SRID 26915 è UTM Zone 15 N, NAD83.


O semplicemente aggiungi il tuo campo e gestisci tu stesso il calcolo. NOTA devi scrivere il tuo trigger o ricalcolarlo sulle modifiche delle tue lunghezze.
Brad Nesom,

18

Sembra che da PostGIS 2.0 (forse prima) sia possibile farlo semplicemente ST_Lengthrifondendo la geometria in geografia:

ST_Length(geom::geography)

Ad esempio, la distanza tra 50 ° N, 12 ° E e 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

che dà

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384


0

Usa la seguente formula:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.