24 Replies Latest reply: Oct 8, 2014 8:01 AM by Paulo Dantas RSS

    QlikView Google Maps x Coordenadas

    Raphael Pacheco

      Boa tarde a todos.

       

      Alguém saberia onde encontrar uma relação com todos os CEPs e suas respectivas Latitudes e Longitudes para utilizá-las no QlikView?

      Ou existe algum APP's que vincule o cep as coordenadas?

       

      Obrigado!

        • Re: QlikView Google Maps x Coordenadas
          Kaauan Matzenbacher

          cara, eu uso o api do google, fiz um for onde ele me retorna as coordendas a partir de endereços ( Rua+nº+Cidade+estado+país) e joga num qvd.

          Acredito que de pra fazer a partir dos ceps tmb..mas nunca testei.

           

          abs.

            • Re: QlikView Google Maps x Coordenadas
              Raphael Pacheco

              Interessante Kaauan.

              Pensei no Cep pois temos estas informações no cadastro dos clientes e sei que existe no google latitude e longitude para cada uma das ruas.

              Agora se der tmbm para fazer a partir do Bairro ou Cidade seria ótimo também
              Como fazer?

              Sou novo ainda nesta história de GeoQlik!

               

              Abs.

                • Re: QlikView Google Maps x Coordenadas
                  Kaauan Matzenbacher

                  vou te colar a barbada aqui.. só me da um min.

                   

                  abs.

                  • Re: QlikView Google Maps x Coordenadas
                    Kaauan Matzenbacher

                    Aqui esta Raphael, eu dei uma ralada pra deixar como eu queria, tavez tenha formas mais simples, porem esta funcionando bem... lembrando que o google tem liberado em media 1250 buscas por dia, pra burlar isso eu uso uma internet 3g, faço a busca de 1250 reconecto e busco novamente... pois o ip da empresa aqui é fixo.

                     

                    *pra pegar apenas as coordendas é mais simples, neste exemplo ele retorna o endereço completo no formato do google, separando por colunas, cep, rua, cidade,  inclusive o bairro exato da rua, pois geralemente sao cadastrados de forma errada.

                    mas é isso.. qualquer coisa posta aí.

                    abs.

                    **posso simplificar para buscar apenas coordendas se quiser.

                     

                     

                     

                    //BUSCA DE COORDENAS ATRAVÉS DA API DO GOOGLE.

                    set ErrorMode=0;

                     

                     

                    [Tabela_endereços]:

                    LOAD distinct

                    ChavePrincipal,

                    rowno() as chaveunica,

                    rua&'+'&numero&'+'&cidade&'+'&pais as    EndereçoTratado ;

                    from....;

                    //faz um tratamento caso seja preciso;

                     

                     

                    [Maior Linha]:

                    load max(chaveunica) as maxLinhas

                    Resident [Tabela_endereços];

                     

                     

                    let vMaxLinhas = Peek('maxLinhas');

                     

                     

                      for  i = 1  to   $(vMaxLinhas)

                     

                    //'ou'  for = i = 1 to 1249  'assim por diante.'

                     

                     

                              [t]:

                              load

                        EndereçoTratado          as logradouro

                              resident [Tabela_endereços] where  chaveunica = $(i) ;

                     

                              let vRegistro = Peek('logradouro');

                     

                     

                    GeocodeResponse:

                    LOAD $(i) as chaveunica,

                        [result/geometry/location/lat] as Latitude,

                        [result/geometry/location/lng] as Longitude,

                        %Key_GeocodeResponse_62C7A0A69859D655,

                       [result/geometry/location_type] as location_type,

                        status

                    FROM [http://maps.googleapis.com/maps/api/geocode/xml?address=$(vRegistro)&sensor=false] (XmlSimple, Table is [GeocodeResponse]);

                     

                     

                    address_component:

                    LOAD

                              $(i) as chaveunica,

                         long_name as  Itens,

                        %Key_address_component_3D78D9B402C68EA5 as codigo,

                         %Key_GeocodeResponse_62C7A0A69859D655 as key

                    FROM [http://maps.googleapis.com/maps/api/geocode/xml?address=$(vRegistro)&sensor=false] (XmlSimple, Table is [GeocodeResponse/result/address_component]);

                     

                     

                    drop Table [t];

                    SLEEP(700);

                     

                    next;

                     

                     

                     

                     

                    left join (Tabela_endereços)

                     

                              Status:

                              load

                              chaveunica,

                              status

                              Resident GeocodeResponse;

                                        left join

                     

                              Location:

                              load

                              chaveunica,

                              location_type

                              Resident GeocodeResponse;

                                        left join

                     

                              Latitude:

                              load

                              chaveunica,

                              Latitude

                              Resident GeocodeResponse;

                                        left join

                     

                              Longitude:

                              load

                              chaveunica,

                              Longitude

                              Resident GeocodeResponse;

                                        left join

                     

                              Rua:

                              load

                              chaveunica,

                              if(codigo= 9,Itens) as Rua

                              resident address_component

                              where isnull(if(codigo= 9,Itens)) = false();

                                        left join

                     

                              Bairro:

                              load

                              chaveunica,

                              if(codigo= 13,Itens) as Bairro

                              resident address_component

                              where isnull(if(codigo= 13,Itens)) = false();

                                   left join

                     

                              Número:

                              load

                              chaveunica,

                              if(codigo =5,Itens) as Número

                              resident address_component

                              where isnull(if(codigo =5,Itens)) = false();

                                   left join

                     

                              Cidade:

                              load

                              chaveunica,

                              if(codigo = 18,Itens) as Cidade

                              resident address_component

                              where isnull(if(codigo =18,Itens)) = false();

                                   left join

                     

                              Estado:

                              load

                              chaveunica,

                              if(codigo = 23,Itens) as Estado

                              resident address_component

                              where isnull(if(codigo =23,Itens)) = false();

                                   left join

                     

                              cep:

                              load

                              chaveunica,

                              if(codigo = 33,Itens) as cep

                              resident address_component

                              where isnull(if(codigo =33,Itens)) = false();

                     

                     

                        [Final]:

                        NoConcatenate Load

                        ChavePrincipal,

                        cep,

                        chaveunica,

                        EndereçoTratado,

                        status,

                        location_type,

                        Latitude,

                        Longitude,

                        Rua,

                        Bairro,

                        Número,

                        Cidade,

                        Estado

                     

                              Resident Tabela_endereços

                              where IsNull(Latitude) = false() and  Latitude <> '' ;

                     

                    drop table GeocodeResponse;

                    drop table [Maior Linha];

                    drop Table address_component;

                    drop Table Tabela_endereços;

                     

                     

                    STORE Final into [C:\Coordendas_01.qvd];

                • Re: QlikView Google Maps x Coordenadas
                  Yuri Nicolett

                  Rafael, lembre-se que Latitude e Longitude é um ponto em um eixo X e Y. Um CEP não pode ser demarcado através de uma Latitude ou Longitude, MAS podemos marcar um ponto que sinalize que este CEP é dentro de determinada Latitude e Longitude.

                   

                  Uma forma de se fazer isso é usar uma API do próprio googlemaps. Essa api pode ser utilizada através da URL:

                  http://maps.google.com/maps/api/geocode/xml?components=country:Brasil|postal_code:13505-151&sensor=false

                   

                  Essa API retorna um XML com diversas informações, inclusive a Latitude e Longitude aproximada que o Google Maps encontrou, MAS tome cuidado! Existem CEPs que o googlemaps não reconhece, existem CEPs especiais (Sufixo maior que 899) que o GoogleMaps também não reconhece e também saiba que o googlemaps, na maioria das vezes, vai te retornar um valor aproximado, mesmo que este CEP não exista. Então vale a pena fazer a validação dos resultados para identificar esses pequenos "furos".

                   

                  O google limita o número de consultas diarias para 2000, caso você ultrapasse ele vai te bloquear por 24 horas (ou menos).

                   

                  Ok?

                  Com essa URL você pode fazer um código varrer toda sua lista de CEPs e sair disparando, um a um, para a api do google retornar a latitude e longitude deste CEP!

                   

                   

                  OBS: Neste link existe a documentação da API do google: https://developers.google.com/maps/documentation/geocoding/

                   

                  Ah, respondendo sua pergunta inicial: Talvez exista uma base de Latitude e Longitude por CEP, mas eu já passei por isso e não encontrei uma lista free!

                  • Re: QlikView Google Maps x Coordenadas

                    Olá Kaauan;

                     

                    estou tentando utilizar seu código porem nao sei qual o formato que devo colocar os endereços dentro da planilha excel.

                    criei uma com 1 linha (registro) contendo: RUA, NUMERO, CIDADE e PAIS nas colunas A,B,C e D, porem ao recarregar nada é lido, ele mostra apenas as listas $field, $table, $rows, $fields, $info.

                     

                    pode me ajudar ?

                      • Re: QlikView Google Maps x Coordenadas
                        Kaauan Matzenbacher

                        E ai Cleber,

                         

                        Posso sim, qual a sua necessidade exatamente, apenas as coordenas a partir desses endereços?

                         

                        abs.

                          • Re: QlikView Google Maps x Coordenadas

                            Isso mesmo, eu usaria os dados de endereço dos meus clientes que estao no ERP (e tb carregados no Qlik) para consultar as coordenadas e gravar se possivel na mesma tabela do Qlik, juntamente com outros campos ja existentes.

                             

                            Tendo essa base feita, poderei construir um visão mesclando vendas com regiao dos clientes nos mapas do Google, por exemplo.

                              • Re: QlikView Google Maps x Coordenadas
                                Kaauan Matzenbacher

                                Se possível manda o que vc fez pra eu dar uma olhada... aí te falo o que esta faltando.

                                 

                                abs

                                  • Re: QlikView Google Maps x Coordenadas

                                    Estou tentando adaptar o código que você criou para ler uma planilha minha com dados conforme passei no primeiro post.

                                     

                                    Não é simplesmente apontar a minha planilha no From abaixo ?

                                     

                                    :

                                    LOAD distinct

                                    ChavePrincipal,

                                    rowno() as chaveunica,

                                    rua&''&numero&''&cidade&'+'&pais as    EndereçoTratado ;

                                    from....;

                                     

                                     

                                    De: Kaauan Matzenbacher

                                    Enviada em: terça-feira, 24 de setembro de 2013 16:18

                                    Para: Cleber Pedroso Nogueira

                                    Assunto: Re:  - QlikView Google Maps x Coordenadas

                                     

                                    QlikCommunity<http://community.qlik.com/>

                                     

                                    QlikView Google Maps x Coordenadas

                                     

                                    reply from Kaauan Matzenbacher<http://community.qlik.com/people/Matzenbacher?et=watches.email.thread> in Qlikview Brasil - View the full discussion<http://community.qlik.com/message/396530?et=watches.email.thread#396530>

                                      • Re: Re: QlikView Google Maps x Coordenadas
                                        Raphael Pacheco

                                        Eu segui o código que o Kaauan forneceu neste post e fiz as minhas adaptações para adequar ao modelo de dados que tenho aqui na empresa onde trabalho.

                                        Os dados dos endereços eu pego "diretamente do banco", botei assim entre aspas por que existe um outro QVW que faz a leitura da tabela de endereços e grava em um QVD.

                                         

                                        Como o Google fornece apenas uma quantidade limitada de endereços ao dia (1250 acho que é esse o número), eu criei uma lógica para continuar a leitura do ponto que parei no dia anterior, ou seja, uma carga de certo modo incremental.

                                         

                                        Para isso montei o QVW inicialmente lendo os dados conforme o script do Kaauan e gravei o resultado em um QVD chamado Coordenadas.

                                         

                                        Depois montei o seguinte script para montar o esquema incremental.

                                        Auxiliar:
                                        LOAD 
                                        Max(chaveunica) as Var_Chave
                                        FROM [..\Arquivos\QVDs Transformados\Coordenadas.qvd] (qvd);


                                        //Pega o valor da maior chave lida e atribui à variável Chave
                                        LET Chave = Peek('Var_Chave');

                                        //Faz a leitura das linhas e da combinação de dados existentes na tabela CAD_ENDCLI com a condicional de apenas gravar na tabela os valores com a ChavePrincipal maior
                                        // que o valor da chave lido anteriormente
                                        Auxiliar_End:
                                        LOAD
                                        distinct
                                        //ChavePrincipal,
                                        rowno() as Chave,
                                        ENDERECO&'+'&NUMERO&'+'&CIDADE&'+'&PAIS as End
                                        FROM [..\Arquivos\Espelhos BD\CAD_ENDCLI.qvd] (qvd);

                                        [Tabela_endereços]:
                                        LOAD
                                        Chave as chaveunica,
                                        End as EndereçoTratado
                                        Resident Auxiliar_End
                                        Where Chave > $(Chave);

                                        DROP Table Auxiliar_End;


                                        [Maior Linha]:
                                        LOAD
                                        Max(chaveunica) as maxLinhas
                                        Resident [Tabela_endereços];

                                        let vMaxLinhas = Peek('maxLinhas');

                                        //for  i = 1  to   $(vMaxLinhas)
                                        //Aqui ele pega do valor atual a chave até o valor final (+1000)
                                        for  i = $(Chave) to $(Chave) + 1000

                                        [t]:
                                        LOAD
                                        EndereçoTratado        as logradouro
                                        resident [Tabela_endereços] where  chaveunica = $(i) ;

                                        let vRegistro = Peek('logradouro');

                                        GeocodeResponse:
                                        LOAD
                                        $(i) as chaveunica,
                                        [result/geometry/location/lat]  as Latitude,
                                        [result/geometry/location/lng]  as Longitude,
                                        %Key_GeocodeResponse_62C7A0A69859D655,
                                        [result/geometry/location_type]  as location_type,
                                        status
                                        FROM [http://maps.googleapis.com/maps/api/geocode/xml?address=$(vRegistro)&sensor=false] (XmlSimple, Table is [GeocodeResponse]);

                                        address_component:
                                        LOAD
                                           
                                        $(i) as chaveunica,
                                           
                                        long_name as  Itens,
                                           
                                        %Key_address_component_3D78D9B402C68EA5  as codigo,
                                           
                                        %Key_GeocodeResponse_62C7A0A69859D655  as key

                                        FROM [http://maps.googleapis.com/maps/api/geocode/xml?address=$(vRegistro)&sensor=false] (XmlSimple, Table is [GeocodeResponse/result/address_component]);

                                        drop Table [t];


                                        O restante eu apenas segui o código do Kaauan.

                                        Comigo aqui deu certinho

                              • Re: QlikView Google Maps x Coordenadas

                                Alguém tem um qvw de modelo?!

                                • Re: QlikView Google Maps x Coordenadas
                                  Luciano Vasconcelos

                                  Boa tarde.

                                  Só para complementar:

                                  No link abaixo mostra opções de desenho. Não são delimitações abaixo, mas com alguns pontos já é possível fazer alguma coisa.

                                   

                                  https://developers.google.com/maps/documentation/staticmaps/index#PathPoints

                                  As especificações do parâmetro path aparecem abaixo:

                                  path=color:0x0000ff|weight:5|40.737102,-73.990318|40.749825,-73.987963|40.752946,-73.987384|40.755823,-73.986397