Google Map - Reverse-Geocoder

Alguma vez, você já deve ter utilizado o serviço do Google Map como usuário, serviço tão útil que o Google disponibiliza algumas bibliotecas para integrar o Google Map em suas aplicações .NET, até aqui nada de novidade, e até na web existem vários artigos e exemplos de como consumir estas bibliotecas ou serviço do Google:

Veja alguns exemplos:

Google Maps Control for ASP.Net - Part I
http://www.c-sharpcorner.com/UploadFile/shabdarghata/google-maps-user-control-for-ASP-Net-part103232008234414PM/google-maps-user-control-for-ASP-Net-part1.aspx

Lat Lays Flat - Part 1 : A Google Maps .NET Control
http://www.codeproject.com/KB/custom-controls/LatLaysFlat-Part1.aspx

Os exemplos acima mostram uma aplicação web utilizando o Google map da seguinte forma: você passa o endereço para o serviço e ele redireciona você a imagem de referência no mapa, em que momento isso é útil, quando você quer visualizar o mapa de um endereço especifico. Bom mas como tem necessidades de deixar as coisas mais complexas, imagine a seguinte situação.

- Você precisa disponibilizar um mapa no site, o usuário escolhe (clica) em um ponto do mapa, e você captura o endereço (latitude e longitude) do ponto no gráfico selecionado. Como fazer isso ?

Simples, o Google também possui um serviço chamado reverse-geocoder, e este serviço simplesmente resolve o problema acima, ou seja você gera o mapa e consegue pegar latitude e longitude do ponto selecionado.

A url do service é: "http://maps.google.com/maps/geo?q="; e para implementar no seu código é simples, veja um exemplo de uma classe consumindo este serviço:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  using System.Web;
   5:  using System.Net;
   6:  using System.Web.UI; 
   7:   
   8:   
   9:  namespace GoogleGeocoder
  10:  {
  11:     public interface ISpatialCoordinate
  12:     {
  13:        decimal Latitude {get; set; } 
  14:        decimal Longitude {get; set; } 
  15:     }
  16:   
  17:     /// <summary>
  18:     /// Estrutura da Coordenada
  19:     /// </summary>
  20:     public struct Coordinate : ISpatialCoordinate
  21:     {
  22:        private decimal _latitude; 
  23:        private decimal _longitude;
  24:   
  25:        public Coordinate(decimal latitude, decimal longitude)
  26:        {
  27:           _latitude = latitude;
  28:           _longitude = longitude; 
  29:        }
  30:   
  31:        #region ISpatialCoordinate Members
  32:   
  33:        public decimal Latitude
  34:        {
  35:          get 
  36:          { 
  37:              return _latitude; 
  38:          }
  39:          set 
  40:          { 
  41:              this._latitude = value; 
  42:          }
  43:        }
  44:   
  45:        public decimal Longitude
  46:        {
  47:          get 
  48:          { 
  49:              return _longitude; 
  50:          }
  51:          set 
  52:          { 
  53:              this._longitude = value;
  54:          }
  55:        }
  56:   
  57:     #endregion
  58:     }
  59:   
  60:     public class Geocode
  61:     {
  62:        private const string _googleUri = "http://maps.google.com/maps/geo?q=";
  63:        private const string _googleKey = "yourkey";
             // Opções de exportação: csv, xml, kml, json
  64:        private const string _outputType = "csv"; 
  65:   
  66:        private static Uri GetGeocodeUri(string address)
  67:        {
  68:           address = HttpUtility.UrlEncode(address);
  69:           return new Uri(String.Format("{0}{1}&output={2}&key={3}", 
                _googleUri, address, _outputType, _googleKey));
  70:        }
  71:   
  72:        /// <summary>
  73:        /// Metodo para Pegar a Coordenada de um endereço
  74:        /// </summary>
  75:        /// <param name="address">Endereço
  76:        /// <remarks>
  77:        /// <example>Rua Libero Badaró , SP</example>
  78:        /// </remarks>
  79:        /// </param>
  80:        /// <returns>Latitude e longitude do endereço.</returns>
  81:        public static Coordinate GetCoordinates(string address)
  82:        {
  83:           WebClient client = new WebClient();
  84:           Uri uri = GetGeocodeUri(address);
  85:   
  86:   
  87:           string[] geocodeInfo = client.DownloadString(uri).Split(',');
  88:   
  89:           return new Coordinate(Convert.ToDecimal(geocodeInfo[2]), 
                Convert.ToDecimal(geocodeInfo[3]));
  90:        }
  91:   
  92:     }
  93:  }
  94:   

Mais exemplos sobre :

Reverse Geocoding Webservice

http://www.geonames.org/maps/reverse-geocoder.html

GeoNames .NET WCF Client

http://www.codeproject.com/KB/WCF/GeoNames-WCFClient.aspx

Eu também falei deste e de outros assuntos no meu blog -> http://nelsonborgesjr.spaces.live.com/blog/

[]´s

2 Responses to “Google Map - Reverse-Geocoder”

  1. Rhyhozy  on maio 24th, 2009

    Hi, nice posts there :-) thank’s for the interesting dirt

  2. Web Service  on maio 26th, 2009

    I checked the tile cache for similar navigation using the Google GMap2 object and get about 600 tiles. Web Service


Leave a Reply