Радиус будет равен расстоянию от центра границ до одного из углов. Используя формулу Великого окружного расстояния из расчетов по этой странице , я пришел к следующему:
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));
Поиграв с этим еще раз, я заметил, что map.getBounds()
будет содержать полную область просмотра карты. Но если ваша LatLngBounds
построена путем расширения, включающего LatLng
точек, а затем вы выдаете map.fitBounds(bounds)
, API немного увеличивает область просмотра карты, так что bounds
"коробка" имеет некоторые отступы.
Если вы используете текущую область просмотра карты, радиус от центра до угла области просмотра может быть длиннее, чем вы хотите. Может быть, расстояние от центра области просмотра до середины самого дальнего края области просмотра. (Если карта не является идеальным квадратом)