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

Respostas:


20

com ST_Distance_Sphere, você pode conseguir isso:

ST_Distance_Sphere(a.geom,b.geom)

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.