IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Mettre latitude, longitude et zoom en url


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 153
    Points : 85
    Points
    85
    Par défaut Mettre latitude, longitude et zoom en url
    Bonjour,

    Je cherche à mettre en paramètres d'url la latitude, la longitude et le zoom pour l'affichage d'une carte et que ces paramètres changent suivant que l'on se déplace dans cette carte.

    Je travaille sur Mapbox/Maplibre et en JS/Jquery (pas de Vue, React ou Angular du coup)

    Il s'agit, semble t il d'utiliser UrlParams mais je ne sais pas comment faire.

    Est ce que quelqu'un aurait des pistes ?

    Merci :-)

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 100
    Points : 44 872
    Points
    44 872
    Par défaut
    Bonjour,
    tu récupères la position de ton marqueur, le zoom actif de la carte et tu crées ton paramètre.
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const pos = marker.getLatLng();
    const zoom = map.getZoom();
    const search = "lat=" + pos.lat.toFixed(6) + "&lon=" + pos.lng.toFixed(6) + "&z=" + zoom;
    document.location.search = search;
    à adapter bien sûr !

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 153
    Points : 85
    Points
    85
    Par défaut
    Merci pour ton retour,

    J'en suis là actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
     
      map.on('moveend', (e) => {
     
          var zoom = map.getZoom() || 7;
          var latitude = map.getCenter().lat || 47;
          var longitude = map.getCenter().lng || 2;
     
          var params = "lat=" + latitude + "&lon=" + longitude + "&zoom=" + zoom;
     
          var new_url = new URL('https://monurl.fr/index.php?' + params);
     
    document.location.search = new_url;
     
     
        })
     
        map.on('zoomend', (e) => {
     
          var zoom = map.getZoom() || 7;
          var latitude = map.getCenter().lat || 47;
          var longitude = map.getCenter().lng || 2;
     
          var params = "lat=" + latitude + "&lon=" + longitude + "&zoom=" + zoom;
     
          var new_url = new URL('https://monurl.fr/index.php?' + params);
     
    document.location.search = new_url;
     
     
        })
    Le problème est que le document.location.search = new_url rafraichit la page...

    Des idées ?

    merci pour vos retours

    Sylvain

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Points : 283
    Points
    283
    Par défaut
    Pour construire la query string je recommande d'utiliser un objet URLSearchParams, puis d'appeler History.pushState, ou History.replaceState, selon que l'on veut créer ou non une entrée dans l'historique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.history.replaceState({}, '', '?zoom=7')

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 153
    Points : 85
    Points
    85
    Par défaut
    Pour les gens qui se poseraient la même question que moi, cad comment faire une URL dynamique avec la longitude, la latitude et le zoom avec une carte Mapbox/Maplibre.

    Je met ce code, je ne sais pas trop pourquoi ça marche mais ça se comporte comme je le souhaite. Surement que ce code est un peu gras et mérite d'être optimisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    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
    75
    76
     
    var defaultZoom = 10;
    var defaultLat = 45;
    var defaultLng = 5;
     
    function getQueryVariable(variable)
    {
           var query = window.location.search.substring(1);
           var vars = query.split("&");
           for (var i=0;i<vars.length;i++) {
                   var pair = vars[i].split("=");
                   if(pair[0] == variable){return pair[1];}
           }
           return(false);
    }
     
    //convert URL parameter to a variable and a number
    var urlZoom = +getQueryVariable("zoom");
    var urlLat = +getQueryVariable("lat");
    var urlLng = +getQueryVariable("lng");
     
    //check if URL parameters are set, if not, fallback to default
    if (urlZoom == 0) {
        myZoom = defaultZoom;
    } else {
        myZoom = urlZoom;
    }
    if (urlLat == 0 ) {
        myLat = defaultLat;
    } else {
        myLat = urlLat;
    }
    if (urlLng == 0) {
        myLng = defaultLng;
    } else {
        myLng = urlLng;
    }
     
        const map = new maplibregl.Map({
          container: 'map', // container's id or the HTML element in which MapLibre GL JS will render the map
          style: {
            version: 8,
            sources: {},
            layers:[]
          },
          center: [myLng, myLat], // starting position [lng, lat]
          zoom: myZoom, // starting zoom
          pitch: 0,
          bearing: 0,
          maxPitch: 80,
          maxZoom: 21
        });
     
     
        map.on('moveend', (e) => {
     
          var new_url = new URLSearchParams();
     
          var myZoom = new_url.get('zoom') || map.getZoom().toFixed(0);
          var myLat = new_url.get('lat') || map.getCenter().lat.toFixed(4);
          var myLng = new_url.get('lng') || map.getCenter().lng.toFixed(4);
     
          var params = "zoom="+ myZoom +'&lng='+ myLng + '&lat=' + myLat;
     
          window.history.pushState({}, '', '?'+params)
     
        })
     
        map.on('zoomend', (e) => {
     
          var new_url = new URLSearchParams();
     
          var myZoom = new_url.get('zoom') || map.getZoom().toFixed(0);
          var myLat = new_url.get('lat') || map.getCenter().lat.toFixed(4);
          var myLng = new_url.get('lng') || map.getCenter().lng.toFixed(4);
    })

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 100
    Points : 44 872
    Points
    44 872
    Par défaut
    Tu ne peux pas utiliser ton pushState comme cela et il vaut mieux utiliser replaceState pour éviter que l'historique ne s'allonge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const url = new URL(window.location);
    url.searchParams.set("lat", map.getCenter().lat.toFixed(6));
    url.searchParams.set("lon", map.getCenter().lng.toFixed(6));
    url.searchParams.set("z", map.getZoom());
    window.history.replaceState({}, "", url);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche de pays par Latitude/Longitude
    Par ram-0000 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/04/2008, 12h42
  2. recherche 1 position (latitude longitude) la + proche
    Par 83stef dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/05/2007, 20h52
  3. [CSV] extraire latitude/longitude de google map
    Par arnogef dans le forum Langage
    Réponses: 14
    Dernier message: 30/03/2007, 15h32
  4. [DOM] Mettre à jour un fichier XML (par URL)
    Par ensiie dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 21/01/2007, 12h56
  5. Conversion Latitude,Longitude en UTM pour débutant.
    Par Messie dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/04/2006, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo