[Google Maps] Tem como conseguir uma matriz de coordenadas a partir de um LatLngBounds?

31 views
Skip to first unread message

Paulo R. Kraemer

unread,
Sep 1, 2015, 7:25:58 PM9/1/15
to Android Brasil - Dev
Olá pessoal, tem como eu conseguir uma matriz de coordenadas a partir de dois pontos de um LatLngBounds?

Eu sei, a pergunta não está muito clara... vou tentar explicar melhor...

Eu estou posicionando uma imagem de 500x500px em um mapa com GroundOverlayOptions (que recebe as coordenadas de posicionamento de um LatLngBounds)... mas eu precisava fazer uma análise nessa imagem (que muda constantemente) e determinar alguns pontos... mas para marcar a distância do GPS do celular até esse ponto eu precisaria ter (creio eu) a matriz de coordenadas correspondente a matriz de pixels da imagem... para poder determinar a posição geográfica de um determinado pixel...

tem como fazer isso? qual a melhor forma? Tem alguma outra forma de fazer isso (determinar as posição geográfica de um ponto numa camada inserida num mapa)?

agradeço a atenção

Rodrigo Piovezan

unread,
Sep 1, 2015, 8:08:06 PM9/1/15
to androidb...@googlegroups.com
Você sabe trabalhar com proporções? Você tem um retângulo no mapa (definido pelos dois vértices do LatLngBounds) e sabe que ele é proporcional a um retângulo de 500x500 pixels. Basta fazer a proporção.

Fiz aqui às pressas, não sei se está certo:

Vértices do LatLngBounds: nordeste (LatNE, LongNE), sudoeste (LatSW, LongSW), noroeste (LatNE, LongSW) e sudeste (LatSW, LongNE).

O comprimento C do retângulo LatLngBounds é dado por C = LatSW - LatNE e a altura A por A = LongNE - LongSW (não estou considerando os casos-limites dessas coordenadas, já você vai precisar considerar).

Bom, sendo (0, 0) o vértice inferior esquerdo do retângulo 500x500, um ponto (X, Y) dentro dele equivale à coordenada (LatX, LongY) do retângulo LatLngBounds dada por LatX = LatSW + C * (X / 500) e LongY = LongSW + A * (Y / 500).

Espero que dê uma ideia de como fazer.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Message has been deleted

Paulo R. Kraemer

unread,
Sep 1, 2015, 9:35:37 PM9/1/15
to Android Brasil - Dev
Ótimo... muito obrigado pela explanação e ajuda...

É a primeira vez que estou tendo que programar algo assim... to meio perdido...

tenho mais algumas dúvidas:
1) Você disse: "não estou considerando os casos-limites dessas coordenadas, já você vai precisar considerar"... tem como explicar melhor?
2) Você disse: " sendo (0, 0) o vértice inferior esquerdo do retângulo 500x500"... inferior esquerdo? não seria superior esquerdo como nos editores de imagem??

agradeço a atenção desde já

Rodrigo Piovezan

unread,
Sep 2, 2015, 8:12:42 AM9/2/15
to androidb...@googlegroups.com
1) Latitude e longitude nesse caso são medidas em graus. Latitude, por exemplo, é um valor no intervalo [-90, 90]. Isso quer dizer que se você pegar um ponto e fazê-lo se deslocar ao longo da latitude ele vai completar uma circunferência em volta da Terra, mas mesmo sendo isso um deslocamento contínuo vai ocorrer um "salto" no valor da latitude de -90 para 90 graus, é isso que chamo de caso-limite. Se esse "salto" não for considerado em uma conta envolvendo latitudes, essa conta pode quebrar. Você tem que prever isso e elaborar um cálculo que não seja quebrado no caso-limite.

2) Para ficar compatível com o retângulo LatLngBounds, que tem um vértice inferior esquerdo (southwest), eu fiz os cálculos considerando um vértice inferior esquerdo no retângulo 500x500. Se os seus pontos são baseados em uma orientação diferente, é só fazer um cálculo que obtenha o Y correspondente na orientação que usei, que é basicamente Yinfesq = 500 - Ysupesq.

