Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
rphpacheco
Creator III
Creator III

QlikView Google Maps x Coordenadas

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!

1 Solution

Accepted Solutions
matzenbacher
Creator II
Creator II

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

          :

          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 ;

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 ;

View solution in original post

24 Replies
matzenbacher
Creator II
Creator II

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.

rphpacheco
Creator III
Creator III
Author

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.

nicolett_yuri

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

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!

matzenbacher
Creator II
Creator II

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

abs.

matzenbacher
Creator II
Creator II

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

          :

          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 ;

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 ;

aderlanrm
Partner - Specialist
Partner - Specialist

Dae Kaauan, um código "filé" desse e nenhuma resposta!

Coloca como resposta ai Raphael! Merece!

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
rphpacheco
Creator III
Creator III
Author

Desculpe aí rsrsrsrs...
A correria está grande e não estou acessando a comunidade já faz um tempinho
Abraços!!!

Not applicable

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 ?

matzenbacher
Creator II
Creator II

E ai Cleber,

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

abs.