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.

6 comentarios sobre “Capturar punto de google maps”

  1. Usando SQL Server 2008 con soporte para Spatial podrás calcular la distancia ya que hay métodos que te permiten calcularlo al usar estándares OGC (Opengis consortium).

    Podrías crearte un procedimiento almacenado para ello y obtener así las distancias.

    Revisa la API porque quizás puedas extraer las coordenadas de tus puntos y usar algún método de la misma API para el cálculo de distancias.

    En cuanto a almacenar el punto podrías usar lo mismo SQL Spatial o PostgreSQL y PostGIS.

    Todo dependerá de tus requisitos.

    Saludos.
    Francisco J.

  2. También deberás tener en cuenta para el cálculo de distancia que estás usando coordenadas geodésicas si no recuerdo mal, por lo que no usas datos proyectados, te lo comento por si tus puntos usan algún tipo de proyección (UTM ED50 o ETRS89 procedente de alguna cartografía oficial, UTM WGS84 obtenidas de GPS, etc.)

    Saludos.
    Francisco J.

  3. Gracias Francisco J, de hecho así es como lo hago en la segunda parte del ejemplo. Muestra como crear un procedimiento almacenado sencillo para insertar puntos y calcular distancias a otros datos.

  4. Vaya siempre es bueno encontrar compañeros que tengan las mismas aficiones o trabajo 🙂

    Si te surge algo te dejo mi contacto aunque en SQL Spatial no estoy muy puesto porque llevo poco tiempo pero cualquier cosilla de OGC y demás para lo que necesites.

    Saludos.
    Francisco J.

  5. Hola yo estoy haciendo algo parecido pero quisiera saber si una vez guardados todos los puntos de mis usuarios en una base de datos, en Sql Server, por ejemplo puedo crear una función que me permita graficarlos todos los puntos en el mapa, sin necesidad de usar el Api de Google Map? es decir enviar los puntos desde mi aplicación para que interactuen con mi Web Browser

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *