gtwvw + Google Maps

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

gtwvw + Google Maps

Mensagem por angeiras »

Olá,

Estava fazendo alguns testes com os objetos OLE do xharbour e percebi que as possibilidades sao enormes.

Montei um pequeno exemplo de integração com o Google Maps. Dá até pra traçar o caminho daqui de Olinda até o Google Headquarters ( inclusive a sugestão de atravessar o oceano atlantico a nado, apenas 9.207 km ).

O Código é bem simples :

Código: Selecionar todos

#include "inkey.ch"

***************
FUNCTION MAIN()
***************
   local oMapa, mde_uf, mpara_uf, mde_cid, mpara_cid, mde_rua, mpara_rua, mweb

   wvw_settitle(,"Usando o google maps")
   setcolor( 'N/W,N/GR*,,,N/W*' )
   cls

   while .T.
      mde_uf  := mpara_uf  := space(20)
      mde_cid := mpara_cid := space(40)
      mde_rua := mpara_rua := space(50)

      @ 05, 01 say "DE :"
      @ 07, 01 say "Estado ..:" get mde_uf  picture "@!"
      @ 08, 01 say "Cidade ..:" get mde_cid picture "@!"
      @ 09, 01 say "Endereco :" get mde_rua picture "@!"
      @ 11, 01 say "PARA :"
      @ 13, 01 say "Estado ..:" get mpara_uf  picture "@!"
      @ 14, 01 say "Cidade ..:" get mpara_cid picture "@!"
      @ 15, 01 say "Endereco :" get mpara_rua picture "@!"
      read
      if lastkey() == K_ESC
         exit
      endif
      mde_uf  := alltrim( mde_uf ) ; mpara_uf  := alltrim( mpara_uf )
      mde_cid := alltrim( mde_cid ); mpara_cid := alltrim( mpara_cid )
      mde_rua := alltrim( mde_rua ); mpara_rua := alltrim( mpara_rua )

      try
         oMapa := GetActiveObject( "InternetExplorer.Application" )
      catch
         try
            oMapa := CreateObject( "InternetExplorer.Application" )
         catch
            Alert( "ERRO ! Internet Explorer nao disponivel")
            return
         end
      end
      mweb := "http://maps.google.com/maps?q=de "               +;
              mde_rua + " " + mde_cid + " " + mde_uf + " para " +;
              mpara_rua + " " + mpara_cid + " " + mpara_uf

      oMapa:Visible := .T.
      oMapa:Navigate( mweb )
      wvw_minimize(0)
   enddo
RETURN
[]s
Manoel Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Boa noite Angeiras.

Tentei compilar o teu exemplo, e deu o seguinte erro na janela do DOS:

Código: Selecionar todos

HbMake v1.17 - xHarbour Make Utility
Copyright (C) 2000-2005 xHarbour project - http://www.xharbour.org
xHarbour build 0.99.70 Intl. (SimpLex) / Borland C++ 5.5.1
H:\Test_Google>
     Compiling :
Error BASE/1132  Bound error: array access Arguments: ( [ 1] = Type: A Val: { Ar
ray of 1 Items } [ 2] = Type: N Val:          0)

Error at ...: COMPILEUPDATEDFILES(3409) in Module: hbmake.prg
Called from : MAIN(424) in Module: hbmake.prg
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Mensagem por angeiras »

Ola,

Não entendi o erro não. Criei agorinha um .bc criado pelo hbmake e comigo funcionou direito ( se bem que não uso o hbmake, criei apenas pra testar ).

[]s
Manoel Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Hasse, eu compilei aqui e funcionou, apenas lembrando vc tem que linkar a GTWVW para funcionar,

Angerias...muito boa essa função !!! ficou show...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Funcionou...

O problema era o nome do PRG. Eu usava "Google Maps.prg", com espaço.

Bastou tirar o espaço que funcionou legal.

Parabéns Angeiras. Ficou muuuuiiiiitttttoooo booooommmm !
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Legal, aqui funcionou também.

Vale ressaltar que a diferença para um tradicional RUN não é muito grande né... Apesar de que permite alguma manipulação sobre a janela, como mostrar/esconder por exemplo.

Eu estive realizando uns teste com minigui.lib + html.lib e teoricamente este exemplo do angeiras poderia perfeitamente ser aberto dentro da janela da própria aplicação. Basta pegar a resposta do servidor, no entanto a iteratividade que o site permite, como mover mapa, acho que se perderia...

Falou...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinhos

