我想在我的网站上显示一张谷歌地图,以及一个以英里为单位覆盖的区域的标题。为此,我将使用左右边界之间的区域。
例如,在地图下,它将显示“3英里”,然后当用户放大时,它将变为“1英里”,依此类推
由于
答案 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;