Spanish Leaflet Map B4J server

francisco duran

Member
Licensed User
Longtime User
Hola, estoy realizando un desarrollo que involucra mapas de openstreatmap en B4J server (con Leaflet). Utilice el ejemplo que coloque Eurojam y funciona muy bien.

Estoy necesitando poder recibir el evento CLICK de un Marker en código de B4J (para poder saber cual fue el marker seleccionado)

Muchas gracias
 

TILogistic

Expert
Licensed User
Longtime User
1.- el código del ejemplo funciona pero esta desactualizada la versión de leaflet.
2.- Sabes como funciona b4j_ws
3.- Sabes algo de Jquery
4.- Sabes algo Leaflet

Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
1.- actualizar y ordenar codigo de la demo archivo index.html directorio leaflet\Objects\www

usar layer https://www.openstreetmap.org/ que NO necesita api key

HTML:
<html>
    <head>
        <title>Web App: Leaflet Map</title>
        <script src="https://unpkg.com/leaflet@latest/dist/leaflet-src.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

        <link rel="stylesheet" href="https://unpkg.com/leaflet@latest/dist/leaflet.css" />
        <link rel="stylesheet" type="text/css" href="index.css" />
        <script src="/b4j_ws.js"></script>
        <script>
            $( document ).ready(function() {
                b4j_connect("/ws");
            });
        </script>
     </head>
     
     <body>
        <h1>Web App: Leaflet Map example</h1>
        <p>
        <input type="radio" name="goto" value="0" checked>Anywhere Software<br/>
        <input type="radio" name="goto" value="1">eurojams last exit<br/>
        <button id="btngoto">GoTo</button>
        </p>
        <div id="map" style="width: 600px; height: 400px"></div>
     </body>
     
     <script>
        var map = L.map("map").setView([46.947, 7.4448], 12);
        
        L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
          attribution: '&copy; <a href="https://osm.org/copyright">OpenStreetMap</a> contributors'
        }).addTo(map);
        
        function gtlatlon(lat, lon, zoom, txt) {
            map.setView([lat, lon], zoom);              // The function goto latlon
            L.marker([lat, lon]).addTo(map).bindPopup(txt).openPopup();
        }

        var marker = new L.Marker([46.947, 7.4448]).on('click', markerOnClick).addTo(map);

        function markerOnClick(e)
        {
            alert("hi. you clicked the marker at " + e.latlng);
        }        

    </script>
 </html>
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
2.- usar b4j_raiseEvent para enviar los datos del marcador al servidor B4J
javascrits agregar:
JavaScript:
        function markerOnClick(e)
        {
            alert("hi. you clicked the marker at " + e.latlng);
             b4j_raiseEvent("markerOnClick_Click", {"latlng" : e.latlng });
        }

b4J:
B4X:
Sub markerOnClick_Click (Params As Map)
    Log(Params.Get("latlng"))
End Sub

{lng=7.4448, lat=46.947}

Nota la latencia es un poco lenta por defecto, pero la puedes acelerar configurando los parámetros del servidor B4J.
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
3.- veremos cuando tienes varios marcadores en el map y deseas saber a cual se hizo clic.

como este ejemplo:

Pero creo que ya tienes una idea de como poder hacerlo..

esta todo en b4j_raiseEvent que llama a los eventos de servidor b4j
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
Network latency

 

francisco duran

Member
Licensed User
Longtime User
Hola, muchísimas gracias, me funciono perfecto para lo que necesito. Dios te pague.

Quiero hacer otra cosa pero la verdad no pude, yo creo mas o menos 500 puntos en el mapa, cada uno tiene un texto. Quisiera poder regresar al programa en B4J el texto también. Con la información que me enviaste me regresan las coordenadas, pero no logre adicionar que también retornara el texto. Esto es porque debo identificar claramente cual de todos los puntos fue el que seleccionaron.

Mil gracias
 

TILogistic

Expert
Licensed User
Longtime User
puedes adjuntar un ejemplo del javascripts de lo que estas haciendo con los marcadores.

para ayudarte.

saludos.
 

kableman

New Member
3.- veremos cuando tienes varios marcadores en el map y deseas saber a cual se hizo clic.

como este ejemplo:

Pero creo que ya tienes una idea de como poder hacerlo..

esta todo en b4j_raiseEvent que llama a los eventos de servidor b4j
Buenas tardes, perdon por escribir en un hilo antiguo, pero tengo una consulta con respecto a este tema, cuando tomo este ejemplo de trabajar con mapas, y hago click sobre el maker, este trae al b4j en el evento las coordenadas perfectamente, ahora si el maker tiene el texto expuesto por encima, es como que el evento click es sobre ese bindpopup y no sobre el maker, y no logro hacer que el b4j lea las coordenadas del maker, o no se como resolverlo! Gracias.
 
Top