计算谷歌地图的直径

时间:2013-10-06 03:42:15

标签: google-maps

我想在我的网站上显示一张谷歌地图,以及一个以英里为单位覆盖的区域的标题。为此,我将使用左右边界之间的区域。

例如,在地图下,它将显示“3英里”,然后当用户放大时,它将变为“1英里”,依此类推

由于

2 个答案:

答案 0 :(得分:1)

API有一个距离方法,以米为单位返回距离。所以你可以这样做:

var bounds = myMap.getBounds();
google.maps.geometry.spherical.computeDistanceBetween(bounds.getNorthEast(), bounds.getSouthWest());

答案 1 :(得分:0)

首先致电Map object上的getBounds()方法。这将返回一个LatLngBounds对象,您将从该对象知道地图定义的边界框的纬度和经度。

既然您拥有纬度和经度,您只需将Haversine formula应用于计算机的距离即可。有关此等式的详细概述,以及Javascript中的示例,请参阅this page。摘录如下:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

由于上述公式以千米为单位运行,并且您要求英里数,因此您可以执行的另一项修改是将输出(d)转换为英里数。将千米转换为英里只需要除以1.609344。所以,你可以简单地说:

d /= 1.609344;

对此进行扩展,您甚至可以允许用户在英里/公里之间进行选择,并在if语句中包装整个内容:

if(miles)
  d /= 1.609344;