INGENIERIA DE SISTEMAS Y ELECTRONICA Blog Informativo de tecnologias en Ingenieria de Sistemas y Electronica
Inicio
Inicio
Acerca de
Rastreador GPS-Aplicacion Cliente en Vb.Net
Rastreador GPS-Aplicacion Cliente en Vb.Net julio juli o 17, 2012
ingsistele
Programacion en .Net
Bien, tal y como habia mencionado en la anterior anterior entrada, entrada, vamos a elaborar una aplicacion de escritorio que se encargará de ir haciendole el seguimiento al dispositivo movil a traves de las coordenadas que este envia al servidor y las vamos a ir ubicando en un un mapa. Nuestra Aplicacion ademas permitira buscar direcciones direc ciones diferentes a las que envia el GPS y navegar por cualquier lugar en el mapa. Dicho programa a elaborar tendra el siguiente aspecto:
BUSCAR ARTICULOS Buscar …
CALENDARIO julio 2012 L
M
X
J
V
S
D
1 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 17 18
19
20
21
22
23
24
26
27
28
29
30
31
« Jun
25
Feb »
ENTRADAS RECIENTES Consumir WebService Creado en PHP con J2ME Consumir WebService creado en PHP con Vb.Net Crear WebService En PHP Rastreador GPS-Aplicacion Cliente en Vb.Net Rastreador GPS con J2ME
NUBE DE TAGS C++ Java Pascal Php
Bien, Para comenzar a desarrollar primero debemos descargar el framework o conjunto de librerias que nos ofrece GMaps, el cual sera nuestra herramienta que nos conectara con los proveedores de mapas disponibles para realizar la ubicacion.
Programaci en .Net Programacion Estructurada
Dicho paquete de librerias junto con una aplicacion DEMO la podemos descargar desde la siguiente direccion:Descargar direccion:Descargar GMaps.Net, GMaps.Net, al abrir la pagina descargamos el archivo llamado: GMap.NET.WindowsForms.zip o si prefieren el link directo de la descarga presiona:Descarga presiona:Descarga Directa de GMap.Net. GMap.Net. Una Vez descargado el archivo, lo descomprimimos y copiamos las siguientes DLL a nuestro proyecto en vb.net:
COMENTARIOS RECIENTES Eduardo en Creacion de Un WebService en… Ing. Carlos Witt en Consumir Web Service con …
ENTRADAS RECIENTES Consumir WebService Creado en PHP con J2ME Consumir WebService creado en PHP con Vb.Net Crear WebService En PHP Rastreador GPS-Aplicacion Cliente en Vb.Net Rastreador GPS con J2ME
NUBE DE TAGS C++ Java Pascal Php
Bien, Para comenzar a desarrollar primero debemos descargar el framework o conjunto de librerias que nos ofrece GMaps, el cual sera nuestra herramienta que nos conectara con los proveedores de mapas disponibles para realizar la ubicacion.
Programaci en .Net Programacion Estructurada
Dicho paquete de librerias junto con una aplicacion DEMO la podemos descargar desde la siguiente direccion:Descargar direccion:Descargar GMaps.Net, GMaps.Net, al abrir la pagina descargamos el archivo llamado: GMap.NET.WindowsForms.zip o si prefieren el link directo de la descarga presiona:Descarga presiona:Descarga Directa de GMap.Net. GMap.Net. Una Vez descargado el archivo, lo descomprimimos y copiamos las siguientes DLL a nuestro proyecto en vb.net:
COMENTARIOS RECIENTES Eduardo en Creacion de Un WebService en… Ing. Carlos Witt en Consumir Web Service con …
Mariano Sedano en Sedano en Consumir Web Service con … Darwin Mora en Mora en Creacion de Un WebService en… eze en Conectar a un puerto serie (CO…
CATEGORÍAS
Ahora las pegamos en la carpeta debug del proyecto en vb.net:
C++ Java Pascal Php Programacion en .Net Programacion Estructurada
Ahora, podemos proceder a agregar el control al conjunto de herramientas de vb y posteriormente la referencia; para agregar el control presionamos clic derecho sobre cualquier elemento del cuador de herramientas de la parte derecha de la ventana y en el menu contextual que aparece seleccionamos la opcion elegir elementos tal y como se ve en la imagen:
Luego, en la nueva ventana que aparece estando en la pestaña Componentes de .Net Framework presionamos el boton examinar y en la nueva ventana que se crea, accedemos a la carpeta debug del proyecto y seleccionamos la referencia: GMap.NET.WindowsForms.dll tal y como se observa en la interfaz:
despues de seleccionarla presionamos el boton abrir y posteriormente el boton aceptar, listo con esto ya esta agregado el control. A continuacion, nos dirigimos al cuadro de herramientas y buscamos el control que acabamos de agregar:
y procedemos a a arrastrar el elemento GmapControl al formulario:
Bien, despues de esto vamos a agregar la otra referencia que nos falta, para ello nos dirigimos al explorador de soluciones y presionamos clic derecho sobre la opcion Agregar referencia
y en la nueva ventana que aparece nos dirigimos a la pestaña examinar, luego accedemos a la carpeta debug del proyecto (a traves de los directorios) y seleccionamos la referencia llamada: GMap.NET.Core.dll, por ultimo presionamos el boton aceptar
Bien, ya tenemos todo listo, ahora si podemos comenzar a desarrollar…. Pero antes elaboremos el siguiente diseño al formulario agregando otros controles (como se ve en la imagen):
Entonces agregaremos: * 5 Botones * 6 TextBox * 2 Combobox * 1 Picturebox * 1 Panel * Varios Groupbox
* 1 TrackBar: para controlar el zoom * 1 GMapControl1 para visualizar el mapa * 3 timer. Listo, ahora comencemos a programar; agreguemos los siguientes imports al formulario: 1 2 3 4 5 6 7 8 9
Imports GMap.NET.WindowsForms Imports GMap.NET Imports GMap.NET.MapProviders Imports GMap.NET.WindowsForms.Markers Imports System.Threading
Ahora vamos a definir las siguientes variables como globales
1 2 3 4 5 6 7 8 9 10 11 12 13
Dim modo As String 'modo de conexion Dim latitudm, longitudm As String Dim pres_boton_inicio, pres_boton_coordenadas, pre Dim indicador_termino, contador, contador_rws As I Dim tipo_mapa As GMapProvider
' Creamos una variable del tipo Thread Private proceso_ubi As Thread
el evento load del formulario debera tener el siguiente codigo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Private Sub Form1_Load(ByVal sender As System.Obje
'verificar_conexion_internet() indicador_termino = 0 contador = 0 contador_rws = 0 Me.Timer_refresco.Enabled = False Me.Timer_refresco_ws_contador.Enabled = False Me.Timer1.Enabled = True
. 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
_
.
Me.Panel_mensaje.Visible = False
CheckForIllegalCrossThreadCalls = False 'desactiva Me.Combo_modo_conexion.Text = "ServerOnly" Me.Combo_servidor_mapa.Text = "Google Hibrid Map"
modo = AccessMode.ServerOnly tipo_mapa = GMapProviders.GoogleHybridMap Me.Button_desactivaws.Enabled = False
pres_boton_inicio = False pres_boton_coordenadas = False pres_boton_buscar = False pres_boton_ws = False End Sub
Luego al combobox Modo de Conexion le agregamos los siguientes items como se ve en la imagen:
y creamos un procedimiento llamado establecer_modo_conexion() asi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Sub establecer_modo_conexion() If ( Me.Combo_modo_conexion.Text = "ServerOnly") Th
modo = AccessMode.ServerOnly End If If ( Me.Combo_modo_conexion.Text = "CacheOnly") The
modo = AccessMode.CacheOnly End If If ( Me.Combo_modo_conexion.Text = "ServerAndCache"
modo = AccessMode.ServerAndCache End If End Sub
Luego al combobox servidor de mapas le agregamos los siguientes items tal y como se ve en la interfaz:
y creamos un procedimiento para determinar la seleccion de cada uno de los servidores asi: 1 2 3 4 5 6 7 8 9 10 11
Sub establecer_servidor_mapa() If ( Me.Combo_servidor_mapa.Text = "Google Map") Th
tipo_mapa = GMapProviders.GoogleMap End If If ( Me.Combo_servidor_mapa.Text = "Google Satellit
tipo_mapa = GMapProviders.GoogleSatelliteMap
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
End If If ( Me.Combo_servidor_mapa.Text = "Google Terrain"
tipo_mapa = GMapProviders.GoogleTerrainMap End If If ( Me.Combo_servidor_mapa.Text = "Google Hibrid M
tipo_mapa = GMapProviders.GoogleHybridMap End If If ( Me.Combo_servidor_mapa.Text = "Google China Ma
tipo_mapa = GMapProviders.GoogleChinaMap End If If ( Me.Combo_servidor_mapa.Text = "Ovi Map") Then
tipo_mapa = GMapProviders.OviMap End If If ( Me.Combo_servidor_mapa.Text = "Ovi Satellite")
tipo_mapa = GMapProviders.OviSatelliteMap End If
_ 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
_
tipo_mapa = GMapProviders.OviTerrainMap End If If ( Me.Combo_servidor_mapa.Text = "Ovi Hibrid Map"
tipo_mapa = GMapProviders.OviHybridMap End If If ( Me.Combo_servidor_mapa.Text = "Open Street Map
tipo_mapa = GMapProviders.OpenStreetMap End If If ( Me.Combo_servidor_mapa.Text = "Bing Map") Then
tipo_mapa = GMapProviders.BingMap End If If ( Me.Combo_servidor_mapa.Text = "Bing Satellite"
tipo_mapa = GMapProviders.BingSatelliteMap End If If ( Me.Combo_servidor_mapa.Text = "Bing Hibrid Map
tipo_mapa = GMapProviders.BingHybridMap
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
If ( Me.Combo_servidor_mapa.Text = "Yahoo Map") The
tipo_mapa = GMapProviders.YahooMap End If If ( Me.Combo_servidor_mapa.Text = "Yahoo Satellite
tipo_mapa = GMapProviders.YahooSatelliteMap End If If ( Me.Combo_servidor_mapa.Text = "Yahoo Hibrid Ma
tipo_mapa = GMapProviders.YahooHybridMap End If End Sub
Luego elaboramos una funcion o procedimiento donde invocamos las 2 anteriores subrutinas, es decir, establecer_modo_conexion() y establecer_servidor_mapa(); dicha funcion la llamaremos configuracion y nos quedara asi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Sub configuracion()
GMapControl1.Manager.Mode = modo GMapControl1.MapProvider = tipo_mapa GMapControl1.MinZoom = 1 GMapControl1.MaxZoom = 19 GMapControl1.Zoom = Me.TrackBar_zoom.Value GMapControl1.Dock = DockStyle.Fill GMapControl1.MarkersEnabled = True GMapProvider.Language = LanguageType.Spanish End Sub
Cabe aclararse que al trackbar se le coloco un valor inicial de 10 que es el valor de zoom asignado al control gmap
Ahora crearemos otro procedimiento desde el cual manipularemos el zoom con la rueda del mouse y el desplazamiento del mapa al ir haciendo clic y moviendo el mouse a traves del control gmap, entre otras funciones, llamaremos este procedimiento avanzadas(): 1 2 3
Sub avanzadas()
Cursor.Current = Cursors.WaitCursor
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
Dim current = New PointLatLng(GMapControl1.Positio Dim currentMark = New GMapMarkerGoogleGreen(curren Dim overlay = New GMapOverlay(GMapControl1, "curre
overlay.Markers.Add(currentMark) GMapControl1.Overlays.Add(overlay) Cursor.Current = Cursors.[Default] '-------------ResumeLayout(True) Dim objects = New GMapOverlay( Me.GMapControl1, "ob Me.GMapControl1.Overlays.Add(objects) Dim rect As New GMapMarkerGoogleRed(GMapControl1.P
rect.Size = New System.Drawing.Size(0, 0) rect.ToolTipText = "Tu Ubicacion" rect.ToolTipMode = MarkerTooltipMode.Always overlay.Markers.Add(rect) GMapControl1.DragButton = MouseButtons.Left End Sub
A continuacion, vamos a crear otros procedimientos o funciones a traves de los cuales realizaremos la ubicacion de algun lugar o coordenada en el mapa, para ubicar el punto inicial utilizaremos una coordenada de latitud y longitud fija y elaboraremos la funcion de la siguiente manera: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Sub ubicar1()
configuracion() latitudm = 7.11443487566174 longitudm = -73.1169319152832 'MsgBox(latitudm & " " & longitudm) posicionar() avanzadas() contador = 0 indicador_termino = 1 End Sub
Luego vamos con la funcion de ubicar cuando realicemos busqueda por coordenadas, dicho procedimiento lo llamaremos ubicar2()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Sub ubicar2()
configuracion() latitudm = Me.Text_latitud.Text.Replace(".", ",") longitudm = Me.Text_longitud.Text.Replace(".", "," 'MsgBox(latitudm & " " & longitudm) posicionar() avanzadas() contador = 0 indicador_termino = 1 End Sub
Ahora vamos con ubicar3(), encargada de ubicar cuando realicemos una busqueda por lugar:
1 2 3 4 5 6 7 8 9 10 11 12 13
Sub ubicar3()
configuracion() posicionar() avanzadas() contador = 0 indicador_termino = 1 End Sub
Por ultimo, crearemos un procedimiento llamado posicionar() que es el que basicamente establecera la posicion en el mapa y consta de una sola linea de codigo, asi: 1 2 3 4 5
Sub posicionar()
GMapControl1.Position = New PointLatLng(latitudm, l End Sub
Por otra parte, en el evento MouseDoubleClick del componente GmapControl agregamos el siguiente codigo para que al momento de hacer doble clic sobre cualquier lugar se coloque una marca y se observen las coordenadas correspondientes de latitud y longitud: 1
Private Sub GMapControl1_MouseDoubleClick(ByVal se
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
If e.Button = MouseButtons.Left T en
Cursor.Current = Cursors.WaitCursor Dim latLng As PointLatLng = GMapControl1.FromLocal Dim current = New PointLat PointLatLng( Lng(Math Math.Abs .Abs(lat (latLng. Lng.Lat) Lat) Dim currentMark = New GMapMarkerGoogleGreen(curren Dim overlay = New GMapOverlay(GMapControl1, "curre
GMapControl1.MarkersEnabled = False overlay.Markers.Clear() GMapControl1.Overlays.Clear() overlay.Markers.Add(currentMark) GMapControl1.Overlays.Add(overlay) GMapControl1.MarkersEnabled = True Cursor.Current = Cursors.Hand Me.Text_longitud.Text = latLng.Lng.ToString() Me.Text_latitud.Text = latLng.Lat.ToString() End If End Sub
siguiendo con la programacion de la aplicacion, vamos a crear otras funciones que nos permitan llamar a cada una de las anteriores (ubicar1(), ubicar2(), ubicar3() ) y desplegarlas a traves de un hilo o hebra de proceso para evitar algun bloqueo debido a la carga de procesos que se hacen y ademas incluir otros comandos al realizar cada una de las ubicaciones; por tanto la siguiente funcion o subrutina la llamaremos busqueda_boton_inicio() y se desencadenara al presionar el boton inicio, el codigo de dicho procedimiento es:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Sub busqueda_boton_inicio()
'-------establecer_modo_conexion() establecer_servidor_mapa() '------- Me.Label_mensaje.Text = "Espere por favor" Me.Panel_mensaje.Visible = True Me.PictureBox_carga.Visible = True Me.PictureBox_carga.Image = Image.FromFile("carga.
proceso_ubi = New Thread( AddressOf ubicar1) 'ponemos al hilo en marcha proceso_ubi.Start() End Sub
Ahora, la busqueda por coordenadas de latitud y longitud sera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Sub busqueda_boton_coordenadas()
'-------establecer_modo_conexion() establecer_servidor_mapa() '------- Me.Label_mensaje.Text = "Espere por favor" Me.Panel_mensaje.Visible = True Me.PictureBox_carga.Visible = True Me.PictureBox_carga.Image = Image.FromFile("carga.
proceso_ubi = New Thread( AddressOf ubicar2) 'ponemos al hilo en marcha proceso_ubi.Start() End Sub
y por ultimo la busqueda por nombre de un lugar o sitio conocido nos quedara asi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Sub busqueda_boton_lugar() Me.GMapControl1.ReloadMap()
GMapProvider.Language = LanguageType.Spanish Dim search As String = String .Format("{0}", Me.Tex Dim code As GeoCoderStatusCode = GMapControl1.SetC If code <> GeoCoderStatusCode.G_GEO_SUCCESS Then
MessageBox.Show("Direccion no encontrada!" & Conve Return End If Dim objects = New GMapOverlay(GMapControl1, "objec
objects.Markers.Clear() Me.GMapControl1.Overlays.Clear()
Agregar_ubicacion( Me.Text_busqueda.Text) End Sub
Donde la funcion Agregar_ubicacion tendra la siguiente estructura: 1 2
Private Sub Agregar_ubicacion(ByVal lugar As Strin
_ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
_
establecer_servidor_mapa() Dim unknow As GeoCoderStatusCode = GeoCoderStatusC Dim latLngFromGeocoder As System.Nullable(Of Point If latLngFromGeocoder.HasValue AndAlso (unknow = G
'.......posiciono............. latitudm = latLngFromGeocoder.Value.Lat longitudm = latLngFromGeocoder.Value.Lng Me.Label_mensaje.Text = "Espere por favor" Me.Panel_mensaje.Visible = True Me.PictureBox_carga.Visible = True Me.PictureBox_carga.Image = Image.FromFile("carga.
proceso_ubi = New Thread( AddressOf ubicar3) 'ponemos al hilo en marcha proceso_ubi.Start() Me.Text_longitud.Text = latLngFromGeocoder.Value.L Me.Text_latitud.Text = latLngFromGeocoder.Value.La
37 38 39 40 41 42 43 44 45 46 47
pres_boton_inicio = False pres_boton_coordenadas = False pres_boton_buscar = True pres_boton_ws = False End If End Sub
Luego al Timer1 le agregamos el siguiente codigo (para hacer que se desaparezca un archivo gif de carga) y que se muestre un mensaje:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Private Sub Timer1_Tick(ByVal sender As System.Obj If (indicador_termino = 1) Then Me.Label_mensaje.Text = "Carga Finalizada"
proceso_ubi.Abort() Me.PictureBox_carga.Visible = False If (contador = 2) Then
indicador_termino = 0 contador = 0 Me.Panel_mensaje.Visible = False End If
contador += 1 End If End Sub
“Dicho timer tendra una frecuencia o intervalo de 1000 milisegundos o 1 segundo”
Ahora si, teniendo las funciones y procedimientos de ubicacion y busqueda listos, podemos invocarlos dentro de cada boton asi:
1 2 3 4 5 6 7 8 9 10 11 12 13
Private Sub Button_inicio_Click(ByVal sender As Sy
busqueda_boton_inicio() pres_boton_inicio = True pres_boton_coordenadas = False pres_boton_buscar = False pres_boton_ws = False End Sub
aqui llamamos al procedimiento de posicionar a un punto fijo ya preestablecido en la aplicacion, ademas colocamos una variable logica llamada pres_boton_inicio en true y colocamos las demas en false que seran utilizadas como indicadores mutuamente excluyentes, ahora vamos con el boton localizar coordenadas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Private Sub Button_coordenadas_Click(ByVal sender If ( Me.Text_latitud.Text.Trim = "" Or Me.Text_long
MsgBox("Por favor, Ingrese Los valores Correspondi Else
'puede realizar la ubicacion busqueda_boton_coordenadas() pres_boton_inicio = False pres_boton_coordenadas = True pres_boton_buscar = False pres_boton_ws = False End If End Sub
Por ultimo, el boton buscar lugar quedara asi: 1 2 3 4 5
Private Sub Button_buscar_lugar_Click(ByVal sender
busqueda_boton_lugar() End Sub
Ejecutando el programa y poniendolo a prueba con lo que ya se ha programado veremos los siguientes resultados: al escribir el nombre de un lugar y presionar el boton correspondiente (buscar lugar), veremos que el programa automaticamente nos muestra un elemento gif de carga en la parte derecha de la ventana y mientras que se carga el mapa podemos ver la ubicacion en coordenadas de latitud y longitud que devuelve el programa:
Luego, una vez cargado el mapa observaremos un resultado similar al siguiente:
Si hacemos clic sobre el combo servidor de mapas y escogemos otro como puede ser “Ovi Mpas” y volvemos a hacer la busqueda, notaresmos que nuestro mapa cambia al que ofrece el nuevo servidor:
y podemos probar con cualquier servidor que deseemos y veremos los resultados al instante, por ejemplo, podemos ver el mapa que se genera al escoger la opcion Open Street Maps:
Bueno, hasta aqui nuestro programa puede localizar tanto coordenadas o lugares en el mapa, ahora hace falta programar la opcion de consulta de datos a traves del webservice, pero antes de llegar alla debemos completar el servicio web y crear una funcion llamada consultarDatos() para traer los datos que estan registrados en la base de datos, asi que abrimos netbeans y codificamos lo siguiente en el servicio web WebServiceGPS: 1 2 3 4 5 6 7
//---------------comienzo procedimiento para consu @WebMethod public boolean consultarDatos(){
String conexionBD="jdbc:mysql://127.0.0.1/coordena
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
Connection conexion=null; boolean funciono=false;
String con; String idregistro; idregistro=""; ResultSet rs; try{
// JOptionPane.showMessageDialog(null,"entro"); Class.forName("com.mysql.jdbc.Driver");//el driver conexion=DriverManager.getConnection(conexionBD, " Statement s = conexion.createStatement(); // JOptionPane.showMessageDialog(null,no+" "+ap); con="SELECT max(id) as id from datos" ; rs = s.executeQuery (con); { while (rs.next()) {
idregistro=rs.getString("id"); //JOptionPane.showMessageDialog(null, idregistro);
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
} } //ahora si traigo los datos de ubicacion con="SELECT * from datos where id='"+idregistro+"' rs = s.executeQuery (con); { while (rs.next()) {
latitud=rs.getString("latitud"); longitud=rs.getString("longitud"); //JOptionPane.showMessageDialog(null, "si"); } } funciono=true; MostrarLatitud(); MostrarLongitud(); } catch(Exception e){
76 77 78 79 80 81
} return funciono;
}
Tambien creamos las funciones que permiten mostrar los datos de latitud y longitud asi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
@WebMethod public String MostrarLatitud(){
String lati; lati=""; lati=latitud; return lati;
} @WebMethod public String MostrarLongitud(){
String longi; longi=""; longi=longitud; return longi;
}
El codigo completo se puede observar en las siguientes imagenes:
Bien, ahora Ponemos en marcha el webservice:
Luego procedemos a agregar la referencia web en vb.net de dicho servicio; para ello vamos a la opcion Proyecto de la barra de menu y seleccionamos la opcion agregar referencia de servicio tal y como se ve en la imagen:
Despues en la ventana que aparece presionamos el boton avanzadas:
Posteriormente en la nueva ventana que aparece presionamos el boton llamado Agregar referencia web tal y como se ve en la siguiente imagen:
Luego, en la siguiente ventana copiamos la wsdl o ruta del webservice, presionamos el boton ir para que se listen los procedimientos de los que dispone el servicio web, despues le colocamos un nombre a la referencia, en este caso la llame: datos_gps y presionamos el boton agregar referencia:
Listo, con esto ya hemos agregado la referencia web al proyecto de vb.net; ahora debemos agregar el siguiente import para hacer el llamado al servicio web: 1 Imports Rastreador_GPS_Gmap.datos_gps
Ahora debemos crear un procedimiento encargado de posicionar los datos (latitud y longitud) que son traidos por el servicio web, dicho procedimiento lo llamaremos busqueda_activar_webservice():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Sub busqueda_activar_webservice()
establecer_modo_conexion() establecer_servidor_mapa() '------- Me.Label_mensaje.Text = "Espere por favor" Me.Panel_mensaje.Visible = True Me.PictureBox_carga.Visible = True Me.PictureBox_carga.Image = Image.FromFile("carga.
proceso_ubi = New Thread( AddressOf ubicar2) 'ponemos al hilo en marcha proceso_ubi.Start() '-------End Sub
Por consiguiente el codigo del boton Activar para recibir los datos del webservice quedara asi: 1 2
Private Sub Button_activaws_Click(ByVal sender As
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Try Me.Timer_refresco_ws_contador.Enabled = False Me.Timer_refresco.Enabled = True Dim jws As New datos_gps.servicio_gpsService Dim resultado As Boolean
resultado = jws.consultarDatos() If (resultado = True) Then
'MsgBox("entro") Me.Text_latitud.Text = jws.MostrarLatitud() Me.Text_longitud.Text = jws.MostrarLongitud()
'-------busqueda_activar_webservice() '-------pres_boton_inicio = False pres_boton_coordenadas = False pres_boton_buscar = False
_ 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
_
Else
' MsgBox("no") End If Me.Button_activaws.Enabled = False Me.Button_desactivaws.Enabled = True Catch ex As Exception Me.Timer_refresco_ws_contador.Enabled = False Me.Timer_refresco.Enabled = False
MsgBox("Servicio web No Disponible, Verifique Cone End Try End Sub
Ademas hay que programar en el timer refresco lo siguiente para determinar si se debe actualizar la lectura de datos de la base de datos, el intervalo que maneja dicho timer es de 1000 milisegundos y el codigo que lleva es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Private Sub Timer_refresco_Tick(ByVal sender As Sy Me.Text_indica_termino.Text = indicador_termino If (indicador_termino = 1) Then
'......comienzo a contar hasta 60 para volver a re contador_rws = 0 Me.Timer_refresco_ws_contador.Enabled = True Me.Timer_refresco.Enabled = False End If End Sub
Por ultimo, en el timer refresco_ws_contador vamos a contar hasta 60 que es la frecuencia con la que se actualizara el mapa, es decir, que cada minuto se va a leer una nueva posicion del celular o gps: 1 2 3 4 5 6 7 8 9
Private Sub Timer_refresco_ws_contador_Tick(ByVal Me.Text_contador_ws.Text = contador_rws If (contador_rws = 60) Then
'realizo la ubicacion Try
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
Dim jws As New datos_gps.servicio_gpsService Dim resultado As Boolean
resultado = jws.consultarDatos() If (resultado = True) Then
'MsgBox("entro") Me.Text_latitud.Text = jws.MostrarLatitud() Me.Text_longitud.Text = jws.MostrarLongitud()
'-------busqueda_activar_webservice() '-------pres_boton_inicio = False pres_boton_coordenadas = False pres_boton_buscar = False pres_boton_ws = True Else
' MsgBox("no") End If
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
Me.Button_activaws.Enabled = False Me.Button_desactivaws.Enabled = True Catch ex As Exception
desactivar_datos_webservice() MsgBox("Servicio web No Disponible, Verifique Cone End Try
contador_rws = 0 Me.Timer_refresco.Enabled = True Me.Timer_refresco_ws_contador.Enabled = False End If
contador_rws += 1 End Sub
Luego creamos una funcion o procedimiento para desactivar la lectura de los datos por el webservice, lo llamaremos desactivar_datos_webservice() y tendra lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Sub desactivar_datos_webservice() Me.Timer_refresco.Enabled = False Me.Timer_refresco_ws_contador.Enabled = False Me.Text_indica_termino.Text = 0 Me.Text_contador_ws.Text = 0 Me.Button_activaws.Enabled = True Me.Button_desactivaws.Enabled = False End Sub
Ahora lo llamamos en el evento clic del boton desactivar: 1 2 3 4 5
Private Sub Button_desactivaws_Click(ByVal sender A
desactivar_datos_webservice() End Sub
Ademas tenemos que programar en el evento SelectedIndexChanged del combobox servidor de mapas para que el mapa cambie automaticamente al seleccionar algun item de los que aparecen en la lista, el codigo que debe ir alli es el siguiente: 1 2
Private Sub Combo_servidor_mapa_SelectedIndexChang
_ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
_
busqueda_boton_inicio() End If
'.............. If (pres_boton_coordenadas = True) Then
busqueda_boton_coordenadas() End If
'--------------If (pres_boton_buscar = True) Then
busqueda_boton_lugar() End If
',,,,,,,,,,,,,,,,,, If (pres_boton_ws = True) Then
busqueda_activar_webservice() End If End Sub
Para terminar solo hay que programar en el evento scroll de nuestro
Trackbar_zoom de tal manera que se pueda ir variando el zoom al ir moviendo la barra de desplazamiento: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Private Sub TrackBar_zoom_Scroll(ByVal sender As S Me.TextBox_zoom.Text = Me.TrackBar_zoom.Value If (pres_boton_inicio = True) Then
' modifico el zoom cuando busco por el boton inici busqueda_boton_inicio() End If
'........................ If (pres_boton_coordenadas = True) Then
' modifico el zoom cuando busco por el boton coord busqueda_boton_coordenadas() End If
'....................... If (pres_boton_buscar = True) Then
' modifico el zoom cuando busco por el boton lugar busqueda_boton_coordenadas()
31 32 33 34 35 36 37 38 39 40 41 42 43
End If
'...................... If (pres_boton_ws = True) Then
' modifico el zoom cuando busco por el boton webse busqueda_activar_webservice() End If End Sub
Bien, con todo esto ya hemos terminado de programar nuestra aplicacion, ahora podemos ejecutarla y ver los resultados:
Aqui presionamos el boton activar, nos podemos dar cuenta que ya comenzo la lectura de los datos de la base de datos a traves del webservice, luego veremos el mapa cargado y en la parte inferior derecha podemos ver los contadores, el primero indica que el mapa esta cargado (cuando esta en 1) y el contador de abajo indica el segundo por el cual va transcurriendo dicho tiempo hasta llegar a 60 para que se actualice o refresque una nueva posicion:
Como se puede ver entre los registros de la base de datos, el ultimo registro que es el que esta leyendo cada 60 segundos el webservice corresponde a la ultima ubicacion o posicion segun el gps:
Bien, esto es todo acerca de nuestro rastreador, se pueden poner a prueba todas las opciones de este programa y observar los resultados pertinentes; espero y este tutorial pueda ser de utilidad a quien lo pueda necesitar. *Para descargar la aplicacion puedes presionar el siguiente link:Descargar Aplicacion de Vb.net *Para descargar el webservice en netbeans 6.9.1 presiona el siguiente enlace: Descargar WebService *para descargar la base de datos puedes hacer clic sobre el siguiente link:Descargar Base de datos
Me gusta Sé el primero en decir que te gusta.
Relacionado
Rastreador GPS con J2ME
Rastreador GPS con J2ME
Transferir archivos desde un pc a otro con vb.net
Deteccion de Movimiento con Vb.net y WebCam
Crear WebService En PHP
18 thoughts on “Rastreador GPS-Aplicacion Cliente en Vb.Net”
nelson octubre 16, 2012 en 5:41 pm
excelente….!!! pero me pregunto , como seria una manera(como leo y que harware utilizo para leer los datos de latitud ,longitud) de ir almacenando los datos ? si me pudieras dar un consejo.. GRACIAS……!!!!! Responder
nelson octubre 16, 2012 en 5:43 pm
excelente….!!! pero me pregunto , como seria una manera(como leo y que hardware utilizo para leer los datos de latitud ,longitud) de ir almacenando los datos ? si me pudieras dar un consejo.. GRACIAS……!!!!! Responder
William octubre 22, 2012 en 9:55 pm
Parece un buen trabajo pero tengo un problema a ver si me ayudas …hasta ahora no he manejado el WEB Service… De acuerdo con tu Publicacion ya instale el Netbeans y el JDK pero ahora ¿ como levanto el Web Service con los archivos que baje para probar ????… a ver si me ayudas . Saludos Responder
Carlos septiembre 4, 2013 en 2:31 pm
Buenas, estoy probando esto y la verdad que funciona muy bien todo, pero, te cuento que estoy utilizando un modulo GSM/GPRS, el SIM908 y cuando quiero establecer la conexion con el servidor el modulo me devuelve el siguiente error. HTTP/1.1 400 Petición incorrecta Server: Apache-Coyote/1.1 Transfer-Encoding: chunked Date: Wed, 04 Sep 2013 14:19:16 GMT Connection: close alguna idea de que puede ser??? Desde ya muchas gracias por el gran aporte. Saludos Responder
ingsistele septiembre 4, 2013 en 5:26 pm
Hola compañero, recuerda que la comunicación se esta realizando a través de un webservice, para que puedas hacer una conexión exitosa al servidor necesitas poner en marcha el servicio web con el servidor apache tomcat. Verifica bien los parámetros de conexión al webservice. Responder
septiembre 4, 2013 en 7:10 pm
Gracias por la respuesta, efectivamente el webservice esta corriendo, lo hago antes de tratar de conectarme con el modulo, tal vez lo hago mal pero segun la explicacion de mas arriba es… Test Webservice y de alli se tiene que abrir la pagina y dejarla corriendo… eso ocurre perfectamente. No se que pueda estar pasando… si pruebo conectarme al servidor monitoreando con otro programa la conexion tcp ip lo hace correctamente… pero cuando inicio el webservice y quiero conectarme me salta ese error que cito mas arriba. la direccion ip es dinamica pero antes de realizar mi conexion verifico de poner en mi modulo la que me asigna en ese momento. no se si tendra que ver con el webservice. Saludos
Carlos septiembre 5, 2013 en 3:30 am
Logre conectarme, pero el problema es que ahora no puedo pasarle los parametros de latitud y longitud… te consulto desde tu experiencia, si yo tendria que mandar al webservice los datos con el comando GET… como lo tendria que hacer? vamos a suponer que en vez de un celular ocupo otra computadora remota para enviarle estos datos… como lo podria hacer? Responder
ingsistele septiembre 5, 2013 en 6:54 pm
Hola compañero, me alegro de que te hayas podido conectar al webservice; acerca del problema que que tu ves en cuanto a pasarle los parámetros de latitud y longitud, los puedes resolver con un PC tal y como lo planteas en lugar de tener un celular, lo que necesitas es una aplicación que este recibiendo los parametros del gps por el puerto serial y los vas guardando cada cierto tiempo en la base de datos remota haciendo uso de un webservice. A manera de ejemplo, te recomiendo que te guies del siguiente ejemplo: Consumir Web Service con VB.Net principalmente te fijas de la opcion guardar que es muy semejante a la que implemento en la aplicacion movil para ir guardando los datos. Eso es todo, espero y puedas resolver tus tudas. Responder
251285 noviembre 1, 2013 en 9:17 pm
Hola carlos, estoy en tu misma situacion, estudiando los comandos get para tratar de establecer la conexion con el sim 908, queria preguntarte: ¿tuviste que subir el web service a una pagina de internet o te comunicaste con el sim 908 a la maquina en donde corre el programa?, queria que me cuentes tu procedimiento para poder establecer la conexion y si lograste enviar los datos de longitud y latitud. te dejo mi email y estamos en contacto…
[email protected] Responder
andres septiembre 26, 2013 en 10:59 pm
Hola amigo disculpa las molestias pero mira tengo problemas con la aplicación el Gmap no me deja buscar nada entonces podrías colaborarme con esto muchas gracias por tu atención. Responder
Lusitanso diciembre 13, 2014 en 10:22 am
Bom dia, não consigo fazer o download dos ficheiros, será possivel um link alternativo. Obrigado Responder
ingsistele diciembre 14, 2014 en 1:57 am
Hola lusitanso, aqui te dejo un enlace para que descargues todo el material relacionado con este proyecto: Descargar Rastreador GPS Full BlogIngsistele muchas gracias por visitar mi blog. para descargar el programa debes hacer clic en el boton que esta encerrado en el circulo amarillo indicado por la flecha de color rojo. Mira esta imagen para que sepas a que boton darle clic para descargar Responder
Lusitanso diciembre 14, 2014 en 11:38 am
Muito obrigado, um bom Domingo para si.
ingsistele diciembre 15, 2014 en 11:30 pm
De nada compañero, estamos para servir, saludos!
Roque Proia noviembre 21, 2015 en 3:21 pm
hola mira necesito saber como cambio tu versión de GMap.net 1.6 a 1.7 que es el actual y hay funciones que cambiaron y no funcionan mas te paso el listado desde ya gracias Dim currentMark = New GMarkerGooglegreen(current) no esta definido Dim rect As New GMapMarkerGoogleRed(GMapControl1.Position) no esta definido Dim objects = New GMapOverlay(Me.GMapControl1, “objects”) no esta definido Responder
feliciano enero 19, 2016 en 10:39 pm
Dim rect As New GMapMarkerGoogleRed(GMapControl1.Position) no esta definido Dim objects = New GMapOverlay(Me.GMapControl1, “objects”) no esta definido estos errores se quitan si agregar los dll que tiene el proyecto(descarga el proyecto) de la carpeta Debug ahí esta hasta la imagen gif. y los dos archivos dll saludos.. Responder
vsmegadescargas marzo 21, 2017 en 3:01 pm
Hola amigo disculpa la molestia, estoy empezando en la programación y tu proyecto es muy interesante, pero no se como enviar los datos de posición de un teléfono al web service y así localizarlo desde la aplicación, disculpa si ya esta explicado arriba. Saludos Responder
Rocco abril 13, 2017 en 4:10 pm
He probado tu codigo esta bonito interesante, mi pregunta es me sale de otro pais como hago para que salga con mi pais y como tomo los valores de mi