Google Maps API v3 - PHP - MYSQL

4 Cevap php

GOOGLE MAPS API V3 ben kullanmaya çalışıyorum budur.

Ben mysql tüm koordinatları var. Ben sadece, örneğin, 5 listelerini almak ve bir harita üzerinde onları koymak gerekir ama ben göstermek istiyorum birden koordinatlarına göre merkez noktasını bulmak mümkün olmak istiyorum, ve de yakınlaştırma düzeyi ediyorum. Evet, biliyor musun?

Ben korkunç basit olduğunu biliyorum şey hayatımın zaman yaşıyorum, ben sadece bu API anlamaya olamaz. Bana yardımcı olabilecek herkese 20 $ paypal edeceğiz.

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


Bu, başkalarına yardımcı olur umarım, ben ne arıyordu olduğunu.

merkez COORd almak için sağduyu matematik formülü için [Chris B] kredi, sw kordon düşük enlem ve boylam, ve ne koord büyük enlem ve boylam olduğunu

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']; ?>)));

4 Cevap

Ortalama / ağırlıklı merkez nokta kabul edilebilir - Eğer ki sadece ortalama tüm enlemler ve ortalama tüm boylamlar:

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

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

Bunun geri kalanı için, bazı iyi V3 dersler vardır on Google.

Google Maps geri bir ay ya da iki v3, ancak daha sonra v2 geçiş kullanıyordu. Bunu ben API v3 için bir MarkerManager sınıf yazdım Ancak, ben aynı problem vardı. Benim sınıfın son sürümünü bulamıyorum, ama bir çalışma, umarım, bir buldun. You can get it here.

Ama seni uyarmak zorunda - bu hiç optimazed değil ve bindirmeleri kullanarak değil, bu yüzden yöneticisi 50 + işaretçileri koyarak denedim ve toggle zaman gizlemek / sınıf sloooow olduğunu gösteriyor ... Ama belki bazı başarı olabilir o.

Kullanımı örnek:

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();

GOOGLE MAPS API V3 V2 eşdeğer downloadURL içinde GDownloadUrl

Veritabanındaki tüm koordinatlar (Mysql veya Sql) nasıl yüklenir.

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);
}

Bir çokgenin merkezini bulmak için bu algoritma deneyin:

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