Question

L'API GOOGLE MAPS V3 est ce que j'essaie d'utiliser.

J'ai toutes les coordonnées dans mysql. Par exemple, je dois simplement prendre 5 listes et les mettre sur une carte, mais j'aimerais pouvoir trouver le point central en fonction des coordonnées multiples que je souhaite afficher, ainsi que du niveau de zoom. Ouais sais?

Je passe des moments agréables avec quelque chose que je sais terriblement simple, je ne peux tout simplement pas comprendre cette API. Je paierai 20 $ à quiconque pourra m'aider.

//select * from mysql limit 5

//ok great we got 5 results, great job, format the 5 results so google maps like it, [name,lat,lng] whatever.

//put them on the map and let them be clickable so i can put stuff in the infowindow thing

//make the map adjust to the proper zoom level and center point

UPDATE

C’est ce que je cherchais, espérons que cela aidera les autres.

crédit à [Chris B] pour la formule mathématique du sens commun pour obtenir le coord centre, le cordon est le plus bas lat et lon, et le plus petit coord est le plus grand lat et lon

sort($lat)&&sort($lon);
$r['c'] = array_sum($lat)/count($lat).', '.array_sum($lon)/count($lon);
$r['ne'] = $lat[count($lat)-1].', '.$lon[count($lon)-1];
$r['sw'] = $lat[0].', '.$lon[0];
var myOptions = {zoom:4,center: new google.maps.LatLng(<?php echo $r['c']; ?>),mapTypeId:google.maps.MapTypeId.ROADMAP}
var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
<?php foreach($x as $l) echo 'new google.maps.Marker({position:new google.maps.LatLng('.$l['lat'].','.$l['lon'].'),map:map,clickable:true});'; ?>
map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(<?php echo $r['sw']; ?>),new google.maps.LatLng(<?php echo $r['ne']; ?>)));
Était-ce utile?

La solution

Si un point central moyen / pondéré est acceptable, vous pouvez simplement faire la moyenne de toutes les latitudes et la moyenne de toutes les longitudes:

$latTotal = 0;
$lngTotal = 0;
foreach ($markers as $marker) {
    $latTotal += $marker['lat'];
    $lngTotal += $marker['lng'];
}

$centerLat = $latTotal/count($markers);
$centerLng = $lngTotal/count($markers);

Pour le reste, quelques bons didacticiels V3 sur Google .

Autres conseils

J'utilisais Google Maps v3 il y a un mois ou deux, mais je suis passé plus tard à la v2. Cependant, j'avais le même problème que vous et j'ai donc écrit une classe MarkerManager pour API v3. Je ne trouve pas la dernière version de ma classe, mais j’en ai trouvé une qui fonctionne. Vous pouvez l'obtenir ici .

Je dois vous avertir cependant - ce n’est pas du tout optimisé et n’utilise pas de superpositions. C’est pourquoi, lorsque j’ai essayé de mettre plus de 50 marqueurs dans le gestionnaire et de basculer le cache / montrer la classe est lente ... Mais vous pouvez peut-être avoir un peu de succès avec elle.

Exemple d'utilisation:

var map = new google.maps.Map(document.getElementById('MapLayerId'), {
    zoom: 7,
    position: new google.maps.LatLng(latitude, longitude),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker1 = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    map: map
});
var marker2 = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    map: map
});
var manager = new MarkerManager(map, {fitBounds: true});
manager.add(marker1);
manager.add(marker2);
manager.show();

GDownloadUrl dans V2 équivalent downloadUrl dans GOOGLE MAPS API V3

Comment charger toutes les coordonnées dans la base de données (Mysql ou Sql).

var myLatlng = new google.maps.LatLng("37.427770" ,"-122.144841");
var myOptions = {zoom: 15, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP,}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var url='marker.php?arg1=x&arg2=y...'; 

downloadUrl(url, function(data) {
      var markers = data.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
        var marker = new google.maps.Marker({position: latlng, map: map});
       }
});


function createXmlHttpRequest() {
 try {
   if (typeof ActiveXObject != 'undefined') {
     return new ActiveXObject('Microsoft.XMLHTTP');
   } else if (window["XMLHttpRequest"]) {
     return new XMLHttpRequest();
   }
 } catch (e) {
   changeStatus(e);
 }
 return null;
};


function downloadUrl(url, callback) {
     var status = -1;
     var request = createXmlHttpRequest();
     if (!request) {
        return false;
     }     
     request.open('GET', url);     
     request.onreadystatechange = function() {
        if (request.readyState == 4) {
            try {
                status = request.status;
            } catch (e) {
                // Usually indicates request timed out in FF.
            }     
            if (status == 200) {
                 var s=request.responseText;
                 callback( xmlParse(s) ); 
            }
        }
     }  
     try {    
        request.send(null);      
     }catch (e) {    
        changeStatus(e);
     } 
};

function xmlParse(str) {

  if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  }
  if (typeof DOMParser != 'undefined') {
    return (new DOMParser()).parseFromString(str, 'text/xml');
  }
  return createElement('div', null);
}

Avez-vous consulté le didacticiel PHP / Mysql officiel de Google Map? http://code.google.com/apis/maps/articles/phpsqlajax. html

Essayez cet algorithme pour trouver le centroïde d'un polygone:

http://tog.acm.org/resources/GraphicsGems/gemsiv /centroid.c

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top