Eu desenvolvi um método baseado no cd Guia de Ruas, em conjunto com a biblioteca ADOxB eu manipulava os arquivos .XML, obtinha o numero de pagina e apresentava a imagem da pagina que continha o endereço pesquisado.

Mas como eu estava mexendo com Activex, pensei em inserir o mesmo em um diálogo e acrescentar alguns recursos usando a API do Google e um codigo encontrado em um forum internacional de programadores.

O problema que o mesmo pedia que fosse passado codigos de coordenadas geodésicas e apesar de meu arquivo de CEPs conter estes numeros, nem todos os registros tinham a coordenada.

Felizmente, recentemente, um outro forense apresentou um novo código e passei a trabalhar no mesmo mantendo minha estrutura de verificação conseguindo o que posto a seguir:

Resultado:
Imagem

Codigo da janela .RC:

Código: Selecionar todos

GoogleMap DIALOG 17, 35, 418, 316
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Localizacao de Endereco"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 59, 246, 155, 28, ES_MULTILINE | WS_BORDER | WS_TABSTOP
 EDITTEXT 102, 59, 277, 75, 12
 EDITTEXT 103, 138, 277, 76, 12
 PUSHBUTTON "Mostras mapa deste endereço", 5, 59, 293, 156, 14
 PUSHBUTTON "Fechar", 2, 364, 298, 50, 14
 CONTROL "", 100, "TActiveX", 0 | WS_CHILD | WS_VISIBLE, 4, 4, 409, 230
 LTEXT "Endereco:", -1, 8, 248, 46, 8
 LTEXT "Bairro/Cidade:", -1, 8, 279, 49, 8
 GROUPBOX "Pesquisar pelo endereço", -1, 4, 237, 215, 76, BS_GROUPBOX
 EDITTEXT 105, 277, 246, 60, 12
 LTEXT "C.E.P.:", -1, 226, 249, 48, 8
 GROUPBOX "Pesquisar pelo CEP", -1, 222, 237, 192, 43, BS_GROUPBOX
 PUSHBUTTON "Mostrar mapa deste CEP", 6, 277, 261, 134, 14
 PUSHBUTTON "Confirmar CEP...", 7, 340, 245, 71, 14
 EDITTEXT 104, 228, 263, 16, 12, NOT WS_VISIBLE | WS_BORDER | WS_TABSTOP
 CONTROL "TBitMap", 115, "TBitMap", WS_CHILD | WS_VISIBLE, 223, 282, 116, 34
}
Codigo do .PRG:

Código: Selecionar todos

...
DEFINE BUTTON ... GoogleMap(CLIENTES->ENDERECO, ;
                 CLIENTES->BAIRRO, ;
                 CLIENTES->CIDADE,;
                 CLIENTES->ESTADO,;
                 CLIENTES->CEP )
...
Function GoogleMap( cEndereco, cBairro, cCidade, cEstado, cCep )
   LOCAL oGMapDlg, oActiveX
   DEFAULT cEndereco := "MARIO MAURO RAMOS MATTOSO",;
           cBairro   := "PIRITUBA", cCidade := "SAO PAULO",;
           cEstado   := "SP", cCep := "05171-340"
           M->ENDERECO := cEndereco := alltrim(OemToAnsi(cEndereco)) + space(30)
           M->BAIRRO   := cBairro   := alltrim(OemToAnsi(cBairro)) + space(30)
           M->CIDADE   := cCidade   := alltrim(OemToAnsi(cCidade)) + space(30)
           M->ESTADO   := cEstado
           M->CEP      := cCep
   DEFINE DIALOG oGMapDlg RESOURCE "GoogleMap"
          REDEFINE ACTIVEX oActiveX ID 100 OF oGMapDlg PROGID "Shell.Explorer"
          REDEFINE GET     oGet101 VAR cEndereco MEMO ID 101 OF oGMapDlg FONT oFont0
                           oGet101:bChange:={ |nKey,nFlags,Self| iif(nKey==13,Salto(Self,oGet101,oGMapDlg,len(M->ENDERECO)),)}
          REDEFINE GET     oGet102 VAR cBairro   PICTURE "@!" ID 102 OF oGMapDlg FONT oFont0
          REDEFINE GET     oGet103 VAR cCidade   PICTURE "@!" ID 103 OF oGMapDlg FONT oFont0
          REDEFINE GET     oGet104 VAR cEstado   PICTURE "@!" ID 104 OF oGMapDlg FONT oFont0
          REDEFINE GET     oGet105 VAR cCep      PICTURE "99999-999" ID 105 OF oGMapDlg FONT oFont0
          //REDEFINE BITMAP oBitMap ID 115 OF oGMapDlg FILENAME "recursos\googlem.bmp"
          REDEFINE BUTTON ID 5 OF oGMapDlg ACTION Show( cEndereco, cBairro, cCidade, cEstado, cCep, oActiveX )
          REDEFINE BUTTON ID 6 OF oGMapDlg ACTION Show( , , , , cCep, oActiveX )
          REDEFINE BUTTON ID 7 OF oGMapDlg ACTION .T.
   ACTIVATE DIALOG oGMapDlg CENTERED ON INIT Show( cEndereco, cBairro, cCidade, cEstado, cCep, oActiveX )
   return nil

