Como obter distância e rumo entre um ponto e a parte mais próxima de um polígono?


9

Eu sou bastante novo em escrever SQL e usar o PostGIS, então peço desculpas se isso parecer um pouco simples ou óbvio. Eu tenho uma tabela de recursos de polígono mantida em um banco de dados postGIS e preciso escrever uma consulta SQL para selecionar todos os atributos, a distância e a direção dos recursos de polígono a uma certa distância de um ponto predefinido. Consegui selecionar os recursos e calcular a distância (usando ST_Distance), mas não consigo descobrir como obter o rolamento.

Este é o script que estou usando até agora:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

Como faço para determinar o rumo dos recursos e a distância?

Respostas:


4

Você pode usar ST_Azimuth para calcular o rolamento, mas são necessárias apenas geometrias de pontos como parâmetros, para decidir qual rolamento você realmente deseja.

Você pode escolher a linha mais curta, como o @Nicklas sugeriu (é a distância que você já calculou), o que faz sentido se você precisar da "direção" mais rápida para alcançar o polígono. Para qualquer outra coisa, sugiro que você o calcule no centróide poligonal (ST_Centroid), que deve fornecer melhores resultados para formas arbitrárias.


2

Usar

ST_Azimuth (ST_Shortestline (geom1, geom2))

editar

Acabei de perceber que ST_Azimuth não aceita uma cadeia de linhas como argumetn, portanto, você precisará dar dois pontos a ela.

Se uma das geometrias for um ponto, você poderá usá-lo diretamente e usar ST_ClosestPoint para obter o ponto no polígono.


1

ST_Azimuth é a função que você deseja. Retorna o ângulo em radianos no sentido horário a partir do norte. Como mostra o exemplo na ST_Azimuth()página, basta agrupá-lo na degrees()função para obter o ângulo em graus, se for o que você precisa.

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.