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?
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:
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.
Sembra che da PostGIS 2.0 (forse prima) sia possibile farlo semplicemente ST_Length
rifondendo 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
Esempi di richiesta SQL: come calcolare la lunghezza della polilinea-geometria-per-diverse-tabelle-in-postgis
Richiesta SQL (lunghezza in km (/ 1000 -elete per metri)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";