Récupération des données depuis ma base de donnée
luckycky
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
Codekila Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
Codekila Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis étudiant, et dans le cadre de projet je dois développer une carte avec 2 types de marqueurs pour différencier 2 "cas" (positif et négatif)
Après de longue heures de recherche j'ai réussi à obtenir ma carte avec une conversion de l'adresse de la base de donnée en coordonnées gps (logi, lagi).
Il me reste la dernière étape, réussir à afficher tous mes marqueurs sur la carte. J'arrive à en afficher un (la première ligne du résultat de ma requête). Il faudrait donc faire une boucle, j'avais pensé à stocker le résultat de ma requête dans un tableau, puis l'extraire au moment de var positif, ou var negatif comme je vais avoir après une autre requête mais ça reste le même principe. Donc si quelqu'un peut me donner des idées, j'ai passé pas mal de temps en vain, je n'ai jamais réussi.
Merci d'avance,
EDIT : correction des balises de code
Je suis étudiant, et dans le cadre de projet je dois développer une carte avec 2 types de marqueurs pour différencier 2 "cas" (positif et négatif)
Après de longue heures de recherche j'ai réussi à obtenir ma carte avec une conversion de l'adresse de la base de donnée en coordonnées gps (logi, lagi).
Il me reste la dernière étape, réussir à afficher tous mes marqueurs sur la carte. J'arrive à en afficher un (la première ligne du résultat de ma requête). Il faudrait donc faire une boucle, j'avais pensé à stocker le résultat de ma requête dans un tableau, puis l'extraire au moment de var positif, ou var negatif comme je vais avoir après une autre requête mais ça reste le même principe. Donc si quelqu'un peut me donner des idées, j'ai passé pas mal de temps en vain, je n'ai jamais réussi.
Merci d'avance,
<?php include ('./../script/connexion.php'); $requete = "select adresse_cheptel, code_postal, commune_cheptel, nom_eleveur, count(*) from qualyse1_cheptel c, qualyse1_prelevement p where c.id_cheptel=p.id_cheptel and resultat='neg' group by adresse_cheptel, code_postal, commune_cheptel, nom_eleveur LIMIT 1 "; echo $requete; $result = $connexion -> query($requete); $res = $result -> fetch(); echo $res['adresse_cheptel']; echo $res['code_postal']; echo $res['commune_cheptel']; $nom=$res['nom_eleveur']; echo $nom; $data = array( 'postalcode' => $res['code_postal'], 'city' => $res['commune_cheptel'], 'country' => 'france', 'format' => 'json', ); $url = 'https://nominatim.openstreetmap.org/?' . http_build_query($data); echo $url; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mettre ici un user-agent adéquat'); $geopos = curl_exec($ch); curl_close($ch); $resp = json_decode($geopos, true); // get the important data echo $lati = $resp[0]['lat']; echo $longi = $resp[0]['lon']; ?>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- Nous chargeons les fichiers CDN de Leaflet. Le CSS AVANT le JS --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin="" /> <script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script> <script type="text/javascript"> // Nous initialisons une liste de marqueurs, les cheptels positifs var positif = { <?php echo '"'.$nom.'"' ?> : { "lat": <?php echo $lati ?>, "lon": <?php echo $longi ?> }, "Brest": { "lat": 48.383, "lon": -4.500 }, "Quimper": { "lat": 48.000, "lon": -4.100 }, "Bayonne": { "lat": 43.500, "lon": -1.467 } }; // Nous initialisons une liste de marqueurs, les cheptels négatifs var positif = { var negatif = { <?php echo '"'.$nom.'"' ?> : { "lat": <?php echo $lati ?>, "lon": <?php echo $longi ?> }, "Brest": { "lat": 49.383, "lon": -4.500 }, "Quimper": { "lat": 46.000, "lon": -4.100 }, "Bayonne": { "lat": 44.500, "lon": -1.467 } }; // On initialise la latitude et la longitude de Niort (centre de la carte) var lat = 46.323780; var lon = -0.457087; var macarte = null; // Fonction d'initialisation de la carte function initMap() { // Créer l'objet "macarte" et l'insèrer dans l'élément HTML qui a l'ID "map" macarte = L.map('map').setView([lat, lon], 11); // Leaflet ne récupère pas les cartes (tiles) sur un serveur par défaut. Nous devons lui préciser où nous souhaitons les récupérer. Ici, openstreetmap.fr L.tileLayer('https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', { // Il est toujours bien de laisser le lien vers la source des données attribution: 'données © <a href="//osm.org/copyright">OpenStreetMap</a>/ODbL - rendu <a href="//openstreetmap.fr">OSM France</a>', minZoom: 1, maxZoom: 20 }).addTo(macarte); // Nous parcourons la liste des cheptels positifs for (ville in positif) { // Nous définissons l'icône à utiliser pour le marqueur, sa taille affichée (iconSize), sa position (iconAnchor) et le décalage de son ancrage (popupAnchor) var myIconpos = L.icon({ iconUrl: "./marq.png", iconSize: [50, 50], iconAnchor: [25, 50], popupAnchor: [-3, -76], }); var marker = L.marker([positif[ville].lat, positif[ville].lon], { icon: myIconpos }).addTo(macarte); // Nous ajoutons la popup. A noter que son contenu (ici la variable ville) peut être du HTML marker.bindPopup(ville); } // Nous parcourons la liste des cheptels négatifs for (ville in negatif) { // Nous définissons l'icône à utiliser pour le marqueur, sa taille affichée (iconSize), sa position (iconAnchor) et le décalage de son ancrage (popupAnchor) var myIconneg = L.icon({ iconUrl: "./marqeur.png", iconSize: [50, 50], iconAnchor: [25, 50], popupAnchor: [-3, -76], }); var marker = L.marker([negatif[ville].lat, negatif[ville].lon], { icon: myIconneg }).addTo(macarte); // Nous ajoutons la popup. A noter que son contenu (ici la variable ville) peut être du HTML marker.bindPopup(ville); } } window.onload = function(){ // Fonction d'initialisation qui s'exécute lorsque le DOM est chargé initMap(); }; </script> <style type="text/css"> #map{ /* la carte DOIT avoir une hauteur sinon elle n'apparaît pas */ height:400px; } </style> <title>Carte</title> </head> <body> <div id="map"> <!-- Ici s'affichera la carte --> </div> </body> </html>
EDIT : correction des balises de code
A voir également:
- Récupération des données depuis ma base de donnée
- Fuite données maif - Guide
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Base de registre - Guide
- Sauvegarde des données - Guide
1 réponse
Bonjour,
Tu as plusieurs valeurs dans ta variable $resp ?
car pour l'instant.. tu ne récupères, comme tu le dis, que la première ligne.. puisque tu pointes sur la ligne 0
(au passage... les echo ici sont inutiles !!)
et donc..oui.. il suffit de faire une boucle sur ta variable $resp ..
et pour convertir un array PHP en JS ...
https://www.codexworld.com/how-to/convert-php-array-to-javascript-array/
Ensuite, tu n'as plus qu'à boucler dessus en JAVASCRIPT
par exemple (à adapter à ton code)
Autre petit souci je pense...
tu redéclares positif .. alors que tu l'as déjà initialisé quelques lignes plus haut.... mais là.. c'est un souci côté javascript et non php...(donc.. autre forum )
Tu as plusieurs valeurs dans ta variable $resp ?
car pour l'instant.. tu ne récupères, comme tu le dis, que la première ligne.. puisque tu pointes sur la ligne 0
// get the important data echo $lati = $resp[0]['lat']; echo $longi = $resp[0]['lon'];
(au passage... les echo ici sont inutiles !!)
et donc..oui.. il suffit de faire une boucle sur ta variable $resp ..
et pour convertir un array PHP en JS ...
https://www.codexworld.com/how-to/convert-php-array-to-javascript-array/
var resp = <?php echo json_encode($resp); ?>;
Ensuite, tu n'as plus qu'à boucler dessus en JAVASCRIPT
par exemple (à adapter à ton code)
for (i = 0; i < locations.length; i++) { marker = new google.maps.Marker({ position: new google.maps.LatLng(resp[i]['lat'], resp[i]['lon']), map: macarte }); }
Autre petit souci je pense...
// Nous initialisons une liste de marqueurs, les cheptels négatifs var positif = { var negatif = {
tu redéclares positif .. alors que tu l'as déjà initialisé quelques lignes plus haut.... mais là.. c'est un souci côté javascript et non php...(donc.. autre forum )
Merci de ta réponde rapide!
Oui j'ai plusieurs variables dans mon $resp, mais il s'agit de la conversion d'une adresse en coordonnées GPS, voici un exemple de ce que j'ai à partir de
https://nominatim.openstreetmap.org/?postalcode=86400&city=CHAMPNIERS&country=france&format=json
[{"place_id":"198159545","licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":"135520","boundingbox":["46.1925486","46.2390537","0.2858084","0.3700597"],"lat":"46.217558","lon":"0.3374014","display_name":"Champniers, Montmorillon, Vienne, Nouvelle-Aquitaine, France métropolitaine, 86400, France","class":"boundary","type":"administrative","importance":0.5040168450086261,"icon":"https://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png"}]
Je ne peux donc pas bouclé dans sur ma variable $resp
Les echo c'est juste pour moi pour afficher pour être sur que ça marche, je les enlèverai après.
Donc j'ai voulu créer des array pour chaque adresse (chaque résultat de ma requête) dans ma boucle while, (voir ci dessous, $liste+$i en sachant que mon $i augmente de un à chaque tour, ce qui me permet d'avoir $liste1, $liste2... pour chaque adresse différent si je ne me trompe pas), j'arrive bien à les extraire dans ma boucle while, mais si j'essaye de les extraire à l'extérieur avec une boucle for sur $i, mes tableaux renvoient à rien.
</code>
C'est une erreur de ma part pour le doublon de la var positif,
mais directement
(et tu retires les deux autres
que tu as mis dans ton code.
Puis... apprend à utiliser les array..... tu nous fais une tambouilles bizarre...
regarde, par exemple, ce que fait (j'insiste..ce n'est qu'un exemple de manipulation d'array pas la réponse à ta question directement ! ) :
As you have two option either create seprate variable and initialize only geo coordinate to it at server side.
And you can also do it on at client side by converting your php array to js array.
You can check here how to convert php array to javascript array -
https://codekila.com/convert-php-array-into-javascript-array/