Spanish [SOLUCIONADO]B4J gmap_MarkerClick (SelectedMarker As Marker)

mvera

Active Member
Licensed User
Longtime User
hola

Estoy aprendiendo b4j y estoy usando jgooglemaps
ya carque los puntos en el mapa y todo bien , me gustaria que al hacerle click a un icono cargado en el mapa , sacarle un valor como un "id"(cargado desde la bd) , no entiendo como hacerlo dentro del Sub gmap_MarkerClick (SelectedMarker As Marker) .


B4X:
Sub gmap_MarkerClick (SelectedMarker As Marker)
    Log("ENTRO A CLICK ")
    ShowInfoWindow(SelectedMarker, gmap)
 
End Sub

cargo los puntos en el mapa asi:

B4X:
Dim m As Marker=gmap.AddMarker2(RS.GetString("la"),RS.GetString("lo"),RS.GetString("id"),File.GetUri(File.DirAssets,"camara4.png"))



gracias.
 

mvera

Active Member
Licensed User
Longtime User
encontre en el ejemplo este sub tambien que al hacer click en el icono del mapa entra aqui.

B4X:
Private Sub ShowInfoWindow (Marker As Marker, Map As GoogleMap)
    If MarkerInfos.ContainsKey(Marker) Then
        Dim info As JavaObject = MarkerInfos.Get(Marker)
        Dim jMap As JavaObject = Map
        jMap = jMap.GetField("map")
        info.RunMethod("open", Array (jMap, Marker))
       
    End If
    Log("ENTRO POR AQUI")
   
End Sub
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
con la rutina con la que creas el marker, una vez creado metelo en un map, con el Key y de Value, toda la informacion que necesitas, podrias poner otro mapa o una lista.
 

mvera

Active Member
Licensed User
Longtime User
hola , créanme que he intentado lo que me platea Enrique Gonzales , pero aun no doy con la formula de ponerlo en un "map" , me falta conocimiento para entender bien como poner el valor cuando se hace click en un marker para sacarlo los valores dentro de map.


B4X:
Dim m As Marker=gmap.AddMarker2(RS.GetString("latitud"),RS.GetString("longitud"), "Marker #",File.GetUri(File.DirAssets,"camara4.png"))
Entiendo que tengo que meter los posibles valores latitud,longitud y title dentro del market

B4X:
Sub gmap_MarkerClick (SelectedMarker As Marker)
    ShowInfoWindow(SelectedMarker, gmap)
Dim m As Map
  
End Sub
Pero no se como ponerlo dentro de un map y despues extraerlo aqui.


B4X:
Private Sub ShowInfoWindow (Marker As Marker, Map As GoogleMap)
  
  
    If MarkerInfos.ContainsKey(Marker) Then
        Dim info As JavaObject = MarkerInfos.Get(Marker)
        Dim jMap As JavaObject = Map
        jMap = jMap.GetField("map")
        info.RunMethod("open", Array (jMap, Marker))
    End If
  
End Sub
o talvez desde aqui.

gracias a todos.
 

mvera

Active Member
Licensed User
Longtime User
en b4a lo ocupo asi y funciona perfecto.

Log("aaa:"&SelectedMarker.Title)
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Hola mvera!

como yo lo pienso la solucion seria algo asi:

B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Type markerInfo (lat As Double, ln As Double, title As String)
    Private gmap As GoogleMap
    Private mapOfMarkers As Map
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    'MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    gmap.Initialize("test",Null)
    mapOfMarkers.Initialize
   
   
    Dim m As Marker = gmap.AddMarker(100,100,"test")
    Dim mk As markerInfo
    mk.lat = 100
    mk.ln = 100
    mk.title = "test"
   
    mapOfMarkers.Put(m,mk)
   
   
   
    MainForm.Show
End Sub

'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

private Sub test_MarkerClick (SelectedMarker As Marker)
    Dim mk As markerInfo = mapOfMarkers.Get(SelectedMarker)
    Log(mk.title)
End Sub
 

mvera

Active Member
Licensed User
Longtime User
muchas gracias , nunca hubiera llegado a la solución sin tu ayuda , pero tengo una duda.

Asi cargo los puntos y los pone en el mapa sin problema y los cargo en MK
pero
B4X:
Dim RS As ResultSet =sql1.ExecQuery("select * from camaras")
       Do While RS.NextRow
       
    
        Dim m As Marker=gmap.AddMarker2(RS.GetString("latitud"),RS.GetString("longitud"), "Marker #",File.GetUri(File.DirAssets,"camara4.png"))
       
        
         mk.lat =RS.GetString("latitud")
         mk.ln =RS.GetString("longitud")
         mk.title =RS.GetString("id")
        
         mapOfMarkers.Put(m,mk)
  
     
 
       
       Loop
    RS.Close



B4X:
Sub gmap_MarkerClick (SelectedMarker As Marker)
    ShowInfoWindow(SelectedMarker, gmap)
     Dim mk As markerInfo = mapOfMarkers.Get(SelectedMarker)
     Log(mk.title)
     Log(mk.lat)
End Sub

El problema que detecte es que siempre el LOG me muestra el mismo valor es como si mk solo guarda el ultimo valor , no el grupo de valores.

Alguna idea del porque?

Muchas gracias por la gran ayuda.
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Es es por esto:

aqui en esta funcion, tienes que declarar el mk as markerInfo, si lo declaras como variable global (como si lo debes de hacer con el mapa) solo se va guardar el ultimo estatus de cada iteracion
B4X:
Dim RS As ResultSet =sql1.ExecQuery("select * from camaras")
       Do While RS.NextRow
      
  
        Dim m As Marker=gmap.AddMarker2(RS.GetString("latitud"),RS.GetString("longitud"), "Marker #",File.GetUri(File.DirAssets,"camara4.png"))
      
         dim mk2 as markerInfo 
         mk2.initialize
         mk2.lat =RS.GetString("latitud")
         mk2.ln =RS.GetString("longitud")
         mk2.title =RS.GetString("id")
      
         mapOfMarkers.Put(m,mk2)
 
       Loop
    RS.Close

y con eso.
 
Top