2015-09-01 22:33 GMT-03:00 paulork <paul...@gmail.com>:
Ótimo... muito obrigado pela explanação e ajuda...

tenho mais algumas dúvidas:
1) Você disse: "não estou considerando os casos-limites dessas coordenadas, já você vai precisar considerar"... tem como explicar melhor?
2) Você disse: " sendo (0, 0) o vértice inferior esquerdo do retângulo 500x500"... inferior esquerdo? não seria superior esquerdo como nos editores de imagem??

agradeço a atenção desde já

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/CuzxspUgmHw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Paulo RK

unread,
Sep 3, 2015, 9:13:37 PM9/3/15
to Android Brasil - Dev
1) Acho que esse problema não irei ter então, pois a minha análise será fechada em um ponto (quadrado) específico do globo, não variando além dos limites...

2) Aqui independente dos valores de LatX e LongY ele sempre posiciona o ponto no mesmo lugar...

Paulo RK

unread,
Sep 28, 2015, 8:26:48 PM9/28/15
to Android Brasil - Dev
Olá Rodrigo... não estou conseguindo ajustar meu calculo... tentei de varias formas já... parece estar quase OK, mas ainda não está exatamente onde espero...

usei o que vc falou primeiramente:

COMPRIMENTO C = LatSW - LatNE
ALTURA      A = LngNE - LngSW

LatX = LatSW + C * (X / 500)
LngY = LngSW + A * (Y / 500)

o que colocou minha áreas de interesse muito longe do desejado...
mas aí como lhe falei, a imagem (de 500x500) é lida do ponto "0,0" (que é o canto superior esquerdo) para o ponto "500,500" (que é o inferior direito)...
já o posicionamento da imagem no mapa (por LatLngBounds) é feita da posição SW (inferior esquerda) para a NE (superior direita)... até aí OK... corrigi o Y fazendo "500-Y"... mas ainda nada... a orientação parece estar correta, mas está um pouco mais para a direita e para baixo de quem olha para o mapa...

não sei se isso pode ser causado pela multiplicação e divisão de números de ponto flutuante que estão gerando dizimas, ou o que...

OBS: Não teria que dar o mesmo valor de A e C já que é um quadrado?

tem como me ajudar?

Agradeço desde já...

Rodrigo Piovezan

unread,
Sep 29, 2015, 6:43:18 PM9/29/15
to androidb...@googlegroups.com
Oi Paulo,

Essa sugestão que eu te passei é uma tentativa... na verdade a única que me ocorreu de sugerir, e é algo que nunca cheguei a testar na prática. Na teoria ela tem tudo para dar certo, o problema é que é só na teoria...

Esse problema da imagem estar um pouco para baixo e para a direita pode ser a âncora da imagem que você não setou no seu GroundOverlayOptions. Experimente construi-lo chamando anchor(0.5, 0.5) e veja o que acontece. Se não der certo tente outros valores, lembrando que esses valores devem ser entre 0.0 e 1.0 conforme a documentação do GroundOverlayOptions.

Também pode ser que o problema seja devido às operações envolvendo ponto flutuante, nesse caso usar BigDecimal nos cálculos. Mas tente primeiro resolver setando a âncora.

Sobre o valor de A e C serem iguais, não sei se entendi sua pergunta. Você quem me diz se são iguais, eles são definidos pelas coordenadas que só você sabe. :) Nas fórmulas eu chamei essas coordenadas de (LatSW, LngSW) e (LatNE, LngNE).





--

paulork

unread,
Sep 29, 2015, 7:40:30 PM9/29/15
to androidb...@googlegroups.com
Oi Rodrigo, obrigado pelas respostas... essa questão da ancora realmente não sabia... vou tentar aqui...

As operações já estou convertendo para BigDecimal...

Quanto ao Comprimento e a Altura, creio que ambas deverias ser iguais e não são... vou ter que ver o por que disso... os posicionamentos da imagem (LatLngBounds) estou pegando de um webservice, que não é meu e que está sendo usado em produção, imagino que deveria estar correto, mas vai saber...

muito obrigado Rodrigo, vou tentar a questão da ancora e demais coisas... qualquer coisa volto a perguntar, ou postar a solução... até mais

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/CuzxspUgmHw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages