- Olá Pessoal,
Hoje foi explicar pra vocês como recuperar a latitude e longitude de um endereço qualquer utilizando o Google Maps Api.
O código é bastante simples de ser utilizado e você precisará apenas de uma API KEY do Google Maps para poder utiliza-lo, mas que pode ser gerada gratuitamente e exclusivamente para seu site neste endereço: http://code.google.com/apis/maps/signup.html
O Google facilitou bastante para nós, permitindo que seja gerado um conteúdo no formato XML ou JSON (padrão) e que possa ser lido facilmente por qualquer linguagem de programação. No nosso caso, vamos utilizar o PHP.
O seguinte código simplesmente invoca uma URL específica do Google Maps para retornar os dados completos de um determinado endereço passado na URL.
Veja:
<?
$tipo_output = "xml"; // pode ser utilizado o json também
// a sua API KEY do Google Maps gerado com o link acima
$google_api = "MAPS_API_KEY";
// o endereço que desejamos que o google procure
// lembrando que o endereço tem que ser no padrão de uma requisição URL e caso possua acentuação, vamos executar um utf8_encode
$endereco_desejado = urlencode(utf8_encode("João Pessoa, PB"));
// Desired address
$endereco_final = "http://maps.google.com/maps/geo?q=". $endereco_desejado ."&output=". $tipo_output ."&key=$google_api";
// conteudo da página
echo file_get_contents($endereco_final);
?>
O resultado deste script é o seguinte:
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0"><Response>
<name>João Pessoa, PB</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>João Pessoa - Paraíba, Brazil</address>
<AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>BR</CountryNameCode><CountryName>Brasil</CountryName><AdministrativeArea><AdministrativeAreaName>PB</AdministrativeAreaName><Locality><LocalityName>João Pessoa</LocalityName></Locality></AdministrativeArea></Country></AddressDetails>
<ExtendedData>
<LatLonBox north="-7.0267350" south="-7.2038879" east="-34.7329918" west="-34.9891106" />
</ExtendedData>
<Point><coordinates>-34.8610512,-7.1153200,0</coordinates></Point>
</Placemark>
</Response></kml>
Agora, podemos melhorar nosso script convertendo o resultado em um objeto XML que possa ser lido facilmente pelo seu script PHP. Neste caso vamos utilizar a classe SimpleXMLElement.
<?php
$tipo_output = "xml"; // pode ser utilizado o json também
// a sua API KEY do Google Maps gerado com o link acima
$google_api = "MAPS_API_KEY";
// o endereço que desejamos que o google procure
// lembrando que o endereço tem que ser no padrão de uma requisição URL e caso possua acentuação, vamos executar um utf8_encode
$endereco_desejado = urlencode(utf8_encode("João Pessoa, PB"));
// Desired address
$endereco_final = "http://maps.google.com/maps/geo?q=". $endereco_desejado ."&output=". $tipo_output ."&key=$google_api";
// conteudo da página
$page = file_get_contents($endereco_final);
// criando um objeto a partir do conteudo da página
$xml = new SimpleXMLElement($page);
// retornando apenas os dados de longitude e latitude
echo $xml->Response->Placemark->Point->coordinates;
?>
O resultado de nosso scritp é:
34.8610512,-7.1153200,0
Podemos melhorar ainda mais o nosso script criando variáveis mais simples de serem utilizadas. Adicione o seguinte código ao seu script:
<?
list($longitude, $latitude, $altitude) = explode(",", $xml->Response->Placemark->Point->coordinates);
echo "Longitude: " . $longitude . " <br /> ";
echo "Latitude: " . $latitude . " <br /> ";
?>
Pronto. Agora podemos utilizar nosso script para capturar dados mais completos de um endereço e quem sabe criar um mini GPS :P
Até mais pessoal!
PS: Conteúdo de autoria do Código Fonte, compartilhando apenas para ajudar da vida no Fórum que já faz anos que não tem tópicos de tutorial.