bien. fINALMENTE y luego de leer detalladamente la documentación de Google Maps, me encontré con que mi solución (al menos la mayor parte de ella) ya estaba implementada por GM en uno de los servicios que provee:
Statics Maps.
Me explico:
Mi problema es que ciertos formularios que usamos en la aplicación muestran el paso de uno o más vehículos por zonas predefinidas del usuario, las cuales luego deben ser puestas en documentos de Excel, Word, .PDF, etc. Para ello una de las formas más simples es capturar la pantalla y pegarla como bitmap en esos documentos.
Pero el inconveniente se presenta cuando los formularios en cuestión sólo representan el mapa en un segmento pequeño del formulario, y no se requiere que el resto del Form esté en documento (sería imagen - basura). En ese caso lo que deseábamos era capturar sólo el control y su contenido. Nada más.
Hubiera podido implementar ese tipo de funcionalidades si pudiese usar versiones uperiores del Visual Studio... pero por requerimientos de la empresa sólo puedo usar Visual Studio 2003 y por ende, .Net 1.1 y nada más.
Entonces, la semana pasada loguré encontrar esta documentación:
Guía para programadores del API de Google Static Maps
Era exactamente lo que necesitaba. Leugo de algunas pruebas y ajustes, el método quedó así:
Código vb.net:
Ver originalPublic Function GoogleImagePath(ByVal oMarkers As String, ByVal vPath As String, ByVal vCenter As String, ByVal vFile As String, ByVal vZoom As Integer, ByVal vMap As Integer) As Boolean
' ------------------------------------------------------------------
Dim inf As Integer
Dim vMapType As String = ""
If vMap = 2 Then
vMapType = "maptype=hybrid&"
End If
inf = nfi.NumberDecimalDigits
nfi.NumberDecimalDigits = 15
' ------------------------------------------------------------------
' Cada par LatLng en Path y Markers deben venir separados por pipes (|)
' ------------------------------------------------------------------
Try
Dim i As Image
oReq = "http://maps.google.com/maps/api/staticmap?center=" & vCenter & "&zoom=14&format=png32&markers=" & oMarkers & "&path=" & vPath & "&size=640x420&sensor=false&" & vMapType & "key=" & oKey & "&hl=es"
request = WebRequest.Create(oReq)
request.Credentials = CredentialCache.DefaultCredentials
CType(request, HttpWebRequest).UserAgent = ".NET Framework Example Client"
dataStream = request.GetResponse().GetResponseStream
i = New System.Drawing.Bitmap(dataStream)
i.Save(vFile & ".png", System.Drawing.Imaging.ImageFormat.Png)
' ------------------------------------------------------------------
nfi.NumberDecimalDigits = inf
' ------------------------------------------------------------------
Catch ex As Exception
oLogWriter.Escribir("Excepción en GoogleImagePath()" & vbNewLine & ex.Message & vbNewLine & ex.StackTrace.ToString)
If Not dataStream Is Nothing Then
End If
Return False
End Try
Return True
End Function
Este método recibe:
oMarkers: los marcadores a representar
vPath: la ruta recorrida como secuencia de pares LatLng,
vCenter: centro del mapa
vFile: Nombre del archivo a grabar
vZoom: nivel de zoom
vMap: parámetro para definir si se usará el mapa de calles o el híbrido
oKey: Es una variable global donde guardamos la Api Key de Google Maps.
nfi: Es una variable de tipo CultureInfo que se usa para manejar el formateo de datos numéricos a "en-US".
Además,lleva una variable Friend denominada
oLogWriter que es una clase creada para manejar un log de errores que me permite trazar los problemas en el programa sin que se interrumpa.