Pregunta

GOOGLE MAPS API V3 es lo que estoy tratando de usar.

Tengo todas las coordenadas en mysql. Simplemente, por ejemplo, necesito tomar 5 listados y ponerlos en un mapa, pero me gustaría poder encontrar el punto central en función de las múltiples coordenadas que me gustaría mostrar, y el nivel de zoom también. Sí, ¿sabes?

Estoy teniendo el mejor momento de mi vida con algo que sé que es terriblemente simple, simplemente no puedo entender esta API. Pagaré $ 20 a cualquiera que pueda ayudarme.

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

ACTUALIZACIÓN


Esto es lo que estaba buscando, espero que esto ayude a otros.

crédito a [Chris B] por la fórmula matemática de sentido común para obtener el coord central, el cordón es el lat y lon más bajo, y el ne coord es el lat y lon más grande

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']; ?>)));
¿Fue útil?

Solución

Si un punto central promedio / ponderado es aceptable, puede promediar todas las latitudes y promediar todas las longitudes:

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

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

Para el resto, hay algunos buenos tutoriales de V3 en Google .

Otros consejos

Estaba usando Google Maps v3 hace un mes o dos, pero luego cambié a v2. Sin embargo, tuve el mismo problema que tú, así que escribí una clase MarkerManager para API v3. No puedo encontrar la última versión de mi clase, pero encontré una, espero, que funcione. Puede obtenerlo aquí .

Sin embargo, tengo que advertirte: no está optimizado en absoluto y no está usando superposiciones, así que cuando intenté poner más de 50 marcadores en el administrador y activé la función de ocultar / mostrar la clase es muy baja ... Pero tal vez puedas tener algo de éxito con eso.

Ejemplo de uso:

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 en V2 equivalente downloadUrl en GOOGLE MAPS API V3

Cómo cargar todas las coordenadas en la base de datos (Mysql o 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);
}

¿Has echado un vistazo al tutorial oficial de Google Map PHP / Mysql? http://code.google.com/apis/maps/articles/phpsqlajax. html

Pruebe este algoritmo para encontrar el centroide de un polígono:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top