Developer's Diary

2 julio, 2010

Bing Maps Api

Filed under: .net, Awesome, Internet, Programación — 3nk1 @ 12:37 AM

Ante todo, perdón por la falta de actualización en el blog, pero he estado relativamente liado estas semanas atrás.

Hace unas semanas, publique está entrada donde comentaba la potencia que pueden tener los web services, All in the Web Cloud…

La verdad que su uso me impresiono bastante, yo anteriormente había podido usar la capacidad de google maps en mis proyectos, sin embargo, me quejaba en parte de la escasez de potencia que tenía en el uso dentro de .Net. Buscando por la red me tope con un ejemplo de uso de unos servicios web de Bing Maps, la contrapartida de google maps hecha por Microsoft.

Como ya indicaba en el anterior post, con un simple agregado de referencia tenemos dentro de nuestro proyecto un potencial añadido relacionado con el mapeado. Entre estos encontramos:

– Geocode

– Reverse Geocode

– Búsqueda

– GeoImagery

– Ruta

Estas funciones pueden resultarnos bastantes útiles en todo tipo de proyectos en los cuales necesitamos del uso de coordenadas GPS o acceso a mapas. Al tratarse de un servicio web, la integración es completa, podemos usarlo en cualquier tipo de proyecto, ya sea de Móvil, Escritorio o Web. Siempre y cuando tengamos acceso a una conexión de internet.

Para comenzar a usar alguno de estos servicios, solo tenemos que obtener una Key de registro y evidentemente, tener al menos Visual Studio 2008 instalado.

Para obtener una key solo tenemos que acceder a la siguiente página. Desde ahí solo tenemos que identificarnos con nuestra cuenta de Windows Live y posteriormente rellenar un formulario de registro, donde indicaremos para que vamos a usar la Api. Con una cuenta podremos registrar un total de cinco keys, que pueden ser registradas a distintas ip’s si la usaramos para páginas webs.

Cuando vayamos a instanciar un objeto de las acciones que hagamos con Bing, tendremos también que identificarlo con la key en cuestión, para poder hacer uso de él y no sufrir una excepción.

Después de registrar nuestra key para Bing, vamos a comenzar a consumir los servicios web que comentábamos antes. Nos dirigimos a Visual Studio 2008 y abrimos un nuevo proyecto, solo tendremos que agregar un nuevo servicio web e introducir el servicio que vayamos a usar.

La tabla con la referencia que debemos incluir y distintos ejemplos se encuentra aquí. Estos ejemplos se encuentran en ingles, pero son muy sencillos de entender.

De todas formas cree una clase que incluye los servicios de Geocode, ReverseGeocode e Imagen, los que para mí resultan de mayor utilidad.  También sería útil el de ruta, si no fuese, debido a que Bing Maps, aunque no se encuentra lo suficientemente optimizado para la Península Ibérica.

Dejo pegado el código de la clase, además de que podeis descargarla de aquí.

Saludos!!!

PD: Espero tener una mayor frecuencia de actualización a partir de ahora, pronto traere nuevas sorpresas.

Código de la clase

Public Class BingService

#Region “Estructuras”
Structure Coordenadas

Sub New(ByVal lat As String, ByVal lon As String)
_lat = lat
_long = lon
End Sub

Private _lat As String
Private _long As String

Public ReadOnly Property Latitud() As String
Get
Return _lat
End Get
End Property

Public ReadOnly Property Longitud() As String
Get
Return _long
End Get
End Property
End Structure
#End Region

#Region “Campos”
”’ <summary>
”’ La clave que debemos tomar para acceder bing maps.
”’ </summary>
”’ <remarks></remarks>
Private _key As String
#End Region

#Region “Propiedades”
Public ReadOnly Property Key() As String
Get
Return _key
End Get
End Property
#End Region

#Region “Constructores”

Sub New(ByVal key As String)
_key = key
End Sub

#End Region

#Region “Geocode”

#Region “Campos”
Private Geo As New Geocode.GeocodeRequest
Private Filtro(0) As Geocode.ConfidenceFilter
Private Opciones As New Geocode.GeocodeOptions
Private Cliente As Geocode.GeocodeServiceClient
Private Respuesta As Geocode.GeocodeResponse

Private Init_Geo As Boolean = False
#End Region

#Region “Metodos”
Private Sub Init_Geocode()
Geo.Credentials = New Geocode.Credentials
Geo.Credentials.ApplicationId = _key

Filtro(0) = New Geocode.ConfidenceFilter
Filtro(0).MinimumConfidence = Geocode.Confidence.High

Opciones.Filters = Filtro
Geo.Options = Opciones

End Sub

Private Function Do_Geocode(ByVal Direccion As String) As Coordenadas
Cliente = New Geocode.GeocodeServiceClient
Respuesta = Cliente.Geocode(Geo)

If (Respuesta.Results.Length > 0) Then
Return New Coordenadas(Respuesta.Results(0).Locations(0).Latitude, Respuesta.Results(0).Locations(0).Longitude)
Else
Return Nothing
End If
End Function
#End Region

#End Region

#Region “ReverseGeocode”

#Region “Campos”
‘Se varios campos de los usuarios.
Private Rever_Geo As Geocode.ReverseGeocodeRequest
Private Localizacion As New Geocode.Location
Private Init_Revers As Boolean = False
#End Region

#Region “Metodos”
Private Sub Init_Reverse()
Geo.Credentials = New Geocode.Credentials
Geo.Credentials.ApplicationId = Key

Init_Revers = True
End Sub

