Java + GoogleMaps: Como fechar um poligono com pontos não-ordenados

6 respostas
fabim

Um de meus sistemas gera o seguinte no google maps:

o problema é o seguinte: Nem sempre as coberturas estão classificadas nessa ordem. E para que eu consiga fechar o poligono corretamente, precisa
ser ordenado… no Banco de Dados, pode ser que esteja 3-1-4-2-6-5… E entao o poligono fica todo cagado…

Eu percebi que posso ordenar de acordo com o ângulo… partindo de qqer ponto, posso fazer a ordem certa buscando sempre o proximo ponto
que tem o menor ângulo em relação ao anterior… mas nao conheço a fórmula matemática que pode ser aplicado aqui.

alguem pode me ajudar?

6 Respostas

CintiaDR

Creio que vc quer o algoritmo do fecho convexo, isso?

Tenta aí o google por [google]fecho convexo[/google], em inglês é Convex Hull.

Quer dizer, resolve só as partes convexas, daí teria que calcular o polígono para os demais pontos que não são limites.
Eu me lembro vagamente de isso sem simples…

fabim

bom… deve ser algo parecido com isso…

no meu caso nao há pontos internos, a nao ser o ponto central.

e os pontos estao em coordenadas de latitude e longitude… sendo que o centro do eixo cartesiano é o ponto central… partindo dai era so começar por qer ponto e ir achando os menores ângulos subsequentes…

sei lá

CintiaDR

Olha só, me passaram um mini material do nosso professor de geometria computacional:

http://www.inf.ufpr.br/andre/geom/geom.html

Numa dessas, algum dos algoritmos pode te ajudar…

fsquadro

Fábio,

Da onde saiu esse polígono? De um shapefile? Ou alguém digitou as coordenadas e ele foi plotado no mapa?

Bom, caso ele alguem tenha digitado as coordenadas, você deverá fazer uma validação, pois um polígono deve ter pelo menos 4 pares de coordenadas e a primeira sempre deve ser igual a última.

Dependendo do que você está utilizando como banco de dados, eu sugiro a você utilizar o suporte espacial do banco. Caso seja o PostgreSQL, você pode utilizar o PostGIS, e no Oracle o Oracle Spatial, ou Oracle Locator.

Espero ter ajudado.

fabim

O polígono é originado a partir de uma consulta feita no banco de dados, que retorna os pontos de “cobertura” da torre (o ponto central)
que o usuario cadastrou no banco. Na verdade, no sistema ele só associa aquela torre às coberturas, pois ja existe o cadastro das localidades
com sua devidas coordenadas.

Então eu vo plotando as linhas no maps e no final traço o polígono em volta. Mas o problema tava no fato de que elas podem vir em qqer ordem,
ai o poligono ficava todo cagado, em forma de estrela por exemplo.

Resolvi com a função Math.atan2 do javascript. Depois fiz um bubblesort no array e pronto =D

J

Eu tô com esse mesmo problema…
Consegui calcular o fecho/envelope convexo de uma nuvem de pontos, o que me dá os pontos limites dessa nuvem…Só que não sei odená-los, de modo que eu consiga plotar o contorno do polígono…Esse problema me parecia um tanto trivial até eu ter que resolvê-lo…

Criado 14 de novembro de 2007
Ultima resposta 21 de mar. de 2009
Respostas 6
Participantes 4