Eu tenho um conjunto de coordenadas em lon / lat. Sempre há pelo menos três coordenadas ordenadas que formam um poli (se elas foram projetadas planas). Como posso calcular os limites mínimos para essas coordenadas como um conjunto de intervalos válidos de longitude e latitude? (por 'válido', quero dizer intervalos que explicitamente explicam o antimeridiano). É meio difícil de explicar o que estou procurando, então eu tenho uma foto.
O caso na foto é trivial; você apenas encontra o mínimo e o máximo absolutos para todos os pontos. Isso não funciona para todos os casos. Existe uma solução genérica?
Editar: para esclarecer o que quero dizer com 'válido', diga que eu tinha três valores de longitude no meu conjunto de dados: -76, -135 e 164. Os valores cruzam o antimeridiano e eu gostaria que os intervalos resultantes fossem divididos: -76 para -180 E 164 para 180.
Mais alguns esclarecimentos. Os pontos formam um polígono; portanto, em certos casos, o intervalo necessário pode ser de -180 a +180 (ou seja, os 360 graus completos):
A imagem à esquerda mostra a longitude de quatro coordenadas que ocorrem em uma 'metade' da Terra. Imagine como se estivesse olhando para o pólo norte (ponto preto). O rosa mostra o intervalo longitudinal mínimo que abrange o polígono (o polígono é mostrado entre os quatro pontos em roxo). O caso à esquerda teria duas faixas longitudinais: [-180 a -120] e [135 a 180] (apenas para estimar visualmente)
A imagem à direita mostra outro caso em que os pontos percorrem toda a Terra. Esse intervalo seria [-180 a 180].
fonte
Respostas:
Espero que eu entenda a pergunta corretamente ...
Podemos resolver o problema da longitude e latitude separadamente, portanto, darei o seu exemplo com as longitudes: -76, -135 e 164.
Primeiro eu pediria:
Então eu adicionaria a coordenada mais à esquerda novamente à direita: -135 + 360 = 225
Agora podemos calcular as lacunas entre as coordenadas:
O maior espaço (240) deve ser o limite da caixa delimitadora mínima, a parte que não pertence à caixa. A linha pontilhada é a maior parte do círculo que podemos gastar. No nosso exemplo, isso significa que a caixa de limite começa com 164, inclui -135 e termina com -76.
fonte
Isso é realmente fácil de fazer em Javascript com a API do Google Maps. Aqui está como você faria isso no lado do cliente com essa API:
fonte
Eu acho que posso ter encontrado uma maneira de fazer isso. Minha implementação preliminar funciona, mas não tenho certeza se existem casos extremos que eu perdi. Se houver algo errado com esta solução, indique-o.
Como estou preocupado em obter os intervalos long / lat do polígono, e não apenas os pontos que o compõem, uma maneira de tentar o problema é realmente 'caminhar' ao longo do conjunto de coordenadas ordenadas do início ao fim. Você acompanha o quão longe no sentido horário e anti-horário você viajou em relação ao centro da Terra, dado um ponto de partida e continua até concluir o polígono:
Você pode obter uma faixa de quão longe o CW e o CCW você viaja a partir do ponto de partida ... isso fornece informações suficientes para derivar limites corretos no caso normal (deixado na imagem). No caso em que o polígono gira totalmente ou corta o centro, o ângulo de deslocamento retornado será de 360 graus.
Esse método também funciona quando você tem o polígono 'abraçando' a superfície da Terra em vez de atravessá-la. Portanto, se você tiver um polígono mostrando alguém viajando pela superfície da Terra de Toronto (long: -79) a Londres (long: -5) a Tóquio (long: 139) e vice-versa (na mesma ordem), você obtenha o intervalo [-79 a 139].
Se o polígono corta o centro (imagine dois pontos adjacentes em +90 e -90), considero que isso é uma varredura completa (360 graus), embora você possa ir de qualquer maneira.
fonte