o servico permite que voce realize a operacao inversa (transformar coordenadas em enderecos); esse processo e conhecido como "geocodificacao reversa"."Uma solitacao de geocoding deve ter basicamente os seguinte formato:http://maps.googleapis.com/maps/api/geocode/output?parametersonde output significa o formato do retorno dos dados, que pode ser json(recomendavel) ou xml.Alem disso sao obrigatorios os parametros:address o endereco que voce deseja geocodificaroulatlng o valor textual de latitude/longitude para o qual voce deseja obter o endereco mais proximo.sensor indica se a solicitacao de geocodificacao vem ou nao de um dispositivo com sensor de localizacao. Esse valor deve ser true ou false.A resposta da requisicao contem dois elementos raiz:status - contem metadados sobre a solicitacao. Consulte os Codigos de status no site.results - contem uma matriz de informacoes de enderecos geocodificados e informacoes geometricas.Eu implementei uma biblioteca bem simples que suporta os dois formatos de resposta: json e xml. Para interpretar o resultando em json, utilizei a biblioteca lkjson, pois, ja tinha utilizado a mesma em outros projetos e achei bastante simples de usar, mais existem outras opcoes como o SuperObject e Delphi Web Utils.Para interpretar o formato xml optei por utilizar o Xml Data Binding do delphi, que atraves de um wizard cria classes tipadas a partir do arquivos xml, deixando todo o processo de transformacao transparente.Basicamente o que fiz foi o seguinte, efetuei uma requisicao no servico de geocodificacao no formato xml e salvei os dados retornados em um arquivo xml. Em seguida, utilizei o Xml Data Binding para transformar esse xml em classes. Essas classes sao o resultado final da solicitacao, seja ela em json ou xml.Quando a requisicao e no formato xml, e utilizado o binding do XmlDocument:class function TGoogleApiGeoXml.XmlToGeocodeResponse(const AXmlText: String): IGeocodeResponse;var vXmlDocument: IXMLDocument;begin vXmlDocument := TXMLDocument.Create(nil); vXmlDocument.LoadFromXml(UTF8Encode(AXmlText)); Result := vXmlDocument.GetDocBinding('GeocodeResponse', TGeocodeResponse) as IGeocodeResponse;end;Quando a requisicao e no formato json, escrevi o parser "na unha", que retorna o mesmo tipo de objeto da solicitacao em xml, deixando a aplicacao que consome o servico utilizar o mesmo sem se importar se e xml ou json.function TGoogleApiGeoJson.ConvertFromJson(const AJsonText: String): IGeocodeResponse;var vJsonResponse: TlkJSONobject; vResults: TlkJSONbase;begin Result := TGeocodeResponse.NewGeocodeResponse; vJsonResponse := TlkJSONobject(TlkJSON.ParseText(UTF8Encode(AJsonText))); try vResults := TlkJSONlist(TlkJSONlist(vJsonResponse.Field['results']).Field['address_components']).Items[0]; ParseStatus(Result, vJsonResponse); ParseType(Result, vResults); ParseFormattedAddress(Result, vResults); ParseAddresses(Result, vResults); ParseGeometry(Result, vResults); finally vJsonResponse.Free; end;end;Na sistema em si, o unico codigo que ele precisa executar e esse:var vResponse: IGeocodeResponse;begin vResponse := TGoogleApiGeocodeDownload.GetGeocode("http://maps.googleapis.com/maps/api/geocode/json_ou_xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_ou_false"); //Logica que utiliza a resposta da solicitacaoO implementacao do metodo GetGeocode e bastante simples tambem, ele faz uma requisicao HTTP utilizando indy conforme abaixoclass function TGoogleApiGeocodeDownload.HttpGet(Url: String): String;var lHTTP: TIdHTTP; lStream: TStringStream;begin lHTTP := TIdHTTP.Create(nil); lStream := TStringStream.Create(EmptyStr); try lHTTP.Get(Url, lStream); lStream.Position := 0; Result := UTF8Decode(lStream.DataString); finally FreeAndNil(lHTTP); FreeAndNil(lStream); end;end;E de acordo com o formato dos dados faz uma chamada ao parser correspondente para retornar o objeto.class function TGoogleApiGeocodeDownload.GetGeocode(AUrl: String): IGeocodeResponse;var vDados: String; vFormato: TOutputFormat;begin vFormato := DiscoverFormat(AUrl); vDados := HttpGet(AUrl); case vFormato of Json: Result := TGoogleApiGeoJson.JsonToGeocodeResponse(vDados); Xml : Result := TGoogleApiGeoXml.XmlToGeocodeResponse(vDados); end;end;Mais informacoes sobre limitacoes de uso e sobre os parametros utilizados na requisicao HTTP podem ser encontrados aqui.O codigo fonte completo com exemplo de como utilizar pode ser acessado aqui no meu bitbucket.Um abraco e fique ligado nos proximos posts.