Estou trabalhando com o Google Maps e polígonos, mas tenho que validar que os polígonos não se sobrepõem.
Eu tenho uma função que retorna TRUE quando um ponto (lat, lng) está dentro de um polígono, mas não é suficiente para determinar se todos os pontos de um polígono estão dentro de outro polígono.
Alguma sugestão?
google-maps
overlapping-features
Marcelo Magarzo
fonte
fonte
Respostas:
Exemplo JSFiddle
Criei um JSFiddle demonstrando uma solução para o seu problema usando a biblioteca JSTS (JavaScript Topology Suite) (JSTS).
Explicação
Existem duas etapas para essa abordagem. A primeira etapa converte suas geometrias do Google em expressões de geometria WellKnownText (WKT) , que é um formato amplamente suportado. A segunda etapa usa o JSTS para executar uma
geometry.intersects()
comparação JSTS de duas geometrias WKT.Para realmente entender isso, você precisará ter um entendimento básico do WKT. Como as geometrias de polígonos no seu mapa do Google não são amplamente suportadas, eu as converto imediatamente em geometrias WKT para que possamos trabalhar com elas no JSTS.
Para fazer isso facilmente, usei a biblioteca Wicket . É claro que você sempre pode usar o seu próprio método do Google-Polígono para WKT, ou pode usar um que escrevi uma vez , ou pode usar outra solução que possa encontrar. Pessoalmente, hoje em dia eu apenas uso o Wicket, que, como você pode ver, é muito simples:
A seguir, a carne e as batatas - usando o JSTS para pegar duas geometrias WKT e testar se elas se cruzam ou não. Mais uma vez, contando com a biblioteca, não há muito o que fazer:
Como eu vinculei as bibliotecas no Fiddle
O violão vinculado acima e a solução que demonstrei exigem a adição de duas bibliotecas de terceiros ao seu projeto - JSTS e Wicket. Obter o código de seus respectivos Githubs e incorporá-lo ao seu projeto é um exercício diferente. Mas para o violino, vinculei a essas bibliotecas fazendo referência a elas em um exemplo JSTS existente que encontrei postado por Christopher Manning , bem como na página de demonstração do próprio Wicket . Basicamente, abri as páginas, selecionei "View Source" e retirei referências relevantes para as duas bibliotecas. Estes foram os pontos de extremidade exatos da biblioteca que usei:
fonte