Crear un QR de una posición GPS desde Visual Foxpro

Posted on julio 2, 2015

1



Cuando vamos a un hotel, normalmente la agencia de viajes nos facilita un bono con los datos del establecimiento, su dirección, información de los servicios reservados y algún que otro dato adicional, como puede ser una foto del lugar.

Supongamos que tenemos ese documento impreso. ¿Habrá que introducir los datos al GPS para llegar al hotel, no? Esta rutina lo que hace es crear un código QR de geoposicionamiento pensado para ser impreso en ese bono. Con ello lo que se consigue es que el móvil abra directamente la posición Longitud/Latitud indicada en el mapa.

El ejemplo incluye 2 funciones, una para crear la cadena de posicionamiento con la longitud/latitud, y la otra que llama a FoxBarcodeQR para que genere la imagen QR.

Se puede ver el resultado de una implantación en producción aquí.

El ejemplo genera un QR con una dirección de la localidad de Balaguer. Para simplificar se abre la imagen del QR resultante.

Requisitos

Es necesario tener instalado FoxBarcodeQR. Puede descargarse desde VFPX aquí. En el ejemplo, el programa FOXBARCODEQR.PRG que incluye la clase, lo tengo en el directorio PROG.

Algunas aplicaciones lectoras de códigos QR de móvil no reconocen el tag GEO.

Programa de Ejemplo

lcImagenCreada= QRMapa(0.813247,41.785443)
If !Empty(lcImagenCreada)
Run &lcImagenCreada
Endif
Function QR
Parameters lcCodigoQRGenerar, lntamanoqr

*!* tcText: Texto a codificar
*!* tcFile: Nombre imagen-fichero a crear si no se ha especificado se genera un archivo temporal en la carpeta de archivos temporales de windows..
*!* tnSize: Tamaño de la imagen. an integer between 2 and 12
*!* 2 = 66 x 66 (in pixels)
*!* 3 = 99 x 99
*!* 4 = 132 x 132
*!* 5 = 165 x 165
*!* 6 = 198 x 198
*!* 7 = 231 x 231
*!* 8 = 264 x 264
*!* 9 = 297 x 297
*!* 10 = 330 x 330
*!* 11 = 363 x 363
*!* 12 = 396 x 396
*!* tnType: Tipo de imagen generada. Receives an integer between 0 and 2.
*!* 0 = BMP
*!* 1 = JPG
*!* 2 = GIP

lcCodigoQRGenerar= Strconv(lcCodigoQRGenerar,9)

Set Procedure To Prog\FoxBarcodeQR Additive

* Crear objeto FoxBarcodeQR y la imagen del código de barras QR
Local loFbc, lcQRImage
m.loFbc = Createobject(“FoxBarcodeQR”)
lcArchivoTemporal = Addbs(Getenv(“temp”))+”qr_”+Sys(2015)+”.png”
lcImagenDevQR = m.loFbc.QRBarcodeImage(lcCodigoQRGenerar,lcArchivoTemporal , lntamanoqr, 2)
Return lcArchivoTemporal

Function QRMapa
Parameters lngpslon, lngpslat
If Type(“lngpslon”)<>”N”
   lngpslon=0
Endif
If Type(“lngpslat”)<>”N”
   lngpslat=0
Endif
lcArchivoTemporal =””
If lngpslon=0 Or lngpslat=0
   llFunncion =.F.
Else
   lcCodigoQRGenerar = “geo:”+Strtran(Alltrim(Str(lngpslat,80,18)),”,”,”.”)+”,”+Strtran(Alltrim(Str(lngpslon,80,18)),”,”,”.”)+Chr(13)
   lcArchivoTemporal = QR(lcCodigoQRGenerar ,2)
   llFunncion=!Empty(lcArchivoTemporal)
Endif
If llFunncion
   Return lcArchivoTemporal
Else
   Return “”
Endif

Posted in: Foxpro, Google Maps