Spanish Ubicacion en GMaps

dhernandez

Active Member
Licensed User
Buen día a todos, llevo mucho tiempo sin postear algo.
Les describiré un poco mi APP, a ver si pueden darme una mano: El objetivo de mi App es alertar al usuario de algun riesgo(Robo de vehiculo, asalto, etc) en un area determinada(por codigo de Area) mediante un mensaje y localizacion en el mapa .
Mi aplicacion debe mostrar un mapa(Google Maps), y depende de su ubicacion, mostrar a su alrededor qué áreas son de riesgo para él y poder evitarlas.

Ya cargué las librerías y el código para cargar el mapa y la ubicación del usuario.
Pero el mapa en sí me muestra parte del continente alejado, y si no le doy click a un boton que trae por defecto el mapa, no me lleva a mi ubicacion.

Quiero que al iniciar el mapa, me lleve o muestre mi ubicacion.

Se puede? o simplemente no hay manera?

Muchas Gracias
 

drgottjr

Well-Known Member
Licensed User
3 pasos:
1) sacar la longitud i la latitud localizando al usuario (según el método preferido).
2) fija el punto central del mapa en esa posición. (ajusta el zoom para que se vea una área adecuada).
3) fija algún marcador/icono en esa posición. (tú estás aquí. íojo! )

todo esto se puede realizar "automaticamente" (al localizar al usuario) o mediante una función lanzada al tocar un botoncito.

hace mucho tiempo que no uso google maps, pero los pasos señalados arriba son casi los mismos para todas las librerías. de todas formas, se tratan de 3 "operaciones" distintas. las tienes que unir - una tras otra - como si fuesen una sola.
 

dhernandez

Active Member
Licensed User
Me sale este error al tratar de extraer las coordenadas
1580412784580.png
 

edgar_ortiz

Active Member
Licensed User
En Globals de tu actividad definir:

B4X:
    '
    Dim lcPunto_Actual As Location

En tu codigo, despues de 'Extraer Latitud y Longitud, cambia tu codigo por:

B4X:
        ProgressDialogShow("Buscando su ubicacion")
        '
        Do While lcContinua = True
            '
            Sleep(500)
            '
            If gmap.MyLocation.IsInitialized = True Then
                Log("MyLocation:")
                Log(gmap.MyLocation.Latitude)
                Log(gmap.MyLocation.Longitude)
                '
                lcPunto_Actual.Initialize
                lcPunto_Actual.Latitude        = gmap.MyLocation.Latitude
                lcPunto_Actual.Longitude    = gmap.MyLocation.Longitude
                Log("Punto Actual:")
                Log(lcPunto_Actual)
                '
                lcContinua    = False
                lcEncontro    = True
            End If
            '
            lcVeces    = lcVeces + 1
            If lcVeces > 9 Then
                lcContinua = False
            End If
            '
            Log("Veces:")
            Log(lcVeces)
        Loop
        '
        ProgressDialogHide
Espero te sirva
 

drgottjr

Well-Known Member
Licensed User
a ver cómo te sale el código de @edgar_ortiz. mientras tanto, dínos si sabes hacer los otros 2 pasos sin error.
 

dhernandez

Active Member
Licensed User
Muchas gracias a los dos por responder, Aclaro que es la primera vez que uso Google Maps y se me hace un tanto complicado.
una pregunta @edgar_ortiz, no entiendo muy bien que tipo de datos son las variables: lccontinua - lcencontro - lcveces.
Por lo que veo es que las primeras dos son de tipo boolean o me equivoco.. Ando confundido

Pero gracias.
 

edgar_ortiz

Active Member
Licensed User
... que tipo de datos son las variables: lccontinua - lcencontro - lcveces.
Por lo que veo es que las primeras dos son de tipo boolean o me equivoco.. Ando confundido

Pero gracias.
En efecto lcContinua y lcEncontro son boolean y lcveces es integer, la idea, es: esperar medio segundo e "intentar" conseguir la ubicacion, si la encuenta entonces ya no continua y si en 10 veces no lo a logrado, entonces ya no continua.
 

dhernandez

Active Member
Licensed User
Muchas gracias, Perdón por la demora, solo que aqui en México fue festivo Ayer Lunes y no se laboró.

He probado el codigo y la vdd no me funcionó, lo probé en telefono real, estuve leyendo que si no se encuentra el GPS o coordenadas, es porque no hay señal GPS. Pero salí al exterior y me aseguré de que tomara señal GPS en la app de Google Maps, pero no me funciona.

Entonces pensé yo, hacer una rutina que cuando cambie de posicion, me centre en le mapa y me haga zoom. Mi codigo es el seguiente.
B4X:
Dim Latitud As Double = 0
    Dim Longitud As Double = 0
    Dim Lat2 As Double = 0
    Dim Lon2 As Double = 0
    Dim p1, p2 As Location
    Dim Distance As Float


Sub GPS_LocationChanged(Parametro As Location)
    Latitud = Parametro.Latitude
    Longitud = Parametro.Longitude
    
    p2.Initialize2(Latitud, Longitud)
    p1.Initialize2(Lat2, Lon2)
        Distance = p1.DistanceTo(p2)
    If Latitud <> 0 And Longitud <> 0 Then
        If Distance > 10 Then
            Lat2 = Latitud
            Lon2 = Longitud
            
            Dim cp As CameraPosition
            cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0)
            gmap.AnimateCamera(cp)
        End If
        
    End If
    
End Sub
y que creen? tampoco me resulta al cambiar de posicion, lo probé en un motorola G3 y en un auto a 40km/h
 

