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 :

Sélection d'un OverlayMap Ployline et Marker et implémentation Mesure Polyline [LeafLet]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut Sélection d'un OverlayMap Ployline et Marker et implémentation Mesure Polyline
    Bonjour,

    Je repars à blanc avec Leaflet pour coder une page HTML permettant d'afficher Off-Line des circuits effectués à une date donnée où figureront des marqueurs que sont les Points d'intérêt sur le circuit.

    En outre, la distance du trajet sera présente. (Visible via console.log sur le code joint)

    Pour le Off-Line un fichier annexe "POIs_Tout_GPX.js", généré par un programme préexistant en VbScript contient la base de données. Les Traces sont datées mais les WayPoints sont en vrac - tout circuit confondu -.

    L.Control.Layers affiche en overlayMap, Polylines et Markers
    1. Les dates des trajets qui afficheront trace "AAAA-MM-JJ" et WayPoints les concernant "AAMMJJnnn.jpg".
    2. A la fin tous les WayPoints de la base y compris ceux non lié à un trajet présent.


    En l'état ce développement répond à ce cahier des charges mais m'interpelle sur 2 points (Routines à revoir matérialisés par // +=+=+ dans le code) objet de ce post :

    Code HTML : 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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="utf-8" />
            <title>POIs_Tout_GPX - Version 21.09 24/09/2021</title>
            <meta name="viewport" content="width=device-width, initial-scale=1" />
            <!-- Map with Leaflet JS -->
            <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin="" />
            <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script>
     
            <!-- Plugin Leaflet issu de https://github.com/danimt/Leaflet.PolylineMeasuredDistance -->
            <script src="L.Polyline.measuredDistance.js"></script>
     
            <!-- ============================================================================== -->
            <!-- ===                Fichier POIs_Tout_GPX.js contenant Data                 === -->
            <!-- ============================================================================== -->
            <script src="POIs_Tout_GPX.js"></script>
            <!-- ============================================================================== -->
            <!-- ============================================================================== -->
            <script>
                // ==========================================================================
                // Routines en fichier js externe en prod
                // ==========================================================================
     
                // ========================================================================
                // Génération d'un élément DIV id=MyId quelconque dans la page HTML
                // ========================================================================
                function Ajouter_DIV(MyId) {
                    var body = document.getElementsByTagName("body")[0];
                    e = document.createElement("div");
                    e.id = MyId;
                    e.innerHTML = " ";
                    body.appendChild(e);
                }
     
                // ==========================================================================
                // Array des icones possible pour les marqueurs à afficher sur la carte
                // ==========================================================================
                // Charger les icônes pour les markers (une seule pour ce test)
                var wptIcon = L.icon({
                    WptNum: 7,
                    iconUrl: "pin-icon-wpt.png",
                    shadowUrl: "marker-shadow.png",
                    iconSize: [20, 20],
                    shadowSize: [30, 30],
                    iconAnchor: [10, 25],
                    shadowAnchor: [10, 27],
                    popupAnchor: [0, -27],
                });
     
                // ==========================================================================
                // Fin Routines en fichier js externe en prod
                // ==========================================================================
     
                var fen = document.getElementsByTagName("html")[0];
                var MyEcranW = fen.clientWidth - 50;
                var MyEcranH = fen.clientHeight - 20;
     
                // Paramètres de l'Url demandée pour affichage de la page
                MyUrl = "";
                // var urlParam = ExtraireParam();
                // Récupérer les informations voulues dans parametre des url
                // MyUrl = 99    > Valeur Argument TraceGPX          : POIs_Tout_GPX.htm?TraceGPX = 99
                // MyUrl = 0 à n > Valeur Argument traces AAAA-MM-JJ : POIs_Tout_GPX.htm?TraceGPX = 0 à n
                // MyUrl = urlParam["TraceGPX"];
     
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                // =+=+=+= OBJET Interrogation sur case cochée overlayMap  =+=+=+=
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                // Pour Test : MyUrl = le numéro de OverlayMap à afficher (Variable date format AAAA-MM-JJ), si 99 il s'agit de "POIs Photos"
                // MyUrl = 0 à n  : Charge la page avec la bonne trace sans cocher l'overlayMap AAAA-MM-JJ : Raison ?
                // MyURL = 99     : Charge la page avec les POIs Photos et coche bien l'overlayMap
     
                // Variable test activé pour reproduire l'anomalie ui n'existe pas avec le code 99 !
                MyUrl = "0";
     
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                var TraceWPT = wpt;
                var NewsPOIsName = false;
                var MyCircle = "";
     
                // Initialisation compteur de chargement de fichiers
                var nLoad = 0;
                var ItemPopup = "";
            </script>
        </head>
        <body>
            <script>
                Ajouter_DIV("oMap");
                document.getElementById("oMap").style.height = MyEcranH + "px";
                document.getElementById("oMap").style.width = MyEcranW + "px";
                document.getElementById("oMap").style.marginLeft = (fen.clientWidth - MyEcranW - 20) / 2 + "px";
     
                var GPX_KM;
     
                // ================================================================================================================
                // Fonds de carte gratuite sélectionnées pour iFrame map
                // ================================================================================================================
                // OSM
                var osmUrl = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
                var osmAttribution = 'Map data &copy; <a href="http://www.osm.org">OpenStreetMap</a>';
                var osmTileLayer = L.tileLayer(osmUrl, { minZoom: 4, maxZoom: 18, attribution: osmAttribution });
                var osmFrUrl = "http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png";
     
                // OSM France
                var osmFrAttribution = 'Map data &copy; <a href="http://www.osm.org">OpenStreetMap</a>';
                var osmFrTileLayer = L.tileLayer(osmFrUrl, { minZoom: 4, maxZoom: 18, attribution: osmFrAttribution });
                var osmRoadsUrl = "http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png";
     
                // Construction de la liste des Layers présents
                var baseMaps = {
                    OSM: osmTileLayer,
                    "OSM France": osmFrTileLayer,
                };
     
                var oMap = L.map("oMap").setView([46.82, 2.9], 6);
                osmTileLayer.addTo(oMap);
     
                // Préparer layer config object overlayMaps en premier
                var overlayMaps = {
                    //      Remplir selon les variables ci-dessous
                };
     
                var markers = new L.featureGroup();
                for (var n = 0; n < DateGPX.length; n++) {
                    var Polyline_and_Marker = new L.LayerGroup();
                    var polyline = L.polyline([trk[n]]).addTo(Polyline_and_Marker);
     
                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                    // =+=+=+= OBJET de mon Interrogation measuredDistance() =+=+=+=
                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                    var GPX_KM = new L.Polyline(trk[n]).measuredDistance();
                    FileGPX[n] = " : Trajet de " + GPX_KM;
     
                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                    var temp = DateGPX[n].substr(2, 8).replace("-", "").replace("-", "");
                    // Construire tableau des seuls WayPoints de(s) trace(s) sélectionnée(s) pour les positionner sur le trace
                    for (var j = 0; j < wpt.length; j++) {
                        var item = wpt[j];
                        if (item[0].substr(0, 6) == temp) {
                            ItemPopup = item[0] + "<br>" + item[1].toFixed(6) + " - " + item[2].toFixed(6);
                            marker = new L.marker([item[1], item[2]], { icon: wptIcon }).bindPopup(ItemPopup).addTo(Polyline_and_Marker);
                            markers.addLayer(marker);
                        }
                        overlayMaps["<span style='color:" + getColor(n) + "'>" + DateGPX[n] + "</span>"] = Polyline_and_Marker;
                    }
     
                    trk[n] = polyline;
                    polyline
                        .setStyle({
                            color: getColor(n),
                            weight: 3,
                            opacity: 0.8,
                        })
                        .on("mouseout", function (e) {
                            this.setStyle({
                                weight: 3,
                            });
                        })
                        .on("mouseover", function (e) {
                            this.setStyle({
                                weight: 6,
                            });
                        })
                        .on("click", function (e) {
                            oMap.fitBounds(e.target.getBounds());
                        });
     
                    // permet d'afficher un menu contextuel (non présent dans ce code)...
                    markers.on("contextmenu", function (e) {
                        // Mémoriser le numéro de l'icône du tableau POIs_GPS.js pour connaitre l'icône d'origine dans le markerClusterGroup concerné
                        WptIconNum = String(wptIcon.options.WptNum);
                        // Bidouille pour retrouver les coordonnées du marker cliqué e.target ne le permet pas !
                        for (var n = 0; n < wpt.length; n++) {
                            var item = wpt[n];
                            // Localiser Wpt_Name lié aux coordonnées du marqueur
                            if (item[1] == e.latlng.lat && item[2] == e.latlng.lng) {
                                Wpt_Name = item[0];
                            }
                        }
                        var me_ = e.layer;
                        // position pour affichage
                        var pos = {
                            x: e.originalEvent.pageX,
                            y: e.originalEvent.pageY,
                        };
                        // affiche le context-menu
                        showContextMenu(me_, pos);
                    });
                }
     
                for (var j = 0; j < wpt.length; j++) {
                    var item = wpt[j];
                    ItemPopup = item[0] + "<br>" + item[1].toFixed(6) + " - " + item[2].toFixed(6);
                    marker = new L.marker([item[1], item[2]], { icon: wptIcon }).bindPopup(ItemPopup);
                    markers.addLayer(marker);
                    // }
                    overlayMaps[POIsGPX] = markers;
                }
     
                var layerControl = new L.Control.Layers(baseMaps, overlayMaps, { collapsed: false }).addTo(oMap);
     
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                // =+=+=+=           OBJET du Dysfonctionnement  oMap.addLayer(trk[MyUrl])                =+=+=+=
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                // Si Argument TraceGPX provenant de l'url cartes_Vignettes.htm afficher la trace (MyUrl 0 à 98) ou les POIs (MyUrl 99)
                if (MyUrl != null || MyUrl != undefined) {
                    if (MyUrl != "99") {
                        oMap.addLayer(trk[MyUrl]);
                        oMap.fitBounds(trk[MyUrl].getBounds());
                    } else {
                        oMap.addLayer(markers);
                        oMap.fitBounds(markers.getBounds());
                    }
                }
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                // Surveillance du statut des cases à cocher overlays du Control.Layers
                oMap.on("overlayadd", function (e) {
                    if (e.name.indexOf("id=Load") !== -1) {
                        // Extraire id=Loadnn où nn est le code couleur de la trace du contenu html de l'élément e.name
                        reg = /id=Load[0-9]{1,3}/g;
                        res = reg.exec(e.name);
                        res = String(res).substring(7, 9);
     
                        console.log("Fichier : " + e.name);
     
                        oMap.fitBounds(e.layer.getBounds());
                    } else {
                        // Si ce n'est pas un Overlay commençant par POIs
                        if (e.name.substr(0, 4) != POIsGPX.substr(0, 4)) {
                            // Extraire la date AAAA-MM-JJ du contenu html de l'élément e.name
                            var reg = new RegExp("[0-9]{4}[\\-\\-/][0-9]{2}[\\-\\-/][0-9]{2}", "");
                            var res = reg.exec(e.name);
     
                            for (var n = 0; n < DateGPX.length; n++) {
                                if (DateGPX[n] == res) {
                                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                                    // =+=+=+=           OBJET de mon Interrogation          =+=+=+=
                                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                                    // Affichage informations KM de la trace qui vient d'être sélectionnée et affichée
                                    console.log(e.name + FileGPX[n]);
                                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
                                    // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
     
                                    // Zoom sur ce trajet
                                    var bounds = trk[n].getBounds();
                                    oMap.fitBounds(bounds);
                                }
                            }
                        } else {
                            // Afficher les POIs Photos
                            console.log("Visualisation de tous les " + e.name);
                            // Zoom sur les POIs
                            oMap.fitBounds(markers.getBounds());
                        }
                    }
                });
     
                oMap.on("overlayremove", function (e) {
                    // Code pour Reset des informatons affichéers...
                });
            </script>
        </body>
    </html>

    1 Dysfonctionnement :

    Si on fait suivre l'url d'un argument comme :

    POIs_Tout_GPX.htm?TraceGPX=1 pour ouvrir directement sur un trajet, il affiche bien ce trajet mais ne coche pas L'overlayMap de la date concernée.

    A contrario POIs_Tout_GPX.htm?TraceGPX=99 (code 99 dédié pour la totalité des WayPoints) affiche bien les markers et coche bien l'overlayMap concerné.

    Je présume que les WayPoints associés aux traces perturbent le fonctionnement … comment procéder ?


    2 Peaufinement non trouvé :

    Pour éviter de réinventer la roue j'ai choisi le plugin L.Polyline.measuredDistance.js pour calculer la distance d'un trajet

    Je n'arrive pas à implémenter la function .measuredDistance sur polyline (dans oMap.on("overlayadd", function (e) {) directement sur une trace affichée lors de la sélection d'un OverlayMap.

    En l'état il ne fonctionne qu'avec le fichier js externe avec obligation d'une new L.Polyline(trk[n]).measuredDistance(); et n'est pas accessible via la surveillance des actions sur L.Control. Ce serait donc inactif via un fichier GPX externe qui ajouterait un layer dans L.Control.Layers.

    Toutes les remarques sont les bienvenues…

    Merci beaucoup par avance,

    Cat

    NB : Une extension future – non implémentée - est envisagée pour charger un fichier GPX externe, contenant trace et WayPoints, grâce à l'API HTML 5 LoadFiles…

    Fichier zip au complet pour éventuel test...
    Pièce jointe 605414

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    j'ai déjà une 1re remarque après avoir lancé le fichier de test de la pièce-jointe : au chargement de la page, il y a seulement le chemin rouge affiché sur la page et pas les points photos de ce chemin, est ce que c'est bien le résultat voulu ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Effectivement en passage d'argument seule la trace s'affiche sans les points photo. Ce n'est pas le résultat attendu qui est une sélection Trace et ses Points existants ! Concrètement avoir la trace cochée.


    En fait je découvre la puissance de leaflet et avant de réécrire la totalité d'un codage existant j'ai consulté la doc Leaflet, des exemples trouvés sur ce site et sur d'autres.

    J'ai choisi de sortir de "la zone de confort" en créant des overlayMaps qui intégreraient Trace et Points suite à l'adaptation de ce seul code exemple trouvé : https://gist.github.com/d3noob/d473c...8ed9dbe2a401f3...


    En fait le codage existant suit les nombreux exemples indiqués dans la doc leaflet, et créé séparément Polyline et Markers. Pour afficher les points sur la trace il utilise cette portion de code au niveau surveillance du statut des cases à cocher overlays du Control.Layers que j'ai trouvé intéressante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var temp = DateGPX[i].substr(2, 8).replace("-", "").replace("-", "");
    // Construire tableau des seuls WayPoints de(s) trace(s) sélectionnée(s)
    for (var j = 0; j < wpt.length; j++) {
        if (wpt[j][0].substr(0, 6) == temp) {
            wpt_trk.push(wpt[j]);
        }
    }
    Malheureusement selon le cahier des charges, via le menu contextuel existant l'utilisateur va cliquer sur les points qui l'intéresse. L'icône fait place à une autre pour matérialiser la sélection. S'il change d'avis, un nouveau clic annule ce choix et l'icône revient à celle d'origine.

    But permettre de générer un fichier GPX à télécharger avec son propre trajet sur un GPS. De fait un tableau contient les points retenus pour construire ce fichier GPX.

    La problématique du codage "push" ci-dessus est qu'une désélection / sélection d'une trace existante effaçait les icônes modifiées et les rechargeait avec les icônes d'origine, tandis qu'avec un overlayMap intégrant traces et points, l'aspect des icônes reste, sur désélection / sélection d'une trace avec icônes, ce qui simplifie cet aspect.


    Pour le paquet de markers POIsGPX me reste néanmoins à isoler les icônes modifiées, ce que je pense faire en piochant dans le tableau prévu pour le fichier GPX, puis en testant IconUrl lors de la boucle de récupération de tous les points photos...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (String(marker.getIcon().options.iconUrl) == "pin-icon-wpt.png") {
        // Modifier couleur du marker en rouge Pin_rouge.png
        marker.setIcon(wptIcon[1]);
    }
    Après je reste à l'écoute de toute autre logique alliant simplicité et efficacité car je suis loin d'avoir toute l'expérience nécessaire sur un codage leaflet "propre" !

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    je crois qu'il y a un autre souci avec le fichier de test : une image qui appartient à plusieurs circuits n'est associé qu'à 1 circuit.
    regardez le point 190618151 (Salanches -> Cordon), il devrait appartenir aux circuits 16, 17 et 18, c'est bien ça ? pour le moment il est seulement présent dans le circuit du 17.

    j'ai encore une question par rapport à fonctionnalités recherchées, vous avez parlé de sélectionner plusieurs circuits et d'exporter la sélection. mais quelle est le but d'afficher tous les points ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Une image qui appartient à plusieurs circuits n'est associée qu'à 1 circuit.

    Excellente et intéressante remarque car il peut en exister d'autres ! Celle que vous citez en exemple est prise aux environs d'un lieu de séjour ayant un paysage digne d'intérêt. Constatez également que la nature de ce lieu en fait le point de départ de toutes les traces !

    En l'état du codage javascript actuel, la photo 190618151.jpg (date de prise de vue AAJJMM suivi d'un numéro dans la série sur 3 chiffres) est bien associée au trajet 2019-09-18 (et non 17) car prise le 18 juin 2019.

    Vous avez donc totalement raison, un point devrait être lié à sa position à proximité d'une trace, plutôt qu'à sa correspondance avec la date de la trace !

    En fait considérer les coordonnées LatLng comme centre d'un cercle ou polygone et le faire coller à la trace s'il entre dans un rayon donné de x mètres ? Créer une boucle de comparaison partant de +0.5 à -0.5 des coordonnées du point ?

    Modestement j'avoue ne pas être certaine, en l'état de mes connaissances avec leaflet d'y arriver… Je vais néanmoins y réfléchir…


    But d'afficher tous les points ?

    Béquille "ergonomique" liée à l'usage :

    1- Pouvoir utiliser une autre méthode pour composer dans la région son trajet à vol d'oiseau si l'on ne souhaite pas utiliser un circuit existant fonction de son lieu de résidence.
    Un clic droit sur la carte va ajouter un marker, qui sera le point de départ.
    Clic droit sur ce marker ouvre un menu contextuel avec possibilité de générer un cercle d'un rayon de départ 10 km
    Chaque nouveau clic droit dans la zone du cercle ajoute 10 km, chaque nouveau clic gauche retire 10 km.
    Reste à sélectionner les points d'intérêt dans la zone choisie qui consisteront les circuits à venir, éventuellement après visu Google Maps…

    2- Comparer ses propres circuits externes avec un circuit à venir, pour visualiser rapidement qu'on ne va pas revoir quelques années plus tard les mêmes lieux, ou l'ajuster (Drag and Drop) pour revoir un endroit proche qui nous particulièrement plu.

    3- Faire figurer des points d'intérets issus d'autres collectes, ou découvertes via l'ex JT de 13 h de JPP

    4- Logiquement tout point devrait figurer à proximité d'un circuit utilisé, mais il y a eu des ratés au niveau enregistrement trace, cet affichage permet de se passer des circuits réalisés...


    Précision supplémentaires pour simple information :

    Les Traces sont issues d'un DataLoger enregistrant toutes les secondes des coordonnées GPS d'une voiture et les photos sont ensuite géocodées grâce au fichier présent en ayant pris soin d'une date / heure correcte de l'appareil photo (photographie d'un chronomètre en fin de journée).

    La trace originale est simplifiée pour une reproduction avec espacement de 100 mètres.

    Cette moisson de traces et points a commencé en 2004. De fait des points qui figurent sur la trace peuvent être des photos géocodée niveau d'un parking et être prise à 500 mètres. Néanmoins il existait un point d'intérêt à proximité.

    Les points sont issus d'une moisson de photos prises dans une zone de séjour donnée. On n'en conserve qu'un seul - généralement la date la plus ancienne -, à un endroit donné dans un rayon de 100 mètres, pour ne pas superposer de nombreux Markers sur la carte.

    En résumé ne retenir qu'un point puis le suivant à une distance minimale de 100 mètres à vol d'oiseau. Cela indépendamment de la date de prise de vue.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    quand j'ai commencé à lire votre réponse je me suis dit "ah oui la date est dans le nom de l'image, c'est plus simple que prévu" et ensuite j'ai lu le reste de votre réflexion et je me suis repris des tartines de complexité en plus.

    je pense que le souci principal est que pour la couche "tous les points" vous réutilisez la variable "markers" déjà utilisée pour les autre couches. si vous utilisez une autre variables vous verrez que les points ne sont plus liés mais l'inconvénient est que chaque point est en double dans le tracé et dans la couche "tous les points".

    une piste à étudier est de faire pour chaque tracés :
    - 1 featureGroup "points" qui contient les points
    - 1 featureGroup tracé
    - et ensuite 1 featureGroup qui rassemble les 2 précédents pour controler leur affichage dans L.Control.
    ensuite pour le choix "tous les points" vous mettez un featureGroup vide. et lors des évènements "overlayadd" et "overlayremove", si c'est la case "tous les points" qui change d'état, vous parcourez tous les tracés pour savoir s'il sont affichés ou non et ensuite vous affichez les featureGroup "points" correspondants.

    je n'ai pas encore testé cette piste puisque étant donné que vous êtes parti sur une autre façon de gérer les points par rapport à la distance, le fichier de test n'est peut-être plus d'actualité.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mathieu Voir le message
    vous êtes parti sur une autre façon de gérer les points par rapport à la distance, le fichier de test n'est peut-être plus d'actualité.
    Gérer les points par rapport à la distance, serait effectivement LA solution au constat que vous avez soulevé. Mais j'évite de me lancer dans des codages mal maitrisé où je risque des bidouilles !

    Sauf erreur, et à défaut d'une routine propriétaire à leaflet où d'un plugin, cette approche me parait très complexe et surtout risquée du fait qu'en région montagneuse un point espacé uniquement à vol d'oiseau de 200 mètres peut nécessiter 40 km de trajet !


    La méthode utilisé par mon prédécesseur convient parfaitement et à le mérite de la simplicité... Elle restera en l'état.


    Dans la piste que vous proposez je suppose que le dysfonctionnement constaté en ouverture de trace par argument serait levé :

    "1 featureGroup "points", 1 featureGroup "tracés" et ensuite 1 featureGroup qui rassemble les 2 précédents"

    mais cela signifie-t-il, une case à cocher "Date de Trace" qui affichera trace et points associés à la trace et permettra d'insérer la mesure de distance directement sur la polyline sans devoir utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var GPX_KM = new L.Polyline(trk[n]).measuredDistance();
    Merci par avance

  8. #8
    Membre à l'essai
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mathieu Voir le message
    ../
    une piste à étudier est de faire pour chaque tracés :
    - 1 featureGroup "points" qui contient les points
    - 1 featureGroup tracé
    - et ensuite 1 featureGroup qui rassemble les 2 précédents pour controler leur affichage dans L.Control.
    ../
    Merci de m'avoir aiguillé sur cette piste de featureGroup global qui m'a permise de consolider mes connaissances sur leaflet - pauvre en exemple style "Utilisation avancée" - via cette url : https://stackoverflow.com/questions/...o-featuregroup.

    Un codage beaucoup plus simple et clair que le source complexe affiché !

    Sujet clos, un grand merci pour votre expertise !

    Cat,

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

Discussions similaires

  1. [LeafLet] Lecture des valeurs des markers d'une couche leaflet.
    Par Podzef dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 15/07/2021, 09h47
  2. LEAFLET : marker de l'outil de recherche
    Par saxrub dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 05/06/2021, 08h26
  3. [Leaflet] : markers dans PHP
    Par augier26 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/11/2018, 20h50
  4. [LeafLet] Transformer markers en polyligne
    Par yole9 dans le forum jQuery
    Réponses: 4
    Dernier message: 15/06/2017, 16h59
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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