Algo que he notado estos días es que los sistemas de información geográfica (SIG) han tenido un auge impresionante, mas aún si les sumamos esa parte de los dispositivos móviles con GPS, así que pasó por mi cabeza hacer una serie de 5 artículos para poder explotar una parte pequeña de estos.
Los artículos quedarán divididos de la siguiente manera
1.- Usar bing maps en Silverlight 4 (es este mismo artículo).
2.- Implementar un servicio web ASP dentro de mi aplicación Silverlight
3.- Publicar mi aplicación web
4.- Crear un servicio WCF para obtener datos
5.- Consumir el servicio WCF desde Windows Phone 7
Así que comenzaré con la primera parte, la de usar el mapa de Bing dentro de una aplicación silverlight.
Lo primero que debes hacer es obtener una “Llave de la API ” de Bing maps para poder desarrollar desde ahí, esto lo haces de forma gratuita entrando al siguiente sitio.
http://www.microsoft.com/maps/developers/web.aspx
No es gran ciencia en el “Paso 2” te guían para obtenerla, el resultado es una cadena algo larga, mas o menos como esto (aclaro que no es una API Key real).
Ajtc9aQoW_fIE-ijLj_wmEnUvIhpmQ6yQVRdiKlKzjvLKsL0yL3hxIEm0oe9x498
Bueno ya que tienes tu llave, entra a esta página y guárdala en tus favoritos, es muy necesaria para futuras referencias, por ahora solo checa el ejemplo que esta en la imagen que es el que usaremos
Ya que tienes este ejemplo (no me detengo a explicártelo mucho pues viene bien explicado ahí, pero si te trabas baja el código con lo hecho desde aquí.
Bien, ahora usando la herramienta que mas te guste para la interfaz, crea un cuadro con los siguientes elementos de forma que te quede como se ve en la siguiente imagen (yo usaré Blend, me acomodo mucho mas ahí).
Bien, ahora le daremos funcionalidad al botón de “Seleccionar Imagen” que nos permitirá desplegar una imagen y poder verla como vista previa en la parte reservada para ello.
private void btnImagen_Click(object sender, System.Windows.RoutedEventArgs e) { byte[] arreglo; OpenFileDialog dialogo = new OpenFileDialog(); dialogo.Multiselect = false; dialogo.Filter = "jpg (*.jpg)|*.jpg"; dialogo.FilterIndex = 1; bool? userClickedOK = dialogo.ShowDialog(); if (userClickedOK == true) { if (dialogo.File.Length < 1048576) { System.IO.Stream archivo = dialogo.File.OpenRead(); arreglo = new byte[archivo.Length]; archivo.Read(arreglo, 0, (int)archivo.Length); BitmapImage imagenPrevia = new BitmapImage(); imagenPrevia.SetSource(archivo); imgMuestra.Source = imagenPrevia; archivo.Close(); } else { MessageBox.Show("El tamaño máximo del archivo es de 1 MB"); } } } |
Lo que harás es sencillo, por medio de un OpenFileDialog vas a obtener una imagen, esta se almacenará en un Stream, este a su vez llenará el arreglo de tipo byte[], para que al final por medio de un BitmapImage, se pueda desplegar en la imagen (aclaro que incluí la declaración del arreglo adentro de la función, pero para la siguiente entrada deberás sacarla de ahí).
Después de eso regresamos al control de mapa (no olvides ponerle primero un nombre) y vamos a usar su evento «Map_MouseLeftButtonDown» para usarlo de la siguiente forma.
private void Map_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point puntoUbicado = e.GetPosition(mapa); Location ubicacion; if (mapa.TryViewportPointToLocation(puntoUbicado, out ubicacion)) { txtLatitud.Text = Math.Round(ubicacion.Latitude, 5).ToString(); txtLongitud.Text = Math.Round(ubicacion.Longitude, 5).ToString(); } } |
Ok, lo que aquí estás haciendo es que atrapas la posición del mouse en tu mapa por medio del MapPoint y después los pasas a un objeto de tipo Location, ya que tienes los valores, obtienes la latitud y longitud, pero como estas son muy largas puedes redondearlas a 5 (menos digitos pueden hacer estos valores un poco precisos).
Parte 2: Implementar un servicio web ASP dentro de mi aplicación Silverlight
6 comentarios en «Un pequeño Sistema de Información Geográfica»