Академический Документы
Профессиональный Документы
Культура Документы
Iniciaremos o Delphi XE5 e criaremos um Novo Projeto Móvel através do menu File–> New Project –> Delphi Projects –> Mobile
Projects. Adotaremos o modelo de aplicação em branco (Blank Application).
Feito isso salvaremos nosso projeto através do menu File –> Save All. Chamaremos a Unit de frmLocalizacaoUnt e o projeto chamaremos
de prjLocalizeMe.
Agora vamos inserir em nossa aplicação os componentes que farão com que ela fique funcional. Vamos adicionar 2 Label‟s, 1 WebBrowser,
1 ToolBar, 1 Switch e um LocationSensor. Então teremos
ToolBar1
o Align –> alTop
Label1
o Text –> Localização
Label2
o Align –> alBotton
o Text –> www.landersongomes.vivaitaocara.com.br
WebBrowser1
o Align –> alClient
LocationSensor1
o Distance –> 50
Ao final do processo acima nossa tela de design ficará semelhante à figura abaixo.
Ativando e desativando o sensor
O objeto Switch1, não alteramos nenhuma de suas propriedades… mas será ele o nosso “interruptor” para ligar e desligar o Sensor de
Localização LocationSensor1. Para o Switch1 vamos codificar seu evento OnSwitch, que seria o seu ativar/desativar propriamente dito, esse
é o código:
1
procedure TForm1.Switch1Switch(Sender: TObject);
2
begin
3LocationSensor1.Active := Switch1.IsChecked;
5 begin
6 Label2.Text := 'landersongomes.vivaitaocara.com.br';
WebBrowser1.Navigate(Label2.Text);
7
end;
8
end;
9
Note que atribuímos ao Sensor de Localização (LocationSensor1) atividade ou não de acordo com a ativação ou não do Switch, assim sendo,
ativado o Switch ativamos consequentemente o Sensor. Em seguida, apenas por estética, verificamos se o sensor está inativo, caso esteja,
passamos o endereço do meu blog para a propriedade Text do Label2 e em seguida, passamos ela como URL para o WebBrowser1 Navegar.
Então se o sensor estiver desativado, o WebBrowser1 abrirá meu blog.
Ajuda do GoogleMaps
Já configuramos o comportamento da aplicação quando o sensor estiver desligado, agora vamos configurá-la para o funcionamento com o
sensor ligado dando-lhe a funcionalidade de exibir nossa posição no Mapa.
Antes de mais nada precisamos pegar uma linha com o GoogleMaps, será a linha que passaremos para nossa aplicação conseguir “desenhar”
o mapa, e nossa aplicação por sua vez passará para o GoogleMaps a localização do ponto que queremos desenhar. É bem simples, veja a
linha:
https://maps.google.com/?q=%s,%s&&t=h&&z=13&&hl=pt-BR&&output=embed
Basicamente, chamamos o GoogleMaps, informamos a ele a parte do mapa que queremos, representada na linha por: “?q=%s,%s”, cada um
dos “%s” será trocado por sua respectiva coordenada a ser fornecida pelo sensor quando ativado. O restante são variáveis capazes de mudar o
comportamento do mapa:
&t=h –> indica o tipo do mapa, nesse caso híbrido.
&z=13 –> indica que nosso mapa será exibido com 13 de zoom.
&output=embed –> quer dizer que nosso mapa estará embarcado no navegador, sem exibir recursos específicos de tela do GoogleMaps.
Para exibirmos a localização, trataremos o evento OnLocationChanged, que é acionado sempre que sensor se movimenta superando o limite
estabelecido em sua propriedade Distance, que em nosso caso setamos para 50 metros. Passaremos nesse evento a linha do Google citada na
sessão anterior e receberemos as coordenadas por parte do LocationSensor1, veja como ficará o código a ser chamado no evento:
3const
5
begin
6
Label2.Text := Format(navegar, [ Format('%2.6f', [NewLocation.Latitude]), Format('%2.6f',
7[NewLocation.Longitude])]);
Com isso já temos o necessário para rodar a aplicação. Apenas explicando o conteúdo do código adicionado:
Declaramos a constante Navegar do tipo string e atribuímos a ela a linha que pegamos “emprestada” do GoogleMaps. Em seguida usamos a
função Format encadeadamente, uma vez passando valores do tipo Float, Latitude e Longitude do NewLocation passado no Evento sempre
que a localização mudar. Utilizamos aí o formato de 2 casas inteiras e 6 casas decimais expressas pela string „%2.6f‟, assim forçamos as
coordenadas a serem exibidas sob essa formatação.
Exibimos esse resultado na propriedade Text do Label2, este conteúdo é a url a qual o Webbrowser1 logo em seguida recebe como parâmetro
informando o destino da sua navegação.
Executando a aplicação percebemos que a mesma já funciona, entretanto pode ocorrer de o mapa não estar representando sua real
localização.
Para resolvermos esse impasse basta setarmos o separador decimal dentro de nossa aplicação para ponto “.”, sendo assim vamos inserir
imediatamente após o “begin” da codificação do evento OnLocationChanged essa linha FormatSettings.DecimalSeparator := ‘.’; .
Com isso devemos salvar nossa aplicação e executá-la novamente para conferir o resultado.
A chave para que a aplicação realmente funcione no Brasil é termos o Separador de decimal alterado… simples assim, fazendo isso o
exemplo postado pela Embarcadero em vídeo, ou o exemplo que acompanha o Delphi XE5 disponibilizado em sua “Welcome Page”
funcionarão perfeitamente.
Relacionado
Em "Delphi"
Em "Delphi"
Delphi XE5 Efetuando chamadas telefônicas direto de sua aplicação móvel
Em "Delphi"
Navegação do post
Post anteriorDelphi XE5 Acessando a Câmera e compartilhando imagens do dispositivo AndroidPróximo postITCast – A Tecnologia de Ponta no Noroeste
Fluminense
2. Brunno
Responder
Bruno boa tarde. Na verdade nesse exemplo não usamos componente mas sim a url do googlemaps, para traçar rota, faça o
procedimento no navegador e depois copie essa url para o exemplo, trocando os fatores variáveis “origem” e “destino”. Vai
funcionar!
Responder
3. Brunno
Responder
1. landerson
Bem Bruno… não sei se você tentou fazer algo… mas basicamente seria o seguinte: abrir o browser e acessar o Google
Maps… fazer sua pesquisa de rota, daí você clica para exibir o link da pesquisa de rotas, no meu caso ficou assim:
https://maps.google.com/?saddr=Pimenta-MG&&daddr=Itaocara-RJ&&t=h&&z=13&&hl=pt-BR
note que temos as variáveis saddr e daddr com valores de “Pimenta Minas Gerais” e “Itaocara” respectivamente esses valores
serão substituídos por strings a serem passadas por seu aplicativo.
Responder
1. Francisco
Olá, não estou conseguindo visualizar o exemplo que fez para o Bruno, mostrando como traçar rotas. Preciso fazer um
app que receba um determinado endereço e exiba no mapa e também traçe rotas entre dois endereços.
Pode me ajudar? Obrigado
Responder
1. Landerson Gomes
Olá Francisco, o para traçar rotas, vá até o maps normal pelo computador, trace uma de exemplo. Daí você
pega o conteúdo da barra de endereços no seu navegador e adapta transformando seus pontos destino e partida
em variáveis. Esse é o conceito, veja se resolve!
Se não sinalize aqui.
Abraço.
Responder
4. Brunno
Responder
5. Ramon
Responder
6. Leonardo
Boa noite camarada, gostaria de saber o seguinte, teria como implementar para um lugar em especifico, e esse lugar tendo varios
andares, estou pretendendo criar um GPS para supermercados, faculdades etc. Sabe me dizer como posso tratar essas questoes de
andares? O Delphi tem esse requisito?
Desde ja agradeço, fique na paz!
Responder
1. Landerson Gomes
Olá Leonardo… coisa linda essa que você quer hein?! Já vi em cinema rsrs. Brincadeiras a parte acredito que seja possível
sim uma vez que os dispositivos conseguem informar altitude e elevação de terreno… mas te sendo bem sincero nem imagino
como proceder. Muita pesquisa aí no seu caminho… é o que vejo para você.
Um abraço.
Responder
7. Vinicius
Obrigado.
Responder
1. Landerson Gomes
Olá Vinicius boa noite… na verdade a função “embed” passa a não ser suportada mas pelos frames no Google Maps, de
acordo com a API que estávamos usando.
Se você retirar a parte do Embeded… vai abrir, ou seja, sua string Navegar seria:
https://maps.google.com/?q=%s,%s&&t=h&&z=13&&hl=pt-BR
Estudando a API do Google Maps você encontrará outras maneiras de solucionar o problema.
Um abraço.
Responder
Bom dia Landerson, tentei trabalhar com este sensor e tem hora que funciona e tem hora que não, na verdade eu precisava somente
que me retornasse o nome da cidade onde estou, sabe como fazer isto?
Responder
1. Landerson Gomes
Boa tarde Fabio. O sensor depende muito do aparelho para fixar a real posição do mesmo.
Sinceramente a sua questão só conseguiria resolver com uma profunda pesquisa… talvez você consiga algo dando uma
pesquisada na api do Google Maps.
Lembro-me de ter visto situação semelhante a descrita por você a muito tempo atrás num exemplo do Marco Cantù
(http://blog.marcocantu.com/blog/google_map_delphi_server.html), como falei faz muito tempo… mas quem sabe consiga
evoluir a partir daí.
Abraço.
Responder
9. Riba
Olá! Obrigado pelas dicas! Para usar a API do GoogleMaps terei de pagar pela API.?
Responder
1. Landerson Gomes
Olá Riba.
o Acesso à API é gratuito, esse link pode ser o seu caminho: https://developers.google.com/maps/?hl=pt-br. Boa sorte e bons
códigos aí.
Responder
1. Marcio
agosto 21, 2014 às 11:58
Estou tentando consumir a API da Matriz de distâncias do Google. A minha dúvida é a seguinte: Depois que eu recebo
a resposta no formato JSON, como eu faço pra exibir essas informações em um TWebBrowser, ou seja, montar uma
URL válida.
http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisc
o|Victoria+BC&mode=bicycling&language=fr-FR&sensor=false
Responder
1. Landerson Gomes
Responder
Olá, estou com um problema muito grave no android, porém, acredito que alguém poderá me ajudar. Já desenvolvi uma aplicação, e
meu problema é quando o celular desliga a tela automanticamente (tempo de duração da luz de fundo). Assim que a tela se apaga,
caso tenha um Showmessage, ou qualquer tela de mensagem aguardando clicar em OK, o sistema trava. O que pode ser isto? uso xe5
up2
Responder
Como faco para perceber quando o sensor de GPS esta ativo ou nao???
Responder
1. Landerson Gomes
Olá Juan… seja bem vindo! Dê uma estudada no componente LocationSensor, ele tem a propriedade Started que retorna se
ele está em funcionamento. (Boolean)
(http://docwiki.embarcadero.com/Libraries/XE7/en/System.Sensors.TCustomLocationSensor.Started) Ele é ativado chamando
o método Start.
Vale a leitura para um melhor entendimento:
http://docwiki.embarcadero.com/Libraries/XE7/en/System.Sensors.Components.TLocationSensor
Apenas lembrando que o componente passou por um grande amadurecimento desde a postagem, na versão XE7 ele está com
muito mais recursos disponíveis.
Responder
Boa Tarde
Gostaria de saber se é possivel ter um mapa offline no aparelho?
Responder
1. Landerson Gomes
Olá José Luís, seja bem vindo! Olha possível acredito que seja sim, porém não tenho a mínima idéia de como seria
implementar tal funcionalidade.
Lembrando que o OI MAPAS é assim, então por isso acredito que seja possível.
Lamento não poder ser mais eficiente que isso, mas realmente passa bem longe qualquer idéia de como fazê-lo.
De qualquer forma reitero as boas vindas e muito obrigado por sua participação.
Responder
14. Wellington
Boa Tarde,
como eu faria pra pegar a distancia entre o local atual e o destino?
Também não consegui traçar rota.
Responder
1. Landerson Gomes
Responder
15. Jefferson
Ola, estou usando o Xe7, compilei aplicação porém a mesma não utiliza o GPS, mesmo ele estando ativo, ela nao usa os recursos.
Sera que tem que usar o tal intent pra interagir
Responder
1. Landerson Gomes
Jefferson olá… Sugiro uma revisão, tente inclusive uma atualização via esse código do link, pois já tivemos 4 versões desde o
exemplo:
http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FMX.LocationDemo_Sample.
Responder
16. Jefferson
Landerson, primeiraramente obrigado pela atenção, com o conteúdo do seu blog estou praticamente terminando meu app
(comercial)..Landerson, sobre a string do google, você tem um exemplo de como decodificar ela “quebrar” em rua, numero, bairro,
cep ? a partir da localização gostaria destes dados.
Responder
1. Landerson Gomes
Olá Jefferson… Eu nunca cheguei a fazer nada nesse sentido, tentarei retomar com novos exemplos a partir de novembro,
tentarei abordar essa situação!
Até lá, ou até a próxima!
Responder
17. David
Responder
1. Landerson Gomes
Responder
Responder
1. Landerson Gomes
Olá Jose Renato, nunca tentei nada nesse sentido pretendo dá uma analisada na questão após a Conference, chegando a
alguma solução posto aqui.
Mas o bom e velho Delta S/Delta T deve resolver.
Responder
19. marllone
ola amigo gostei do seu projeto so que na hora d copilar da erro pois vc nao declarou
Responder
20. Andre
fevereiro 11, 2016 às 07:00