Comment obtenir la valeur du compteur de distance entre deux géométries dans PostGIS?

14

J'ai une question simple sur le calcul des distances dans PostGIS.

Je voudrais obtenir la distance entre deux géométries. J'utilise ce Sid: 4269 en mètres ce que je fais maintenant est ceci: ST_Distance((a.geom,b.geom)) FROM ...mais j'obtiens un résultat en degrés. Je pense que je devrais travailler avec la géographie, mais comment puis-je convertir un géom en géographie? J'ai essayé avec (a.geom :: geography) mais je reçois une erreur.

Que puis-je faire pour obtenir mon résultat en mètres?

Merci

YassineGeoma
la source

Réponses:

20

avec ST_Distance_Sphere vous pouvez y arriver:

ST_Distance_Sphere(a.geom,b.geom)
Francisco Valdez
la source
ERREUR: la fonction st_distance_spheroid (geometry, geometry) n'existe pas ... je viens d'ajouter (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') et maintenant ça marche bien merci vous beaucoup!
YassineGeoma
1
eh bien, vous avez utilisé une fonction différente, st_distance_spheroid qui est plus lente que st_distance_sphere mais plus précise.
Francisco Valdez
Qu'en est-il de la distance maximale entre 2 géométries?
vasilakisfil
La distance maximale serait earth_radius - minimum_distance, qui se déplacerait dans le sens inverse. (cap + 180º)
Francisco Valdez
1
@ don-prog Cela fonctionne pour les points 3D et 2D:SELECT ST_Distance_Sphere(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'), ST_GeomFromEWKT('SRID=4326;POINT(-72.1260 42.45 15)'))
Francisco Valdez
3

Les unités du SRID 4269 ( NAD 83 ) ne sont pas des mètres - il s'agit d'une projection géodésique , c'est-à-dire que les coordonnées sont des degrés (coordonnées géographiques).

La réponse de pacofvf vous donnera la distance en mètres, mais si vous aviez vraiment vos coordonnées initiales spécifiées en mètres, alors vous devriez utiliser un système de coordonnées projeté. Probablement pour l'Amérique du Nord, vous voulez quelque chose comme le système de coordonnées State Plane qui a un certain nombre de projections différentes selon la région que vous souhaitez cartographier.

Je soupçonne cependant que vous n'utilisez que des valeurs lat / lon, donc ce deuxième paragraphe n'est probablement pas pertinent - utilisez simplement la ST_Distance_Spherefonction comme ci-dessus.

Stev_k
la source