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:
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:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Net;
using System.Web.UI;
namespace GoogleGeocoder
{
public interface ISpatialCoordinate
{
decimal Latitude {get; set; }
decimal Longitude {get; set; }
}
///
/// Estrutura da Coordenada
///
public struct Coordinate : ISpatialCoordinate
{
private decimal _latitude;
private decimal _longitude;
public Coordinate(decimal latitude, decimal longitude)
{
_latitude = latitude;
_longitude = longitude;
}
#region ISpatialCoordinate Members
public decimal Latitude
{
get
{
return _latitude;
}
set
{
this._latitude = value;
}
}
public decimal Longitude
{
get
{
return _longitude;
}
set
{
this._longitude = value;
}
}
#endregion
}
public class Geocode
{
private const string _googleUri = "http://maps.google.com/maps/geo?q=";
private const string _googleKey = "yourkey";
private const string _outputType = "csv"; // Opções de exportação: csv, xml, kml, json
private static Uri GetGeocodeUri(string address)
{
address = HttpUtility.UrlEncode(address);
return new Uri(String.Format("{0}{1}&output={2}&key={3}", _googleUri, address, _outputType, _googleKey));
}
///
/// Metodo para Pegar a Coordenada de um endereço
///
/// Endereço
///
/// Rua Libero Badaró , SP
///
///
/// Latitude e longitude do endereço.
public static Coordinate GetCoordinates(string address)
{
WebClient client = new WebClient();
Uri uri = GetGeocodeUri(address);
string[] geocodeInfo = client.DownloadString(uri).Split(',');
return new Coordinate(Convert.ToDecimal(geocodeInfo[2]), Convert.ToDecimal(geocodeInfo[3]));
}
}
}