Capturar punto de google maps

A veces uno se encuentra con pequeños problemas que deberían de ser sencillos. Este fue el caso de cuando me propuse realizar una interfaz para una aplicación windows donde el usuario pudiese elegir cual era su localización en un mapa de google maps y calcular la distancia a uno de nuestros almacenes. La opción buena sería utilizar la api de google maps para estas tareas, pero quiero algo más sencillo, que funcione sin tener que instalar nada a mayores.

Primer inconveniente, ¿de donde saco las coordenadas del usuario? Googleando un poco encontré un sencillo script que comparten muchos sitios. Basta con introducir en la barra de direcciones el script java_script:void(prompt(»,gApplication.getMap().getCenter()))  y nos aparecerá un mensaje con la latitud y longitud.

Segundo problema, ¿como recojo esto en mi código? Bueno, pues básicamente el truco está en utilizar ese resultado no para sacarlo en un prompt, si no para redirijir la página del webbrowser en donde está cargado google maps. De esta forma en el evento navigating puedo analizar la dirección a la que intento navegar, cancelarla y conseguir las coordenadas. 

El siguiente ejemplo   hace precisamente eso, en un formulario donde unicamente se ha agregado un webBrowser (webBrowser1) y un botón (button1):

        private void Form2_Load(object sender, EventArgs e)

        {

            webBrowser1.Url = new Uri(«http://maps.google.es»);

        }

        private void button1_Click(object sender, EventArgs e)

        {

            webBrowser1.Navigate(«java_script:navigate(‘» + clave + «‘+gApplication.getMap().getCenter())»);

        }

 

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)

        {

            string aux = e.Url.ToString();

 

            if (aux.StartsWith(«http://maps.google.es/»+clave))

            {//Navegación iniciada por nuestro código javascript               

                PointF direccion;

                aux = aux.Substring((«http://maps.google.es/»+clave).Length);//Eliminamos la url incial, quedándonos solo con el punto

 

                aux= aux.Replace(«(«, «»).Replace(«)»,«»); //Eliminamos los paréntesis

                string[] punto=aux.Split(‘,’);//Dividimos el texto en las dos coordenadas

                direccion = new PointF(                

                    float.Parse(punto[0].Replace(«.», «,»)),

                    float.Parse(punto[1].Replace(«.», «,»))); //Parseamos las dos coordenadas al punto resultado

 

                e.Cancel = true; //Cancelamos la navegación, la página resultante no es válida.

 

                //Ya tenemos el punto, podemos hacer lo que queramos con él!!! 

                MessageBox.Show(direccion.ToString());

            }

        }

 Para completar el ejemplo falta la parte de ¿que hago ahora con el punto? y ¿como encuentro la distancia a mis almacenes registrados en Sql Server?.

Queda pendiente para el siguiente post…

 Nota: substituir java_script por el equivalente sin guión bajo para que funcione el código.