2012-05-17 26 views
27

Kodu question numaralı telefona kopyaladım ve enlem ve boylamlarımı uyguladı. Ancak, enlem ve boylamlar dinamik olacak ve haritanın center konumu, konumların enlem ve boylamlarına bağlı olarak değişecektir.Google Haritalar'da birden çok konumun merkezini bulun

şu dinamik yerleri olan zaman haritanın merkezini nasıl bilebilirdik

<!DOCTYPE html> 
<html> 

    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
     <title>Google Maps Multiple Markers</title> 
     <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> 
    </head> 

    <body> 
     <div id="map" style="width: 500px; height: 400px;"></div> 
     <script type="text/javascript"> 
      var locations = [ 
       ['Bondi Beach', -33.890542, 151.274856, 4], 
       ['Coogee Beach', -33.923036, 151.259052, 5], 
       ['Cronulla Beach', -34.028249, 151.157507, 3], 
       ['Manly Beach', -33.80010128657071, 151.28747820854187, 2], 
       ['Maroubra Beach', -33.950198, 151.259302, 1] 
      ]; 

      var map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 10, 
       center: new google.maps.LatLng(-33.92, 151.25), 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }); 

      var infowindow = new google.maps.InfoWindow(); 

      var marker, i; 

      for (i = 0; i < locations.length; i++) { 
       marker = new google.maps.Marker({ 
        position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
        map: map 
       }); 

       google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.setContent(locations[i][0]); 
         infowindow.open(map, marker); 
        } 
       })(marker, i)); 
      } 
     </script> 
    </body> 

</html> 

Yani benim sorudur diğer soruya gelen kodudur. center boştan çıkmayı denedim ancak harita yüklenmedi.

cevap

82

İlk önce tüm dinamik olarak oluşturulan konumları ekleyerek bir LatLngBounds nesnesi oluşturabilirsiniz. Noktaları dahil etmek için uzatma yöntemini kullanın. Daha sonra getCenter yöntemini kullanarak sınırın merkezini alabilirsiniz.

GÜNCELLEME:

Kodu:

var bound = new google.maps.LatLngBounds(); 

for (i = 0; i < locations.length; i++) { 
    bound.extend(new google.maps.LatLng(locations[i][2], locations[i][3])); 

    // OTHER CODE 
} 

console.log(bound.getCenter()); 

İllüstrasyon:

enter image description here

+2

sınırlar içinde harita zoom ve merkezi UI sığdırmak için kod (bağlı) map.fitBounds ekleyin. –

0

Ben enlemleri ortalama ve boylam ortalama ve bu kullanarak yapıyorum merkezim olarak ortalamalar.

Örnek:

self.adjustPosition = function() { 
    var lat = 0, lng = 0; 

    if (self.nearbyPlaces().length == 0) { 
     return false; 
    } 

    for (var i = 0; i < self.nearbyPlaces().length; i++) { 
     lat += self.nearbyPlaces()[i].latitude; 
     lng += self.nearbyPlaces()[i].longitude; 
    } 

    lat = lat/self.nearbyPlaces().length; 
    lng = lng/self.nearbyPlaces().length; 

    self.map.setCenter(new window.google.maps.LatLng(lat, lng)); 
}; 
0

o sayıların "orta" almak numaralarını ortalama ve çünkü bu yaklaşım çalışmaz (enlem/boylam). Böyle düşünün, ABD'de 6, CA'da bir tane ve kuzeyde ve güneyde doğu kıyısında 5 tane var. Doğu kıyısındaki 5, haritayı ortalama olarak sağa (doğuya) ve merkez noktanız Gürcistan çevresinde (Doğudan Batıya) ağırlık verir. Eğer getCenter kullanmaktan kaçınmak istiyorsanız, en yüksek ve en düşük doğu yönünü (lat +/- ve uzun +/-) bulmak ve her bir yönün ortasını aşırı uçlara sahip olduğunuzda bulmak isteyeceksiniz.

0
private LatLng computeCentroid(List<LatLng> points) { 
double latitude = 0; 
double longitude = 0; 
int n = points.size(); 

for (LatLng point : points) { 
    latitude += point.latitude; 
    longitude += point.longitude; 
} 

return new LatLng(latitude/n, longitude/n); 

}

İlgili konular