Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

markerclusterer limits

Hi this is my first post here..

I have been playing around with google maps trying to make a list of campsites in France.

I have got to the point of reading an xml file of the data Loading the map and clustering the results and it all works but very slow.

Q1 Is there a limit on the number of markers you can render even using the clusterer (there are >7000 records at the moment)

Q2 Is there anything obviously wrong with the code I have so far:

    <!DOCTYPE html>
<html>
 <head>
  <title>Read XML in Microsoft Browsers</title>
      <script src="http://maps.google.com/maps/api/js?sensor=false&language=en&region=GB" type="text/javascript"></script>
      <script src="scripts/markerclusterer.js" type="text/javascript"></script>
      <link rel="stylesheet" type="text/css" href="stylesheets/style_1024.css" />
   <script type="text/javascript">
       var xmlDoc;
       function loadxml() {
           xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
           xmlDoc.async = false;
           xmlDoc.onreadystatechange = readXML;
           xmlDoc.load("xml_files/France_all.xml");
       }

       function readXML() {
           if (xmlDoc.readyState == 4) {
               //alert("Loaded");
               //set up map
               var map = new google.maps.Map(document.getElementById('map'), {
                   zoom: 10,
                   center: new google.maps.LatLng(0, 0),
                   mapTypeControl: true,
                   mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
                   navigationControl: true,
                   mapTypeId: google.maps.MapTypeId.ROADMAP
               });

               var bounds = new google.maps.LatLngBounds();
               var infowindow = new google.maps.InfoWindow({ maxWidth: 100 });
               var marker, i

               var markers = [];
               var html = [];

               var x = (xmlDoc.getElementsByTagName("placemark").length);
               //for (i = 0; i < x; i++) {
               for (i = 0; i < x; i++) {
                   //document.write(xmlDoc.documentElement.childNodes[1].firstChild.tagName) + '<br>';
                   desc = xmlDoc.getElementsByTagName("description")[i].text;
                   lat = parseFloat((xmlDoc.getElementsByTagName("latitude")[i].text));
                   lon = parseFloat((xmlDoc.getElementsByTagName("longitude")[i].text));
                   myicon = (xmlDoc.getElementsByTagName("icon")[i].text);
                   //create new point
                   var point = new google.maps.LatLng(lat, lon);

                   //create new marker
                   marker = new google.maps.Marker({
                       position: point,
                       panControl: false,
                       map: map,
                       icon: myicon
                   });

                   //increae map bounds
                   bounds.extend(point);
                   //fit to bounds
                   map.fitBounds(bounds);

                   //add reference to arrays
                   markers.push(marker);
                   html.push(desc);

                   //add listener
                   google.maps.event.addListener(marker, 'click', (function (marker, i) {
                       return function () {
                           infowindow.setContent(html[i]);
                           infowindow.open(map, marker);
                       }
                   })(marker, i));

                   //alert(i + " " + desc +" added!");
               };
               //var mc = new MarkerClusterer(map);
              var mcOptions = {gridSize: 50, maxZoom: 15 };
              var mc = new MarkerClusterer(map, markers, mcOptions);
           }

       }
  </script>


 </head>

 <body onload="loadxml()">

 <div style="height:100%; width:100%">
    <div id="map" style="float:left; width:50%; height:100%">
        <!--filled via script-->
    </div>
     <div style="float:left; width:50%; height:100%">
        <h4>Select Region</h4>
       <select>
        <option value="Alsace" onclick="loadxml()">Alsace</option>
       </select>
     </div>
 </div>

 </body>
</html> 
like image 949
lifeson Avatar asked Nov 12 '22 21:11

lifeson


1 Answers

This article may help. A tile based solution (FusionTables, KmlLayer, or a server based custom map) will render more quickly than native Google Maps API v3 objects, even with clustering. You may be seeing the transfer and processing time of the xml file.

like image 182
geocodezip Avatar answered Nov 15 '22 13:11

geocodezip