No artigo de hoje, vamos demonstrar em como buscar coordenadas de um ponto geográfico através de integrações com o Google Maps e Bing Maps.
Você já precisou de alguma forma, saber o ponto em latitude e longitude de um lugar? Vamos demonstrar 3 formas de como fazer isso via AdvPL.
Forma 1 – Usando a função TECGtCoord
Essa função, é disponível para quem utiliza o SIGATEC. Para utilizá-la é bem simples, onde você passa qual é o endereço, a cidade, o estado e o número de tentativas.
Será retornado um Array, onde a posição 1 será a latitude e a posição 2 será a longitude.
Abaixo um exemplo:
//Variáveis base cEndereco := "Rua Gustavo Maciel" cCidade := "Bauru" cEstado := "SP" //Aciona a função para buscar a latitude e longitude aCoord := TECGtCoord(cEndereco, cCidade, cEstado, nTentativ) //Se conseguiu buscar a latitude e longitude If ! Empty(aCoord[1]) .And. ! Empty(aCoord[2]) cLatitude := aCoord[1] cLongitude := aCoord[2] //Ai aqui, você consegue usar essas variáveis EndIf
Forma 2 – Usando integração com o Google Maps
Para usar a integração com o Google Maps, primeiro é necessário você criar uma conta corporativa e solicitar um Token de aplicativo.
Feito isso, você consegue fazer a requisição, conforme exemplo abaixo:
//Variáveis base cEndereco := "Rua Gustavo Maciel" cCEP := "17010180" cCidade := "Bauru" cEstado := "SP" cAppKey := "XxXxXxXxXx" //Colocar seu Token aqui //Monta o endereço completo cEndCompl := cEndereco + " CEP " + cCep + " " + cCidade + " " + cEstado cEndCompl := Escape(cEndCompl) //Faz a busca do endereço no Google cJson := HttpGet('https://maps.googleapis.com/maps/api/geocode/json?address=' + cEndCompl + '&key=' + cAppKey) //Transforma em um objeto JSON jDados := JsonObject():New() cError := jDados:FromJson(cJson) //Se não houve nenhum erro If Empty(cError) aResults := jDados:GetJsonObject("results") //Se tiver dados no Array If Type("aResults") == "A" .And. Len(aResults) > 0 //Pega a informação de geometria jGeomet := aResults[1]:GetJsonObject("geometry") //Depois pega a localização jLocat := jGeomet:GetJsonObject("location") //Ai por último busca a latitude e longitude nLatitude := jLocat:GetJsonObject("lat") nLongitude := jLocat:GetJsonObject("lng") EndIf EndIf
Abaixo um print da requisição do Google Maps via navegador:
Forma 3 – Usando integração com o Bing Maps
Para usar a integração com o Bing Maps, é similar ao Google Maps, onde você precisa criar um token para depois usar na integração.
Feito isso, você consegue fazer a requisição, conforme exemplo abaixo:
//Variáveis base cEndereco := "Rua Gustavo Maciel" cCEP := "17010180" cCidade := "Bauru" cEstado := "SP" cAppKey := "XxXxXxXxXx" //Colocar seu Token aqui //Monta o endereço completo cEndCompl := cEndereco + " CEP " + cCep + " " + cCidade + " " + cEstado cEndCompl := Escape(cEndCompl) //Faz a busca do endereço no Google cJson := HttpGet('http://dev.virtualearth.net/REST/v1/Locations/' + cEndCompl + '?key=' + cAppKey) //Transforma em um objeto JSON jDados := JsonObject():New() cError := jDados:FromJson(cJson) //Se não houve nenhum erro If Empty(cError) aResources := jDados:GetJsonObject("resourceSets") //Se tiver as informações, busca o ponto e as coordenadas If Type("aResources[1]['resources'][1]") != "U" jPonto := aResources[1]['resources'][1]:GetJsonObject("point") aCoord := jPonto:GetJsonObject("coordinates") //Se for um Array, pega a latitude e longitude If Type("aCoord") == "A" nLatitude := aCoord[1] nLongitude := aCoord[2] //Ai aqui, você consegue usar essas variáveis EndIf EndIf EndIf
Abaixo um print da requisição do Bing Maps via navegador:
Bom pessoal, por hoje é só.
Abraços e até a próxima.