Dans PostGIS, la ST_length()
fonction renvoie la longueur d'une chaîne de lignes dans certaines unités, mais pas en mètres.
Y a-t-il une fonction comme ST_Length()
mais en mètres?
Dans PostGIS, la ST_length()
fonction renvoie la longueur d'une chaîne de lignes dans certaines unités, mais pas en mètres.
Y a-t-il une fonction comme ST_Length()
mais en mètres?
Réponses:
St_Length () renvoie la longueur dans les unités de son système de référence spatiale. Si vous souhaitez obtenir des compteurs, vous devrez transformer votre fonction en un SRS différent qui utilise les compteurs comme unités. Cela peut être fait à la volée, alors ne vous inquiétez pas d'écrire un autre ensemble de données.
SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;
Dans cet exemple, SRID 26915 est UTM Zone 15 N, NAD83.
Il semble que depuis PostGIS 2.0 (peut-être avant), vous pouvez également le faire ST_Length
en refondant la géométrie à la géographie:
ST_Length(geom::geography)
Par exemple, la distance entre 50 ° N, 12 ° E et 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
qui donne
deg | km_1 | km_2
-----------------+------------------+------------------
1.4142135623731 | 131.935962780384 | 131.935962780384
Exemples de requête SQL: comment calculer la longueur d'une polyligne-géométrie-pour-plusieurs-tables-en-postgis
Requête SQL (longueur en km (/ 1000 - supprimer pour les mètres)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";