Frage

Google Maps API V3 ist, was ich zu verwenden, ich versuche.

Ich habe alle Koordinaten in mysql. Ich, nur zum Beispiel, müssen 5 Inserate nehmen und sie auf eine Karte setzen, aber ich möchte in der Lage sein, den Mittelpunkt auf der mehrere Koordinaten zu finden basiert ich anzeigen möchten, und die Zoom-Ebene. Ja wissen?

Ich bin die beste Zeit meines Lebens mit etwas, das ich weiß, schrecklich einfach, ich kann einfach nicht diese API herauszufinden. Ich werde $ 20 für jeden paypal, der mir helfen kann.

//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


Das ist das, was ich suchte, hoffe, das hilft anderen.

Kredit [Chris B] für die gemeinsamen mathematische Formel Sinn für das Zentrum coord bekommen, das sw Kabel ist die niedrigste lat und lon, und die ne coord ist der größte lat und 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']; ?>)));
War es hilfreich?

Lösung

Wenn ein durchschnittlicher / gewichtete Mittelpunkt ist akzeptabel - man konnte nur durchschnittlich alle Breiten und durchschnittlich alle Längen:

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

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

Für den Rest, es gibt einige gute V3 Tutorials auf Google .

Andere Tipps

Ich war mit Google Maps v3 einen oder zwei Monate zurück, wechselte aber später v2. Allerdings hatte ich das gleiche Problem wie du, damit ich eine MarkerManager Klasse für API v3 geschrieben. Ich kann nicht die neueste Version von meiner Klasse finden, aber ich habe eine finden, hoffentlich, arbeitete ein. Sie können es hier erhalten.

Ich muss Sie allerdings warnen - es ist nicht überhaupt ist optimazed und nicht Overlays verwenden, so dass, wenn ich 50+ Marker im Manager versucht setzen und ein- und die hide / show die Klasse sloooow ... Aber vielleicht können Sie einiger Erfolg damit.

Anwendungsbeispiel:

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 in V2 äquivalent downloadURL in Google Maps API V3

Wie alle Koordinaten in der Datenbank laden (Mysql oder 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);
}

Haben Sie die PHP offiziellen google map ausgecheckt / Mysql Tutorial? http://code.google.com/apis/maps/articles/phpsqlajax. html

Versuchen Sie diesen Algorithmus für die Suche nach dem Schwerpunkt eines Polygons:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top