Pergunta

Eu tenho um ponto (Lat/Lon) e um título em graus (Norte Verdadeiro) para o qual esse ponto está viajando. Eu tenho numerosos polígonos estacionários (pontos definidos em LAT/LON) que podem ou não ser convexos.

Minha pergunta é: como calcular o ponto de interseção mais próximo, se houver, com um polígono. Eu já vi vários posts confusos sobre rastreamento de raios, mas eles parecem todos relacionados a 3D quando o raio e o polígono não estão no mesmo plano e também os polígonos devem ser convexos.

Foi útil?

Solução 4

A resposta nesta página parece ser a mais precisa.

Pergunta 1.e Godeguru

Outras dicas

Parece que você deve ser capaz de fazer um cruzamento simples de linha 2D ...

No entanto, eu já trabalhei com LAT/muito antes e sei que eles não são exatamente fiéis a nenhum sistema de coordenadas 2D.

Eu começaria com uma função geral "ISPointInpolygon", você pode encontrar um milhão deles pesquisando no Google e depois testá -lo em seus poli para ver como ele funciona bem. Se eles forem precisos o suficiente, basta usar isso. Mas é possível que, devido à natureza não quadrada das coordenadas LAT/longas, talvez você precise fazer algumas modificações usando geometria esférica.

Em 2d, os cálculos são bastante simples ...

Você sempre pode começar verificando para garantir que o terminal do raio não esteja dentro do polígono (já que esse é o ponto de interseção nesse caso).

Se o terminal estiver fora da linha, você poderá fazer um cruzamento de segmento de raio/linha com cada um dos recursos de limite do polígono e usar o local mais próximo encontrado. Que lida com recursos convexos/côncavos, etc.

Calcule se o raio cruza cada segmento de linha no polígono usando esta técnica.

O fator de escala resultante na resposta (minha aceita) (que eu liguei h) é "quão longe o raio é a interseção". Você está procurando um valor entre 0 e 1.

Se houver vários pontos de interseção, tudo bem! Se você quiser o "primeiro", use aquele com o menor valor de h.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top