Bán kính sẽ bằng khoảng cách từ trung tâm của các giới hạn cho một trong các góc của các góc . Sử dụng công thức Great Circle Khoảng cách từ the calculations from this page, tôi đã đưa ra như sau:
var bounds = map.getBounds();
var center = bounds.getCenter();
var ne = bounds.getNorthEast();
// r = radius of the earth in statute miles
var r = 3963.0;
// Convert lat or lng from decimal degrees into radians (divide by 57.2958)
var lat1 = center.lat()/57.2958;
var lon1 = center.lng()/57.2958;
var lat2 = ne.lat()/57.2958;
var lon2 = ne.lng()/57.2958;
// distance = circle radius from center to Northeast corner of bounds
var dis = r * Math.acos(Math.sin(lat1) * Math.sin(lat2) +
Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1));
Sau khi chơi một số chi tiết với điều này, tôi đã nhận thấy rằng map.getBounds()
sẽ chứa các bản đồ khung nhìn đầy đủ. Nhưng nếu LatLngBounds
của bạn được xây dựng bằng cách mở rộng để bao gồm LatLng
điểm và sau đó bạn phát hành map.fitBounds(bounds)
, api tăng chế độ xem của bản đồ một chút sao cho hộp bounds
"có một số đệm.
Nếu bạn sử dụng chế độ xem hiện tại của bản đồ, bán kính từ trung tâm đến góc của chế độ xem có thể là bán kính dài hơn bạn muốn. Có thể khoảng cách từ trung tâm khung nhìn đến giữa cạnh khung nhìn xa nhất. (Nếu bản đồ không phải là hình vuông hoàn hảo)
Nguồn
2010-08-19 23:40:11
Awesomesauce, chỉ là những gì tôi cần. Cảm ơn! –
Để ví dụ này hoạt động, 3 dòng đầu tiên phải là 'var bounds = map.getBounds(); var center = bounds.getCenter(); var ne = bounds.getNorthEast();' –