Quelle est l'unité utilisée dans ST_Distance ()?

24

Je me demande quelle est l'unité du flotteur dont on revient ST_Distance.

Dans la documentation, il est écrit:

... distance minimale cartésienne (basée sur la référence spatiale) entre deux géométries en unités projetées.

Quelles sont ces unités projetées?

La géométrie est stocké dans un champ: geometry(Point,4326).

stUrb
la source

Réponses:

36

Je pense que c'est la question la plus fréquente sur la liste PostGIS au fil du temps :-)

Si vos données sont dans SRID 4326 et que vous utilisez geometrytype, le résultat ne donnera aucun sens. C'est en degrés.

Pour obtenir le résultat en mètres, il suffit de geographytaper et de ST_Distancecalculer la distance le long du grand cercle à la place et de revenir en mètres.

geometry(Point,4326)::geography

Une autre option consiste à projeter vos données sur une projection locale basée sur une unité appropriée. Ensuite, la réponse sera dans cette unité.

Nicklas Avén
la source
2
Voici un exemple pour trouver la distance entre deux lignes dans une table SELECT ST_Distance (a.geom :: geography, b.geom :: geography) FROM pure_gis a, pure_gis b WHERE a.id = '1' AND b.id = «2»;
Brian McCall
4

Depuis http://postgis.net/docs/ST_Distance.html

--Exemple de géométrie - unités en degrés plan 4326 est WGS 84 unité longue lat = degrés

Si ST_Distanceon donne deux géométries, cela suppose que ces géométries sont vraiment en coordonnées cartésiennes (ou planes). Ainsi, les unités sont les mêmes que celles des coordonnées - généralement des mètres ou des pieds.

Votre problème semble être que votre système de référence spatiale, 4326, utilise en fait des coordonnées géographiques (angulaires) - degrés long-lat - donc les résultats sont en degrés (quelque peu dénués de sens).

Martin F
la source
1
Les résultats sont totalement dénués de sens, pas même un peu.
Paul Ramsey
@PaulRamsey. Ne seraient-ils pas les mêmes que ceux que j'obtiendrais pour «mesurer» des distances sur une projection PlateCaree?
Martin F
Sur un PC, vous obtiendrez des unités linéaires et pourriez au moins dire "OK, je sais que ces unités sont sujettes à de graves distorsions". En récupérant les "degrés", les gens pourraient être tentés de penser "aha, j'ai une distance angulaire ici, il suffit de multiplier par 2R et j'aurai une distance linéaire". Les unités font une mauvaise mesure potentiellement encore plus terriblement trompeuse. Et le PC est si terrible que je ne sais pas pourquoi il obtient un nom de projection ... ne préserve pas la distance, ne préserve pas la direction, ne préserve pas la zone ...
Paul Ramsey
Le PC préserve les distances le long de l'équateur et perpendiculairement à l'équateur. Mis à part les radians et les conversions de rayon requis (certes, un inconvénient très important), les résultats de l'utilisation de ST_Distance sur 4326 géométries auront le même mélange général d'inconvénients et d'avantages qui doivent être pris en compte lors de l'utilisation de ST_Distance avec des géométries de projection. Peut-être que le meilleur débat devrait être (pas "quelque peu" contre "totalement" vide de sens mais) "Est-ce que ST_Distance et ST_Area devraient même être autorisés à renvoyer des résultats étant donné 4326 géométries?"
Martin F