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

Langage PHP Discussion :

enregistrement dynamique de points sur une map


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    enregistrement dynamique de points sur une map
    Suite à cette discussion,
    Bonjour et merci pour votre aide mon problème est résolu.

    Mais j'ai un autre problème. Il est le suivant.
    Chaque terrain doit être repéré sur carte avec les coordonnées GPSPAS DE PROBLEME POUR MOI : DEJA FAIT
    Mais on doit voir la forme géométrique de ce terrain sur une carte MAP comme cette photo.
    Le triangle en bleu(pas de problème pour moi)



    Le soucis maintenant c'est que tous les terrains n'ont pas cette forme (sur 3 points fixe)

    Les formes varient d'un terrain à un autre. Certains sont formés de 4 points, d'autres de 5 points, d'autres de 7 points, etc.

    Je peux afficher le nombre de champ de manière dynamique au niveau du formulaire, mais les valeurs ne seront pas ajoutées de manière dynamique dans mon fichier de traitement.

    Comment faire donc pour en enregistrement dynamique de ces points ?

    Cordialement

  2. #2
    Invité
    Invité(e)
    BOnjour,

    montre déjà comment tu fais pour 3 points.

  3. #3
    Membre confirmé
    Pour l'envoie des données dans la BD pas de problème.

    Voici le bout de code qui affiche mon triangle.

    Code PHP :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
     
    <body>
     
                <div id="mapid" style="width: 1350px; height: 640px;"></div>
                <script>
                        //Je centre la carte au Cameroun
                    var mymap = L.map('mapid').setView([3.601662, 11.309035], 6);
     
                    L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
                        maxZoom: 10,
                        attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
                            '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
                            'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
                        id: 'mapbox/streets-v11',
                        tileSize: 512,
                        zoomOffset: -1
                    }).addTo(mymap);
     
                    <?php
                    //appel du fichier de connexion à la base
                        require('include/connexionBD.php');
     
                    //j'affiche tous les enregistrements de ma table
                        $reponse = $bdd->query('SELECT id, lat1, lng1, lat2, lng2, lat3, lng3 FROM terrain');
     
                    //je récupère les enregistrements avec la fonction fetch() et je les met dans le tableau $donées
                        while ($donnees = $reponse->fetch())
                        {
     
                            $id = $donnees['id'];
                            $lat1 = $donnees['lat1'];
                            $lng1 = $donnees['lng1'];
     
                            $lat2 = $donnees['lat2'];
                            $lng2 = $donnees['lng2'];
     
                            $lat3 = $donnees['lat3'];
                            $lng3 = $donnees['lng3'];
     
                    ?>
                    L.polygon([
                        [<?php echo $donnees['lat1']; ?>, <?php echo $donnees['lng1']; ?>],
                        [<?php echo $donnees['lat2']; ?>, <?php echo $donnees['lng2']; ?>],
                        [<?php echo $donnees['lat3']; ?>, <?php echo $donnees['lng3']; ?>]
                    ]).addTo(mymap).bindPopup("Je suis le terrain de M. Jean .");
     
     
                    <?php } ?>
     
                    var popup = L.popup();
     
                    function onMapClick(e) {
                        popup
                            .setLatLng(e.latlng)
                            .setContent("You clicked the map at " + e.latlng.toString())
                            .openOn(mymap);
                    }
     
                    mymap.on('click', onMapClick);
                </script>
            </body>



    RESULTAT :


    Cordialement.

  4. #4
    Invité
    Invité(e)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
                        $reponse = $bdd->query('SELECT id, lat1, lng1, lat2, lng2, lat3, lng3 FROM terrain');


    SI je comprends bien, les 3 points sont enregistrés en Bdd dans la table "terrain", chacun sur 2 colonnes "latx" et "lngx".
    Ce n'est pas la bonne méthode si tu veux pouvoir créer des terrains avec plus de 3 points.

    Il te faut une 2ème table "terrain_dot" (par exemple), qui contiendra les coordonnées "lat" et "lng" de chaque point.

    table "terrain" :
    • id (INT) AUTO-INCREMENT

    table "terrain_dot" :
    • id_dot (INT) AUTO-INCREMENT
    • id_terrain (INT)
    • lat
    • lng

    La requête devient alors :
    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T.id, TD.lat, TD.lng
    FROM terrain T
    INNER JOIN terrain_dot TD
     ON T.id = TD.id_terrain

    Là, tu peux définir autant de points que tu veux pour chaque terrain.

    Il faut alors adapter le code PHP pour récupérer/afficher tous les points dans le code JS.

  5. #5
    Membre confirmé
    C'est compris j'essaie. Je trouve que c'est logique.

    Cordialement

  6. #6
    Invité
    Invité(e)
    Une autre solution, avec UNE SEULE table :
    • mettre les couples de coordonnées (lat/lng) dans un array
    • utiliser json_encode() pour les stocker en Bdd (dans UNE SEULE colonne)
    • utiliser json_decode() au moment du traitement PHP (pour récupérer l'array


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $arr = [
    	[1,2],
    	[3,4],
    	[5,6],
    	[7,8],
    ];
    $arr_ser = serialize( $arr );
    echo $arr_ser;
    var_dump( unserialize( $arr_ser ) );
    ?>

    Plus simple, car on récupère tout en une fois.

  7. #7
    Membre confirmé
    Bonsoir les développeurs et merci beaucoup pour votre aide.

    Cordialement.