Private Function Do_Reverse(ByVal Latitud As String, ByVal Longitud As String) As String
Localizacion.Latitude = Latitud
Localizacion.Longitude = Longitud
Rever_Geo.Location = Localizacion
Respuesta = Cliente.ReverseGeocode(Rever_Geo)
If (Respuesta.Results.Length > 0) Then
Return Respuesta.Results(0).DisplayName
Else
Return Nothing
End If
End Function

Private Function Do_Reverse(ByVal Coord As Coordenadas) As String
Return Do_Reverse(Coord.Latitud, Coord.Longitud)
End Function
#End Region

#End Region

#Region “Imagenes”

#Region “Campos”
Private Map As New GeoImagen.MapUriRequest
Private Centro As New GeoImagen.Location
Private Imagen_Opciones As New GeoImagen.MapUriOptions
Private Imagen_Cliente As New GeoImagen.ImageryServiceClient
Private Imagen_Respuesta As GeoImagen.MapUriResponse

‘Creación del mapa
Private Solicitudweb As System.Net.HttpWebRequest
Private Respuestaweb As System.Net.HttpWebResponse
Private Stream As IO.Stream

Private Init_Ima As Boolean = False
Private _Alto As Integer = 256 ‘Por defecto un tile
Private _Ancho As Integer = 256 ‘Por defecto un tile
Private _Zoom As Integer = 15
#End Region

#Region “Métodos”

Private Sub Init_Imagen()
Map.Credentials = New GeoImagen.Credentials
Map.Credentials.ApplicationId = _key

Imagen_Opciones.Style = GeoImagen.MapStyle.Aerial
Imagen_Opciones.ZoomLevel = _Zoom
Imagen_Opciones.ImageSize = New GeoImagen.SizeOfint
Imagen_Opciones.ImageSize.Height = _Alto
Imagen_Opciones.ImageSize.Width = _Ancho

Init_Ima = True
End Sub

Private Sub Cambio(ByVal Alto As Integer, ByVal Ancho As Integer, ByVal Zoom As Integer)
_Alto = Alto
_Ancho = Ancho
_Zoom = Zoom
End Sub

Private Function Catch_Bitmap(ByVal uri As String) As Bitmap
Solicitudweb = CType(System.Net.WebRequest.Create(uri), System.Net.HttpWebRequest)
Respuestaweb = CType(Solicitudweb.GetResponse, System.Net.HttpWebResponse)
Stream = Respuestaweb.GetResponseStream
Return System.Drawing.Image.FromStream(Stream)
End Function

Public Function Get_Imagen(ByVal Latitud As String, ByVal Longitud As String) As Bitmap
Dim uri As String = Get_Uri(Latitud, Longitud)
Return Catch_Bitmap(uri)
End Function

Public Function Get_Uri(ByVal Latitud As String, ByVal Longitud As String) As String
Centro.Latitude = Latitud
Centro.Longitude = Longitud
Map.Center = Centro
Imagen_Respuesta = Imagen_Cliente.GetMapUri(Map)
Return Imagen_Respuesta.Uri
End Function

Public Function Get_Imagen(ByVal Coor As Coordenadas) As Bitmap
Return Get_Imagen(Coor.Latitud, Coor.Longitud)
End Function

Public Function Get_Uri(ByVal Coor As Coordenadas) As String
Return Get_Uri(Coor.Latitud, Coor.Longitud)
End Function
#End Region

#End Region

#Region “Busqueda”

#Region “Campos”
Private Busqueda As New Search.SearchRequest
Private Query_Search As New Search.StructuredSearchQuery
Private Filtro_Search As New Search.FilterExpression
Private Cliente_Busqueda As New Search.SearchServiceClient
Private Respuesta_Busqueda As New Search.SearchResponse

Private Init_Busqueda As Boolean = False
#End Region

#Region “Métodos”

Private Sub Init_Search()
Busqueda.Credentials = New Search.Credentials
Busqueda.Credentials.ApplicationId = _key

Filtro_Search.FilterValue = 8.16
Filtro_Search.PropertyId = 3
‘Filtro_Search.CompareOperator = Search.CompareOperator.GreaterThanOrEquals

Busqueda.SearchOptions = New Search.SearchOptions
Busqueda.SearchOptions.Filters = Filtro_Search

Init_Busqueda = True
End Sub

Private Function Do_Search(ByVal Query As String, ByVal Localizacion As String) As Hashtable
Query_Search.Keyword = Query
Query_Search.Location = Localizacion
Busqueda.StructuredQuery = Query_Search

Respuesta_Busqueda = Cliente_Busqueda.Search(Busqueda)
Dim cadena As String = “”
Dim Devuelto As New Hashtable
If (Respuesta_Busqueda.ResultSets(0).Results.Length > 0) Then
For i As Integer = 0 To Respuesta_Busqueda.ResultSets.Length – 1
cadena = Respuesta_Busqueda.ResultSets(0).Results(i).Name
cadena = cadena.Insert(cadena.Length, ” “)
cadena = cadena.Insert(cadena.Length, Respuesta_Busqueda.ResultSets(0).Results(i).Distance)
Devuelto.Add(i, cadena)
Next
Return Devuelto
Else
Return Nothing
End If
End Function
#End Region

#End Region

End Class

Anuncios

1 comentario »

  1. […] Vamos a incluir la api de imageria de Bing maps y vamos a declararar todos los objetos que necesitamos para poder crear nuestro mapa. Vuelvo a repetir, si quereis refrescar vuestra memoria de como se hacía. Solo teneís que acceder al otro post en el que hablabamos un poco de todo el web service, desde aquí. […]

    Pingback por Bing Maps Api – Pushpins « Developer's Diary — 1 septiembre, 2010 @ 7:11 AM


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: