2012-03-08 27 views
5

में गैर-रैपिंग मानचित्र सीमाएं प्राप्त करें यदि आप एक Google मानचित्र ज़ूम करते हैं तो दुनिया क्षैतिज रूप से दोहराना शुरू कर देगी। .getBounds() का उपयोग प्रदर्शित नक्शा छवि के किनारों पर रेखांश को वापस करने लगता है। लेकिन मैं असली दुनिया के वर्तमान दृष्टिकोण के लिए न्यूनतम और अधिकतम अक्षांश प्राप्त करना चाहता हूं।Google मानचित्र API V3

उदाहरण के लिए इस छवि में .getBounds() कहता है कि रेखांश 116 से 37 डिग्री (-79 डिग्री की चौड़ाई दे रहा है) के बीच है। जिस श्रेणी की मैं तलाश कर रहा हूं वह है -244 से +37।

google-map-bounds1

और एक और उदाहरण है (या -180 +37 इस के रूप में दुनिया है कि नक्शे केंद्र के चारों ओर देखा जा सकता है के चरम है।)। यहाँ मैं +180 -180 के लिए देख रहा हूँ ... google-map-bounds2

आप अपने आप को यहाँ के लिए यह कोशिश कर सकते हैं ... http://jsfiddle.net/spiderplant0/EBNYT/

(क्षमा याचना करने से पहले इस उत्तर दिया गया है, तो - मैं कुछ पुराने मिला इसी तरह के प्रश्न लेकिन कोई भी संतोषजनक जवाब नहीं लग रहा था)।

+0

देखें, http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom यह वही है प्रश्न लेकिन मैं आपको डुप्ली के रूप में चिह्नित नहीं करूंगा, क्योंकि आपका अधिक स्पष्ट रूप से सामने आया है और चित्र मदद करते हैं। – Cheeso

उत्तर

2

मैं आज भी एक ही मुद्दे में भाग गया, लेकिन मुझे लगता है कि आखिरकार मैंने इसे समझ लिया।

उपरोक्त पहले परिदृश्य में, आप नक्शा.getबाउंड()। ToSpan() का उपयोग रेखांश में चौड़ाई प्राप्त करने के लिए कर सकते हैं ..... जब तक नक्शा चारों ओर लपेट नहीं गया।

दूसरे परिदृश्य के लिए जहां मानचित्र चारों ओर लपेटता है, मैंने ऑब्जेक्ट प्राप्त करने के लिए google.maps.OverlayView() बढ़ाया। वहां से आप फ़ंक्शन getWorldWidth() पर कॉल कर सकते हैं।

यह आपको पिक्सेल में विश्व चौड़ाई देगा, फिर आप इसे अपने मानचित्र कंटेनर की चौड़ाई से तुलना कर सकते हैं। यदि आपका कंटेनर बड़ा है, तो आपका नक्शा चारों ओर लपेट गया है।

यह नहीं पता कि फ़ंक्शन इसके लिए क्या है लेकिन यह काम करता है।

1

जवाब user1292293 द्वारा प्रस्तावित मुझे (गूगल मानचित्र API v3) google.maps.OverlayView()

function MyMapOverlay() {} 
MyMapOverlay.prototype = new google.maps.OverlayView(); 
MyMapOverlay.prototype.onAdd = function() {}; 
MyMapOverlay.prototype.draw = function() {}; 
MyMapOverlay.prototype.onRemove = function() {}; 

नक्शा

var map = new google.maps.Map(domContainer, {...}); 
var overlay = new MyMapOverlay(); 
overlay.setMap(map); 

को ओवरले जोड़ें की

विस्तार के लिए काम किया जांच करें कि नक्शा चारों ओर लपेटता है:

var proj = overlay.getProjection(); 
var wwidth = 0; 
if (proj) wwidth = proj.getWorldWidth(); 
var mapsWrapsAround=false; 
if (__wwidth > 0 && __wwidth < domContainer.width()) mapsWrapsAround = true; 
0

मैंने getWorldWidth को सेट करके नक्शा को लपेटने से रोकने के लिए rebpp से उत्तर का उपयोग किया। मैंने बनाया MapWrappingPrevent यहां दिया गया है।

इस का उपयोग करने के लिए बस भी फोन

var wrapPreventer = new MapWrappingPrevent(_map); 

 /* This class prevents wrapping of a map by adjusting the max-width */ 
     function MapWrappingPrevent(map) { 
      var self = this; 
      this.setMap(map); 
      map.addListener('zoom_changed', function() { 
       self.onZoomChanged(); 
      }); 
     } 
     MapWrappingPrevent.prototype = new google.maps.OverlayView(); 
     MapWrappingPrevent.prototype.onAdd = function() { this.onZoomChanged(); }; 
     MapWrappingPrevent.prototype.draw = function() { }; 
     MapWrappingPrevent.prototype.onRemove = function() { }; 
     MapWrappingPrevent.prototype.onZoomChanged = function() { 
      var proj = this.getProjection(); 
      if (proj) { 
       var wrappingWidth = proj.getWorldWidth(); 
       $(this.getMap().getDiv()).css({'max-width': wrappingWidth + 'px'}) 
      } 
     }; 
संबंधित मुद्दे