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

APIs Google Discussion :

Clustering d'un affichage Gmaps a partir base de données MySQL [Google Maps]


Sujet :

APIs Google

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Clustering d'un affichage Gmaps a partir base de données MySQL
    Bonjour à tous,

    Je cherche à créer des clusters de points de coordonnée contenu dans une base de donnée.

    Voila ce que cela donne :

    Générateur PHP de sortie au format KML (XML) des infos de la bd - phpsqlajax_genxml3.php

    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
    <?php
     
    require("phpsqlajax_dbinfo.php");
     
    // Start XML file, create parent node
     
    $dom = new DOMDocument("1.0");
    $node = $dom->createElement("markers");
    $parnode = $dom->appendChild($node);
     
    // Opens a connection to a MySQL server
     
    $connection=mysql_connect ('localhost', $username, $password);
    if (!$connection) {  die('Not connected : ' . mysql_error());}
     
    // Set the active MySQL database
     
    $db_selected = mysql_select_db($database, $connection);
    if (!$db_selected) {
      die ('Can\'t use db : ' . mysql_error());
    }
     
    // Select all the rows in the markers table
     
    $query = "SELECT * FROM markers WHERE 1";
    $result = mysql_query($query);
    if (!$result) {
      die('Invalid query: ' . mysql_error());
    }
     
    header("Content-type: text/xml");
     
    // Iterate through the rows, adding XML nodes for each
     
    while ($row = @mysql_fetch_assoc($result)){
      // ADD TO XML DOCUMENT NODE
      $node = $dom->createElement("marker");
      $newnode = $parnode->appendChild($node);
      $newnode->setAttribute("name",$row['name']);
      $newnode->setAttribute("address", $row['address']);
      $newnode->setAttribute("lat", $row['lat']);
      $newnode->setAttribute("lng", $row['lng']);
      $newnode->setAttribute("type", $row['type']);
    }
     
    echo $dom->saveXML();
     
    ?>
    Affichage de la carte avec l'ensemble des coordonnée récupéré dans la bd (via le fichier gen précédent)

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <!DOCTYPE html >
      <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>PHP/MySQL & Google Maps Example</title>
        <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
        <script type="text/javascript">
        //<![CDATA[
     
        var customIcons = {
          restaurant: {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'
          },
          bar: {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'
          }
        };
     
        function load() {
          var map = new google.maps.Map(document.getElementById("map"), {
            center: new google.maps.LatLng(47.6145, -122.3418),
            zoom: 13,
            mapTypeId: 'roadmap'
          });
          var infoWindow = new google.maps.InfoWindow;
     
          // Change this depending on the name of your PHP file
          downloadUrl("phpsqlajax_genxml.php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
              var name = markers[i].getAttribute("name");
              var address = markers[i].getAttribute("address");
              var type = markers[i].getAttribute("type");
              var point = new google.maps.LatLng(
                  parseFloat(markers[i].getAttribute("lat")),
                  parseFloat(markers[i].getAttribute("lng")));
              var html = "<b>" + name + "</b> <br/>" + address;
              var icon = customIcons[type] || {};
              var marker = new google.maps.Marker({
                map: map,
                position: point,
                icon: icon.icon
              });
              bindInfoWindow(marker, map, infoWindow, html);
            }
          });
        }
     
        function bindInfoWindow(marker, map, infoWindow, html) {
          google.maps.event.addListener(marker, 'click', function() {
            infoWindow.setContent(html);
            infoWindow.open(map, marker);
          });
        }
     
        function downloadUrl(url, callback) {
          var request = window.ActiveXObject ?
              new ActiveXObject('Microsoft.XMLHTTP') :
              new XMLHttpRequest;
     
          request.onreadystatechange = function() {
            if (request.readyState == 4) {
              request.onreadystatechange = doNothing;
              callback(request, request.status);
            }
          };
     
          request.open('GET', url, true);
          request.send(null);
        }
     
        function doNothing() {}
     
        //]]>
     
      </script>
     
      </head>
     
      <body onload="load()">
        <div id="map" style="width: 500px; height: 300px"></div>
      </body>
     
    </html>

    A partir de la je souhaite que les points sur la carte soit regroupé en "cluster".
    Pour cela j'ai trouvé la solution trouvé ici : https://developers.google.com/maps/a...arkerclusterer
    Les sources sur GitHUB
    et plus d'exemples https://googlemaps.github.io/js-mark.../examples.html

    Donc je souhaite ajouter le code suivant à mon fichier d'affichage de la carte html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var center = new google.maps.LatLng(37.4419, -122.1419);
    var options = {
      'zoom': 13,
      'center': center,
      'mapTypeId': google.maps.MapTypeId.ROADMAP
    };
     
    var map = new google.maps.Map(document.getElementById("map"), options);
    var mc = new MarkerClusterer(map);
    Je m'arrache un peu les cheveux !!
    Un peu d'aide ?? Cela serait bienvenue )

    (Si vous voulez tester avec une base de donnée : créer bd phpsqlajax_createtable.sql
    peupler la bd : phpsqlajax_data.csv)

  2. #2
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    merci à google qui m'a répondu ici : https://code.google.com/p/gmaps-api-...&ts=1439665354
    (je n'ai pas réussi à faire fonctionner le code mis en réponse mais sur http://stackoverflow.com/questions/6...mysql-database)

    Pour ceux à qui cela peut servir :

    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
    // Change this depending on the name of your PHP file
    downloadUrl("phpsqlajax_genxml3.php", function(data) {
        var xml = data.responseXML;
        var clusteredmarkers = [];
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type = markers[i].getAttribute("type");
            var point = new google.maps.LatLng(
                parseFloat(markers[i].getAttribute("lat")),
                parseFloat(markers[i].getAttribute("lng")));
            var html = "<b>" + name + "</b> <br/>" + address;
            var icon = customIcons[type] || {};
            var marker = new google.maps.Marker({
                map: map,
                position: point,
                icon: icon.icon,
                shadow: icon.shadow
            });
            clusteredmarkers.push(marker);
            bindInfoWindow(marker, map, infoWindow, html);
        }
        var markerCluster = new MarkerClusterer(map, clusteredmarkers); //this also add the cluster to the map
    });

    Ne pas oublier d'initialiser le script de clustering :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script>
    var script = '<script type="text/javascript" src="src/markerclusterer';
    if (document.location.search.indexOf('compiled') !== -1) {
    script += '_compiled';
    }
    script += '.js"><' + '/script>';
    document.write(script);
    </script>

    dont vous trouverez la source ici https://github.com/googlemaps/js-marker-clusterer

    Bon dev à tous !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2013, 16h55
  2. [MySQL] Affichage image d'un base de données mysql
    Par argon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2008, 11h33
  3. Menu deroulant creer a partir d'une base de donnée mysql
    Par schwinny dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/06/2006, 15h48
  4. Affichage de la fenetre base de données
    Par C.M dans le forum Access
    Réponses: 11
    Dernier message: 16/05/2006, 16h18

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