Java + GoogleMaps: Como fechar um poligono com pontos não-ordenados  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

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?

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
CintiaDR
JavaEvangelist
[Avatar]

Membro desde: 01/10/2007 06:49:30
Mensagens: 476
Localização: Curitiba - PR
Offline

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

Tenta aí o google por fecho convexo, 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.....

This message was edited 3 times. Last update was at 14/11/2007 16:55:20


Faça Perguntas Inteligentes - NÃO me pergunte como

PelaMorDeQualquerCoisa, o GUJ não é penico! Google é seu amigo!
[MSN] [ICQ]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

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á

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
CintiaDR
JavaEvangelist
[Avatar]

Membro desde: 01/10/2007 06:49:30
Mensagens: 476
Localização: Curitiba - PR
Offline

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....

Faça Perguntas Inteligentes - NÃO me pergunte como

PelaMorDeQualquerCoisa, o GUJ não é penico! Google é seu amigo!
[MSN] [ICQ]
fsquadro
GUJ Master
[Avatar]

Membro desde: 10/07/2006 17:19:04
Mensagens: 1197
Localização: Florianópolis - SC
Offline

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.

"Coisas boas estão dentro de pequenos arquivos .jar"


Fernando Quadro
Blog
twitter
LinkedIn
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

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

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
Jokabeludoido
JavaEvangelist

Membro desde: 23/08/2008 15:34:07
Mensagens: 305
Offline

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...
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team