function Show( cEndereco, cBairro, cCidade, cEstado, cCep, oActiveX )
   local cHtml := MemoRead( "gmap.html",255 )
   if cEndereco=NIL .and. cBairro=NIL
      cEndereco := "BRASIL"
      cCidade   := ""
      cEstado   := ""
   endif
   cBairro   := ""
   cHtml := StrTran( cHtml, "<<ENDERECO>>", AllTrim( cEndereco ) )
   cHtml := StrTran( cHtml, "<<BAIRRO>>"  , AllTrim( cBairro ) )
   cHtml := StrTran( cHtml, "<<CIDADE>>"  , AllTrim( cCidade ) )
   cHtml := StrTran( cHtml, "<<ESTADO>>"  , AllTrim( cEstado ) )
   cHtml := StrTran( cHtml, "<<CEP>>"     , AllTrim( cCep ) )
   MemoWrit( "temp.html", cHtml )
   oActiveX:Do( "Navigate2", CurDrive() + ":\" + CurDir() + "\temp.html" )
   return nil   
Codigo GMAP.HTML:

Código: Selecionar todos

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">                                                                   
  <head>                                                                                                      
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title> </title>             
    <script src="http://maps.google.com/maps?file=api&v=2.x&key=ABQIAAAAtOjLpIVcO8im8KJFR8pcMhQjskl1-YgiA_BGX2yRrf7htVrbmBTWZt39_v1rJ4xxwZZCEomegYBo1w" type="text/javascript"></script> 
    <script type="text/javascript">                                      
    var map = null;                                                      
    var geocoder = null;                                                 
    var coords = null;                                                   
    function initialize() {                                              
      if (GBrowserIsCompatible()) {                                      
        map = new GMap2(document.getElementById("map_canvas"));          
        map.addControl(new GLargeMapControl());                          
        map.addControl(new GMapTypeControl());                           
        geocoder = new GClientGeocoder();                                
      }                                                                  
    }                                                                    
    function showAddress(address, cAddressName) {                        
      if (geocoder) {                                                    
        geocoder.getLatLng(                                              
          address,                                                       
          function(point) {                                              
            if (!point) {                                                
              showAddress2('<<CIDADE>>');               
            } else {                                                     
              map.setCenter(point, 15);                                  
              var marker = new GMarker(point);                           
              map.addOverlay(marker);                                    
              coords = marker.getPoint();                                
              var curl = cAddressName + "<p>" + coords.toUrlValue(6) + "</p>" 
              var button = '<input type="button" value="Imprimir" onClick="window.print()"/>;'
              curl = curl + button 
            }                                                            
          }                                                              
        );                                                               
      }                                                                  
    }                                                                    
    function showAddress2(address) {       
      if (geocoder) {                                                    
        geocoder.getLatLng(                                              
          address,                                                       
          function(point) {                                              
            if (!point) {                                                
              alert(address + " nao encontrado");                         
            } else {                                                     
              map.setCenter(point, 15);                                  
              var marker = new GMarker(point);                           
              map.addOverlay(marker);                                    
              marker.openInfoWindowHtml(address);                        
            }                                                            
          }                                                              
        );                                                               
      }                                                                  
    }                                                                    
    </script>                                                            
  </head>                                                                
  <body onload="initialize(); showAddress('<<ENDERECO>>, <<CIDADE>> <<BAIRRO>> <<CEP>>', '<<ENDERECO>>, <<CIDADE>> <<BAIRRO>> <<CEP>>');" onunload="GUnload()"
        <div id="map_canvas" style="width: 573px; height: 340px"></div> 
  </body>                                                                
</html>
Caso tenham problemas ao colar o codigo .HTML acima, peguem no neste link:

http://www.5volution.com/forum/gmap.html

Para se fazer um uso correto destas APIs é necessário criar o seu código em http://code.google.com/apis/maps e inseri-lo na variável KEY dentro do GMAP.HTML

Boa sorte.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder