Geolocalizar con CSharp y GoogleMaps
Hola comunidad!, de regreso aportando más material para que esto siga en crecimiento.
Ahora presentando un pequeño programita hecho en C# que nos sirve para geolocalizar direcciones mediante google maps.
El programa lo dividí en tres clases:
Geocodign.- Es la parte donde se hace el proceso de geolocalización
Point.- Clase para identificar nuestras direcciones a geolocalizar
Principal.- Es la clase principal del proyecto
La clase Geocodign
Esta clase cuenta con tres métodos (GetXml, GetData, ChangeUrl)
El método GetXml nos regresa los datos en formato XML y lo guarda en un archivo, el XML es lo que nos manda el googlemaps.
El método GetData nos regresa un Hashtable con los datos dirección (address), longitud (longitude), latitud (latitude). Estos datos los extraemos del arhivo XML que se guarda con el GetXml.
El método ChangeUrl lo utilizamos para reemplazar los espaciós en blanco de la dirección a geolocalizar, por ejemplo “dirección a geolocalizar” por “dirección%20a%20geolocalizar”.
Usings
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Xml; using System.Xml.XPath; using System.Windows.Forms; using System.Collections;
class Geocoding { private string fileName = "datosxml.xml"; public void GetXml(string address) { try { string url = String.Format("{0}", address); url = this.ChangeUrl(url); string lcUrl = String.Format("http://maps.google.com/maps/geo?q={0}&output=xml&sensor=true_or_false&key=your_api_key", url); HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(lcUrl); loHttp.Timeout = 30000; // 30 secs loHttp.UserAgent = "Code Sample Web Client"; HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse(); Encoding enc = Encoding.GetEncoding(1252); // Windows default Code Page StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc); string lcHtml = loResponseStream.ReadToEnd(); StreamWriter sw = new StreamWriter(fileName, false); sw.Write(lcHtml); sw.Close(); loWebResponse.Close(); loResponseStream.Close(); } catch (Exception ex) { MessageBox.Show("Error " + ex.Message, "Error"); } } public Hashtable GetData() { Hashtable data = new Hashtable(); XPathDocument doc = new XPathDocument(fileName); string namespaceUri = "http://earth.google.com/kml/2.0"; XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable()); XPathNavigator nav = doc.CreateNavigator(); ns.AddNamespace("bz", namespaceUri); string query = "bz:kml/bz:Response/bz:Placemark/bz:Point/bz:coordinates"; XPathNodeIterator iter = nav.Select(query, ns); string coordinates = (iter.MoveNext()) ? iter.Current.Value : ""; query = "bz:kml/bz:Response/bz:Placemark/bz:address"; iter = nav.Select(query, ns); string address = (iter.MoveNext()) ? iter.Current.Value : ""; string lon = ""; string lat = ""; if (coordinates.Split(',').Length == 3) { lon = coordinates.Split(',')[0].ToString(); lat = coordinates.Split(',')[1].ToString(); data.Add("longitude",lon); data.Add("latitude", lat); data.Add("address", address); } else { data.Add("longitude", lon); data.Add("latitude", lat); data.Add("address", address); } return data; } private string ChangeUrl(string address) { address = address.Replace("#", ""); address = address.Replace(" ", "%20"); return address; } }
La clase Point
Esta clase cuenta con los atributos Address, Longitude y Latitude con sus respectivos métodos get y set.
Usings
using System; using System.Collections.Generic; using System.Text;
class Point { private string longitude; private string latitude; private string address; public string Address { get { return this.address; } set { this.address = value; } } public string Longitude { get { return this.longitude; } set { this.longitude = value; } } public string Latitude { get { return this.latitude; } set { this.latitude = value; } } }
La clase Principal
Para nuestro caso la clase principal es la de nuestro formulario, donde tendremos dos textbox (txtaddress y txtdata), en el txtaddress pondremos la dirección a geolocalizar y en el txtdata obtendremos nuestros datos, también tendremos un boton (btngeocoding) con el cual daremos la acción para realizar la geolocalización.
El código del botón es el siguiente
Usings
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; using System.IO;
private void btngeocoding_Click(object sender, EventArgs e) { string address = this.txtaddress.Text; Geocoding geocodign = new Geocoding(); Point point = new Point(); geocodign.GetXml(address); Hashtable data = geocodign.GetData(); point.Address = data["address"].ToString(); point.Longitude = data["longitude"].ToString(); point.Latitude = data["latitude"].ToString(); this.txtdata.Clear(); this.txtdata.Text = String.Format("{0}Dirección= {1} \r\n", this.txtdata.Text, point.Address); this.txtdata.Text = String.Format("{0}Longitud= {1} \r\n", this.txtdata.Text, point.Longitude); this.txtdata.Text = String.Format("{0}Latitud= {1} \r\n", this.txtdata.Text, point.Latitude); }
Ejemplo:
Espero sea de grán ayuda! Dudas ó sugerencias, no duden en hacerlas llegar. Estamos para servir.. Saludos!
Quizá te interese :
Leer datos con Java Read from Console Standard Input with Java Si alguna vez, necesitaste leer ...
Tenemos un archivo XML con la siguiente estructura en la cual cada nodo <item> representa ...
Programa para realizar suma de polinomios con listas enlazadas. package com.ubicuos.main; im ...








Wow es la segunda pagina que visito y me quedo asombrado, directo a webs favoritas.
Excelente aporte, gracias
Podrias subir el exe de la aplicacion para ver como funciona, seria genial verlo funcionar
Interesante articulo el que has desarrollado, podrias depronto indicar como se puede visualizar el mapa de GoogleMaps si desearamos graficar el resultado?.
Muchas gracias por el aporte.
Claro que sí, trabajaremos en ello :)
?