Markerclusterer on Map with PHP echo XML

Asked

Viewed 223 times

0

Hello,

I am developing a map looking at the google api and the first step is completed, bring all establishments within the map, to be able to do this I looked at the google reference How to use Mysql and PHP with Google Maps. Now whenever I open the map shows me several markers inside São Paulo, but not to appear so close, I want to use the markerclusterer to join all of them when they are very close and here is where I watered, because the code I wrote to bring the establishments on the map is to pull the establishment information via xml and the reference code I’m using for the Marker is static.

Code without Markerclusterer

<script>
  var customLabel = {
    restaurante: {
      label: 'R'
    },
    bar: {
      label: 'B'
    }
  };

    function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
//  center: new google.maps.LatLng(-23.5278805, -46.801652),
      center: new google.maps.LatLng(-23.5505199, -46.6333094),
      zoom: 13
    });
    var infoWindow = new google.maps.InfoWindow({map: map});

      // Change this depending on the name of your PHP or XML file
      downloadUrl('http://app.liveclube.com/connectdata/', function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName('marker');
        Array.prototype.forEach.call(markers, function(markerElem) {
          var name = markerElem.getAttribute('name');
          var address = markerElem.getAttribute('address');
          var type = markerElem.getAttribute('type');
          var point = new google.maps.LatLng(
              parseFloat(markerElem.getAttribute('lat')),
              parseFloat(markerElem.getAttribute('lng')));

          var infowincontent = document.createElement('div');
          var strong = document.createElement('strong');
          strong.textContent = name
          infowincontent.appendChild(strong);
          infowincontent.appendChild(document.createElement('br'));

          var text = document.createElement('text');
          text.textContent = address
          infowincontent.appendChild(text);
          var icon = customLabel[type] || {};
          var marker = new google.maps.Marker({
            map: map,
            position: point,
            label: icon.label
          });
          marker.addListener('click', function() {
            infoWindow.setContent(infowincontent);
            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>

After that, I created another map with markerclusterer syntax.

Code of Markerclusterer

<div id="map"></div>
<script>

  function initMap() {

    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 3,
      center: {lat: -28.024, lng: 140.887}
    });

    // Create an array of alphabetical characters used to label the markers.
    var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    // Add some markers to the map.
    // Note: The code uses the JavaScript Array.prototype.map() method to
    // create an array of markers based on a given "locations" array.
    // The map() method here has nothing to do with the Google Maps API.
    var markers = locations.map(function(location, i) {
      return new google.maps.Marker({
        position: location,
        label: labels[i % labels.length]
      });
    });

    // Add a marker clusterer to manage the markers.
    var markerCluster = new MarkerClusterer(map, markers,
        {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
  }
  var locations = [
    {lat: -31.563910, lng: 147.154312},
    {lat: -33.718234, lng: 150.363181},
    {lat: -33.727111, lng: 150.371124},
    {lat: -33.848588, lng: 151.209834},
    {lat: -33.851702, lng: 151.216968},
    {lat: -34.671264, lng: 150.863657},
    {lat: -35.304724, lng: 148.662905},
    {lat: -36.817685, lng: 175.699196},
    {lat: -36.828611, lng: 175.790222},
    {lat: -37.750000, lng: 145.116667},
    {lat: -37.759859, lng: 145.128708},
    {lat: -37.765015, lng: 145.133858},
    {lat: -37.770104, lng: 145.143299},
    {lat: -37.773700, lng: 145.145187},
    {lat: -37.774785, lng: 145.137978},
    {lat: -37.819616, lng: 144.968119},
    {lat: -38.330766, lng: 144.695692},
    {lat: -39.927193, lng: 175.053218},
    {lat: -41.330162, lng: 174.865694},
    {lat: -42.734358, lng: 147.439506},
    {lat: -42.734358, lng: 147.501315},
    {lat: -42.735258, lng: 147.438000},
    {lat: -43.999792, lng: 170.463352}
  ]
</script>
<script src="https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/markerclusterer.js">
</script>

The problem with this code is that Locations is static and I wanted to get the information I already have inside the connectdata.php

inserir a descrição da imagem aqui

Could someone tell me how to link both codes?

1 answer

0

The variable "Locations" is in format JSON, then you just need to convert the XML data to the format JSON.

For ease you can use a JSON javascript (.JS) file instead of XML, and import it into your PHP/HTML page

Example of file contents (js markers.) :

locations = [
  {lat: -31.563910, lng: 147.154312},
  {lat: -33.718234, lng: 150.363181},
  {lat: -33.727111, lng: 150.371124}
];

Import Example:

<html>
<head>
    <!--import-->
    <script src="marcadores.js"></script>
</head>
<body>
    <script>
      //criacao de mapa ========================
    </script>
...

Or if you want to convert your XML to JSON, then you have these examples here:

https://stackoverflow.com/questions/36929478/xml-string-to-json-javascript

Browser other questions tagged

You are not signed in. Login or sign up in order to post.