drgottjr

Well-Known Member
Licensed User
dejemos de lado el codigo por el momento.

si entiendo bien lo que dices acerca de la
app de google maps, parece que tu gps no funciona.
es posible. si es asi, tu codigo es lo de menos.

o no funciona o no esta activado.
hay un monton de apps gratuitas que no hacen mas
que probar el gps (mostrando los satelites
y las coordinadas del movil, etc). descarga
una. (siempre puedes tirarla luego)

en la configuracion del movil, hay un ajuste
para "location". asegura que esta puesto.
cuando esta activo el gps, aparece un
iconcito en todo lo alto del movil. cuando
cierras el gps, desaparace el icono.

es mas, el gps tarda hasta 2 minutos en
localizarse por primera vez. encima, el
estar al exterior dentro de un bosque o
en medio de una tormenta no es lo mismo
que estar al exterior con vista del cielo
azul.

mas aun, con apps de mapas, data celular
o wifi es necesario. en el caso de google
maps, el gps no es el unico metodo usado
para localizarse.

perdona la falta de acentos (el maldito teclado
yanqui). y perdona las preguntas, pero no
esta del todo claro que todo vaya bien con tu gps.
 

dhernandez

Active Member
Licensed User
Gracias por responder @drgottjr lo he revisado bien y el GPS está activo, la app Nativa de Google Maps si me localiza el GPS. He instalado mi App en dos dispositivos diferentes donde corre perfectamente el GPS, con vista al hermoso cielo azul y no me hace lo de la ultima rutina(GSP_LoccationChanged) al cambiarme de posicion en coche. Entonces yo creo que es el código :(
 

dhernandez

Active Member
Licensed User
Gracias a todos, Pongo el Codigo como está en mi Main:


B4X:
#Region  Project Attributes
    #ApplicationLabel: Navigation V1
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
    #AdditionalJar: com.google.android.gms:play-services-maps
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: False
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private rp As RuntimePermissions
    Dim GPS As GPS
    
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Private gmap As GoogleMap
    Private MapFragment1 As MapFragment
    
    'NEW
    Dim Latitud As Double = 0
    Dim Longitud As Double = 0
    Dim Lat2 As Double = 0
    Dim Lon2 As Double = 0
    Dim p1, p2 As Location
    Dim Distance As Float
    
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
    
    'If gmap.IsInitialized = False Then
    '    Wait For MapFragment1_Ready
    '    gmap = MapFragment1.GetMap
    '    rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
    '    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    'End If
    '    If Result Then
    '    gmap.MyLocationEnabled = True
    '   
    '    Else
    '        Log("No se concedió el Permiso")
    '    End If
    If MapFragment1.IsGooglePlayServicesAvailable = False Then
        ToastMessageShow("Por favor Instala Google Play Services", True)
    End If
    
    GPS.Initialize("GPS")
    
End Sub

Sub MapFragment1_Ready
    gmap = MapFragment1.GetMap
    
    rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        gmap.MyLocationEnabled = True
    Else
        Log("No permission!")
    End If
    
    
    
    Dim mLat, mLon As Double
    mLat = 26.081857
    mLon = -98.294106
    gmap.AddMarker2(mLat, mLon, "CyMEZ Zona Segura", 90.2)
    gmap.AddMarker2(26.094362, -98.272633, "Algun texto1", 0)
    gmap.AddMarker2(26.032302, -98.399677, "Algun texto2", 0)
    gmap.AddMarker2(26.006315, -98.212312, "Robo de Vehiculos en ésta área", 0)
    
    For i = 0 To 10 Step 1
        'Test de Añadir Marcadores Sacados de Una Base de datos por ejemplo
        gmap.AddMarker2(26.094362 + i, -98.272633 + i, "Test de prueba: " & i, (i * 10))
    Next
    'Dim JavaMapsObject As JavaObject
    'JavaMapsObject = gmap.GetUiSettings
    'JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True))
    
'    Dim cp As CameraPosition
    'cp.Initialize(26.0558219,-98.3315649,13.08)'Ubicacion Municipio Reynosa
'    cp.Initialize(gmap.MyLocation.Latitude, gmap.MyLocation.Longitude, gmap.CameraPosition.Zoom)
'    gmap.AnimateCamera(cp)
    
End Sub

Sub GPS_LocationChanged(Parametro As Location)
    Latitud = Parametro.Latitude
    Longitud = Parametro.Longitude
    
    p2.Initialize2(Latitud, Longitud)
    p1.Initialize2(Lat2, Lon2)
        Distance = p1.DistanceTo(p2)
    If Latitud <> 0 And Longitud <> 0 Then
        If Distance > 10 Then
            Lat2 = Latitud
            Lon2 = Longitud
            
            Dim cp As CameraPosition
            cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0)
            gmap.AnimateCamera(cp)
        End If
        
    End If
    
End Sub

Sub Activity_Resume
    'If GPS.GPSEnabled = False Then
    '    ToastMessageShow("Activa el GPS Del Equipo", True)
    '    StartActivity(GPS.LocationSettingsIntent)
    '    Else
    '        GPS.Start(0,0)
    '26.081857, -98.294106
    'End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    GPS.Stop
End Sub
Ese es el código con el que inicia el Main y trato de centrarme en el mapa y al moverme de ubicacion. Si me ubica en el mapa, al picarle al boton(mi ubicacion), pero no se mueve la cámara al moverme yo.
 

dhernandez

Active Member
Licensed User
Gracias a todos, aun no lo resuelvo pero estoy investigando ;) Gracias a todos
 
Top