2010-11-19 2 views
1

Sur mon site Web, j'ai un formulaire qui permet aux utilisateurs de s'inscrire. Il demande aux utilisateurs de fournir leur ville, état et pays. J'ai également une carte qui laisse tomber un marqueur pour chaque utilisateur basé sur un lat/lng qui est tiré de cette ville, état, combinaison de pays ($ location). Parce que je ne suis pas super spécifique (comme dans, je ne demande pas leur adresse réelle), j'ai un certain nombre d'utilisateurs qui ont le même lat/lng. Et cela crée un problème en essayant de voir les marqueurs sur ma carte.Cluster même lat/lng gmaps v3

Dois-je utiliser un service de cluster? Si oui, avez-vous des suggestions? Comme je l'ai dit, les informations proviennent de la base de données MySQL -> XML -> PHP.

Si oui, il sera regroupé au niveau le plus zoomé (comme je l'ai dit, même lat/lng). En conséquence, je vais avoir besoin d'une fenêtre d'information qui me permet de sélectionner chaque utilisateur à cet endroit particulier.

Des idées? Suggestions??? Très appréciée!!!

Jeremy

Répondre

2

MarkerClusterer: http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/docs/examples.html

ou à la main (à peu près - exemple de code seulement!)

 var latlng = new google.maps.LatLng(-33.8671390, 151.2071140); 
     var myOptions = { 
      zoom: 8, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

     var markers = []; 
     var newmarkers = []; 

     for(var j=0; j<5; j++) { 
      markers.push({lat:-33.8671390, lng:151.2071140, title:'This is marker #' + i }); 

      if(j==0) newmarkers.push(markers[j]); 
      for(var i=0; i<newmarkers.length; i++) { 
       if(newmarkers[i].lat == markers[j].lat && newmarkers[i].lng == markers[j].lng) { 
        newmarkers[i].title += ' AND ' + markers[j].title; 
        continue; 
       } 
       newmarkers.push(markers[j]); 
      } 
     } 

     for(var i=0; i<newmarkers.length; i++) { 
      var mkr = new google.maps.Marker({ 
       position: new google.maps.LatLng(newmarkers[i].lat, newmarkers[i].lng), 
       map: map, 
       title: newmarkers[i].title 
      }); 
     } 
+0

Jonathan: a pris un coup d'œil à ce lien. Merci de l'avoir envoyé. Je ne suis pas sûr que cela fasse ce dont j'ai besoin. On dirait que la plupart des marqueurs sont tirés de différents ensembles lat/lng. Alors que beaucoup de miennes seront les mêmes. Suggestions??? – jthespartan

+0

Cette bibliothèque effectue une mise en cluster basée sur les carrés. Cela signifie que vous définissez une distance en pixels et que tout ce qui se trouve dans la boîte est groupé. Donc, vous pouvez essayer de définir une petite valeur de distance. Sinon, vous devrez analyser votre collection de lieux et l'ajouter à une autre collection, en vérifiant chaque emplacement par rapport à ceux de la nouvelle collection. – Jonathan

+0

J'ai un certain nombre de personnes énumérant "Vance AFB, OK, USA" comme emplacement. La lat/lng pour ceci est: lat = "36.343071" lng = "- 97.907806". Donc, vous dites que lorsque j'entre cette information dans ma base de données, je devrais transformer ce dernier chiffre à chaque fois? Cela pourrait être plutôt cool ... d'avoir plusieurs marqueurs dans un petit espace. Ensuite, les utilisateurs n'auront qu'à zoomer pour voir qui est là. Cette carte est principalement à des fins "d'effet". Une base de données triable fournit toutes les informations réelles. – jthespartan

0

Je pensais que je voudrais coller mon code:

function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(47.614495, -122.341861), 2); map.enableScrollWheelZoom();

GDownloadUrl("world_xml.php", function(data) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var first_name = markers[i].getAttribute("first_name"); var last_name = markers[i].getAttribute("last_name"); var email = markers[i].getAttribute("email"); var affiliation = markers[i].getAttribute("affiliation"); var status = markers[i].getAttribute("status"); var service = markers[i].getAttribute("service"); var rank = markers[i].getAttribute("rank"); var specialty = markers[i].getAttribute("specialty"); var city = markers[i].getAttribute("city"); var state = markers[i].getAttribute("state"); var country = markers[i].getAttribute("country"); var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = createMarker(point, rank, first_name, last_name, email, affiliation, status, service, specialty, city, state, country); map.addOverlay(marker); } });

} }

function createMarker (point, rang, prénom, nom de famille, adresse électronique, affiliation, statut, service, spécialité, ville, état, pays) { var marker = new GMarker (point); var html = "" + rank + "" + prénom + "" + last_name + "
" + service + "," + statut + "
" + spécialité + "
" + affiliation + "
" + ville + "," + état + "" + pays + "
" + email + "
" + ""; GEvent.addListener (marqueur, 'clic', fonction() { marker.openInfoWindowHtml (html); }); marqueur de retour; }

Questions connexes