Como obtenho o valor do medidor de distância entre duas geometrias no PostGIS?

14

Eu tenho uma pergunta simples sobre o cálculo de distâncias no PostGIS.

Gostaria de obter a distância entre duas geometrias. Estou usando este sid: 4269 em metros, o que estou fazendo agora é o seguinte: ST_Distance((a.geom,b.geom)) FROM ...mas estou obtendo resultado em graus. Eu acho que devo trabalhar com geografia, mas como posso converter um geom em uma geografia? Eu tentei com (a.geom :: geography), mas estou recebendo um erro.

O que posso fazer para obter meu resultado em metros?

Obrigado

YassineGeoma
fonte

Respostas:

20

com ST_Distance_Sphere, você pode conseguir isso:

ST_Distance_Sphere(a.geom,b.geom)
Francisco Valdez
fonte
ERREUR: a função st_distance_spheroid (geometry, geometry) não existe mais ... acabei de adicionar (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') e agora está funcionando bem, obrigado você muito!
YassineGeoma
1
bem, você usou uma função diferente, st_distance_spheroid, que é mais lenta que st_distance_sphere, mas mais precisa.
Francisco Valdez
E a distância máxima entre duas geometrias?
Vasilakisfil 11/06
A distância máxima seria earth_radius - minimum_distance, que estaria viajando na direção oposta. (cabeçalho + 180º)
Francisco Valdez
1
@ don-prog Funciona para pontos 3D e 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

As unidades do SRID 4269 ( NAD 83 ) não são metros - esta é uma projeção geodésica , ou seja, as coordenadas são graus (coordenadas geográficas).

A resposta da pacofvf fornecerá a distância em metros, mas se você realmente tiver suas coordenadas iniciais especificadas em metros, deverá usar um sistema de coordenadas projetado. Provavelmente, na América do Norte, você deseja algo como o Sistema de Coordenadas do Plano Estadual, que possui várias projeções diferentes, dependendo da região que deseja mapear.

Eu suspeito, no entanto, que você esteja apenas usando valores lat / lon, portanto, provavelmente este segundo parágrafo não é relevante - basta usar a ST_Distance_Spherefunção como acima.

Stev_k
fonte