2012-05-17 33 views
27

में एकाधिक स्थानों का केंद्र खोजें मैंने अभी इस question पर कोड कॉपी किया है और मेरे अक्षांश और अक्षांश को लागू किया है। हालांकि, अक्षांश और अक्षांश गतिशील होंगे, और नक्शे के center स्थान के अक्षांश और अक्षांश के आधार पर बदल जाएंगे।Google मानचित्र

निम्नलिखित अन्य प्रश्न

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

तो मेरे सवाल है, मैं कैसे मानचित्र के मध्य यह जान सके कि जब गतिशील स्थानों होने से कोड है। मैंने center खाली छोड़ने का प्रयास किया है लेकिन नक्शा लोड नहीं हुआ था।

उत्तर

82

सबसे पहले आप सभी गतिशील रूप से जेनरेट किए गए स्थानों सहित LatLngBounds ऑब्जेक्ट बना सकते हैं। अंक शामिल करने के लिए विस्तार विधि का प्रयोग करें। फिर आप getCenter विधि का उपयोग कर बाउंड का केंद्र प्राप्त कर सकते हैं।

अद्यतन:

कोड:

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

उदाहरण:

enter image description here

+2

कोड को map.fitBounds (बाध्य) जोड़े मानचित्र ज़ूम और केंद्र यूआई सीमा के भीतर फिट करने के लिए। –

0

मैं अक्षांश और देशांतर औसत औसत और उन का उपयोग करके यह कर रहा हूँ मेरे केंद्र के रूप में औसत।

उदाहरण:

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

क्योंकि यह संख्या औसत और संख्या के "मध्यम" नहीं मिलेगा यह दृष्टिकोण काम नहीं करता है (अक्षांश/देशांतर)। इस तरह के बारे में सोचें, आपके पास अमेरिका में 6 अंक हैं, सीए में से एक और पूर्व तट पर 5 उत्तर और दक्षिण में फैले हैं। पूर्वी तट पर 5 नक्शा पर दाएं (पूर्व) के औसत वजन और जॉर्जिया के आसपास आपका केंद्र बिंदु (पूर्व से पश्चिम) होगा। यदि आप GetCenter का उपयोग करने से बचना चाहते हैं तो आप चरम सीमा के बाद उच्चतम और निम्नतम दिशा (lat +/- और long +/-) ढूंढना चाहते हैं और चरम सीमा के बाद प्रत्येक दिशा के मध्य को ढूंढना चाहते हैं।

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

}