2012-03-08 34 views
5

Nếu bạn phóng to bản đồ google ra khỏi thế giới sẽ bắt đầu lặp lại theo chiều ngang. Sử dụng .getBounds() dường như trả về kinh độ ở các cạnh của hình ảnh bản đồ được hiển thị. Nhưng tôi muốn có được kinh độ tối thiểu và tối đa cho quan điểm hiện tại của thế giới thực.Nhận giới hạn bản đồ không gói trong API Google Maps V3

Ví dụ trong hình ảnh này .getBounds() nói rằng kinh độ nằm trong khoảng từ 116 đến 37 độ (cho độ rộng -79 độ!). Phạm vi tôi đang tìm kiếm là -244 đến +37. (hoặc thậm chí -180 đến 37 vì đây là những thái cực của thế giới có thể thấy được xung quanh trung tâm bản đồ.)

google-map-bounds1

Và một ví dụ khác. Ở đây tôi đang tìm -180 đến +180 ... google-map-bounds2

Bạn có thể thử nó cho chính mình đây ... http://jsfiddle.net/spiderplant0/EBNYT/

(Xin lỗi nếu điều này đã được trả lời trước đây - tôi đã tìm thấy một số cũ câu hỏi tương tự nhưng không ai có câu trả lời thỏa đáng).

+0

Xem thêm, http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom Đó là cùng câu hỏi nhưng tôi sẽ không đánh dấu bạn là một bản dupe, bởi vì bạn đã đặt ra một cách rõ ràng hơn và những hình ảnh sẽ giúp ích. – Cheeso

Trả lời

2

Tôi đã gặp phải các vấn đề tương tự ngày hôm nay, nhưng tôi nghĩ cuối cùng tôi cũng đã tìm ra.

Trong trường hợp đầu tiên ở trên, bạn có thể sử dụng map.getBounds(). ToSpan() để lấy chiều rộng theo kinh độ ..... miễn là bản đồ không quấn quanh.

Đối với trường hợp thứ hai nơi bản đồ kết thúc tốt đẹp, tôi mở rộng google.maps.OverlayView() để nhận đối tượng google.maps.MapCanvasProjection. Từ đó bạn có thể gọi hàm getWorldWidth().

Nó sẽ cung cấp cho bạn chiều rộng thế giới bằng pixel, sau đó bạn có thể so sánh nó với chiều rộng của vùng chứa bản đồ của bạn. Nếu vùng chứa của bạn lớn hơn, bản đồ của bạn đã bao quanh.

Không biết chức năng này có phù hợp với điều này hay không nhưng nó hoạt động.

1

Câu trả lời bởi user1292293 đề nghị làm việc cho tôi (Google map api V3)

Gia hạn google.maps.OverlayView()

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

Thêm lớp phủ lên bản đồ

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

kiểm tra xem bản đồ có được bao quanh hay không:

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

Tôi đã sử dụng câu trả lời từ rebpp để ngăn không cho bản đồ được gói bằng cách đặt getWorldWidth. Đây là MapWrappingPrevent mà tôi đã tạo.

Để sử dụng này chỉ cần gọi

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'}) 
      } 
     }; 
Các vấn đề liên quan