Skip to content

Instantly share code, notes, and snippets.

@diego-lipinski-de-castro
Created April 6, 2021 20:04
Show Gist options
  • Save diego-lipinski-de-castro/49bcd2f895c8307be2272750e1974ae3 to your computer and use it in GitHub Desktop.
Save diego-lipinski-de-castro/49bcd2f895c8307be2272750e1974ae3 to your computer and use it in GitHub Desktop.
Google maps address checking
//----- Métodos para o autocomplete -----//
function validarEnderecoDoGeocode(status, results, validarPorBairro) {
var enderecoValido = false;
var enderecoValidoPorBairro = false;
if (status == 'OK') {
for (var i = 0; i < results[0].address_components.length; i++) {
for (var j = 0; j < results[0].address_components[i].types.length; j++) {
if (results[0].address_components[i].types[j] == 'route') {
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'establishment') {
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'point_of_interest') {
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'vicinity') {
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'premise') {
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'administrative_area_level_1') {
if (results[0].address_components[i].long_name == "Distrito Federal") {
enderecoValido = true;
break;
}
}
if (validarPorBairro) {
if (results[0].address_components[i].types[j] == 'locality') {
enderecoValidoPorBairro = true;
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'sublocality') {
enderecoValidoPorBairro = true;
enderecoValido = true;
break;
}
if (results[0].address_components[i].types[j] == 'neighborhood') {
enderecoValidoPorBairro = true;
enderecoValido = true;
break;
}
}
} //Fim for
if (enderecoValido) {
break;
}
} //Fim for
}
return {enderecoValido: enderecoValido, enderecoValidoPorBairro: enderecoValidoPorBairro};
}
function retornarAtributosDoEnderecoDoGeocode(results, enderecoValidoPorBairro) {
var numero = null;
var rua = null;
var superQuadra = null;
var bairro = null;
var cidade = null;
var estado_short = null;
var estado_long = null;
var pais = null;
var cep = null;
var observacao = null; //Esperar o Google terminar de fazer a implementação dos locais (como em point_of_intrest e [])
var latDoLocal = null;
var lngDoLocal = null;
var numeroDoBloco = 0;
var enderecoAux = null;
var enderecoCompleto = null;
while (numeroDoBloco < results.length) {
latDoLocal = results[numeroDoBloco].geometry.location.lat;
lngDoLocal = results[numeroDoBloco].geometry.location.lng;
for (var i = 0; i < results[numeroDoBloco].address_components.length; i++) { //Preencher as informações nas variaveis
for (var j = 0; j < results[numeroDoBloco].address_components[i].types.length; j++) { //Percorrendo todos os tipos de endereço
switch (results[numeroDoBloco].address_components[i].types[j]) { //Checagem do tipo de endereço e passando os valores
case 'street_number':
if (!numero) {
numero = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'route':
if (results[numeroDoBloco].address_components[i].long_name != "Unnamed Road") { //Se a rua for diferente de "sem nome" então ela é uma rota válida
rua = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'sublocality_level_5': //Especial de Brasília
if (!rua) {
rua = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'sublocality_level_3': //Especial de Brasília
if (!bairro) {
bairro = results[numeroDoBloco].address_components[i].short_name;
}
break;
case 'sublocality_level_1':
if (!bairro) {
bairro = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'neighborhood':
if (!bairro) {
bairro = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'administrative_area_level_4': //Especial de Brasília
if (!superQuadra) {
superQuadra = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'administrative_area_level_3': //Caso especial da Inglaterra, serve para recuperar os seus distritos. Testar no futuro com outros países, não consegui achar nenhum uso de administrative_area_3 convincente
if (!bairro) {
bairro = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'locality': //Portugal tem um caso a mais que pode acarretar em algmas falhas na hora de montar o endereço
if (!cidade) {
cidade = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'administrative_area_level_2':
if (!cidade) {
cidade = results[numeroDoBloco].address_components[i].long_name;
}
break;
case 'administrative_area_level_1':
estado_short = results[numeroDoBloco].address_components[i].short_name;
estado_long = results[numeroDoBloco].address_components[i].long_name;
break;
case 'postal_code':
cep = results[numeroDoBloco].address_components[i].long_name;
break;
case 'country':
pais = results[numeroDoBloco].address_components[i].long_name;
break;
case 'point_of_interest':
observacao = results[numeroDoBloco].address_components[i].long_name;
break;
case 'vicinity':
observacao = results[numeroDoBloco].address_components[i].long_name;
break;
case 'premise':
observacao = results[numeroDoBloco].address_components[i].long_name;
break;
}
}
}
break; // só processa o primeiro grupo
numeroDoBloco++;
}
if (!bairro) {
bairro = cidade;
}
enderecoAux = results[0].formatted_address;
enderecoAux = removeBloco(enderecoAux, pais);
enderecoAux = removeBloco(enderecoAux, cep);
if (removeBloco(enderecoAux, estado_short) == enderecoAux) {
enderecoAux = removeBloco(enderecoAux, estado_long);
} else {
enderecoAux = removeBloco(enderecoAux, estado_short);
}
enderecoAux = removeLixo(enderecoAux);
enderecoCompleto = enderecoAux;
if (!enderecoValidoPorBairro) {
enderecoAux = removeBloco(enderecoAux, bairro);
}
enderecoAux = removeBloco(enderecoAux, superQuadra);
enderecoAux = removeBloco(enderecoAux, cidade);
enderecoAux = removeLixo(enderecoAux);
console.log("enderecoAux = " + enderecoAux);
return {
bairro: bairro,
cidade: cidade,
estado_short: estado_short,
enderecoCompleto: enderecoCompleto,
endereco: enderecoAux
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment