谷歌地图v3 - 可见的地图半径(英里)

14

如何找到我的地图可见区域的接近程度?

所有这些都有效,并且是为帮助可能正在寻找答案的其他人而发布的文章。

此代码查看您的Google Map v3,并通过变量proximity输出当前地图视图范围内的半径(以英里为单位)。

请确保在您的HTML中有:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&libraries=geometry"></script>

作为库,geometry使其成为可能。

// Get Gmap radius / proximity start
var bounds = new google.maps.LatLngBounds();
var sw = bounds.getSouthWest(); 
var ne = bounds.getNorthEast();

var proximitymeter = google.maps.geometry.spherical.computeDistanceBetween (sw, ne);
var proximitymiles = proximitymeter * 0.000621371192;
alert(" " + proximitymiles + " Miles Proximity");
var proxmity =  proximitymiles; 
// Get Gmap radius / proximity End

希望能够帮到有需要的人。

以下是一个额外的编辑(未经测试),可允许屏幕旋转:

    // Get Gmap radius / proximity start
var bounds = new google.maps.LatLngBounds();
var sw = bounds.getSouthWest(); 
var ne = bounds.getNorthEast();
var se = bounds.getSouthEast(); 
var nw = bounds.getNorthWest();

var proximitymeterswne = google.maps.geometry.spherical.computeDistanceBetween (sw, ne);
var proximitymetersenw = google.maps.geometry.spherical.computeDistanceBetween (se, nw);

if (proximitymeterswne > proximitymetersenw) {proximitymeterswne = proximitymiles}
else {if (proximitymetersenw > proximitymeterswne) {proximitymetersenw = proximitymiles};}; 

var proximitymiles = proximitymeter * 0.000621371192;
alert(" " + proximitymiles + " Miles Proximity");
var proxmity =  proximitymiles; 
// Get Gmap radius / proximity End

另一个编辑

// Watches for map bounds change - if so - set radius and refresh data Start
function setproximityfrommap() {
    // https://dev59.com/2XA75IYBdhLWcg3wAD_x
    // Get Gmap radius / proximity start
    var bounds = new google.maps.LatLngBounds();
    // bounds = map.LatLngBounds();
    //center = new google.maps.LatLng();

    ne = bounds.getNorthEast();    
    center = map.getCenter();

    //var center = map.LatLngBounds.getCenter();
    //var ne = map.LatLngBounds.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
    proximity = r * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1));
    $('#proximity').val(proximity);
    // Get Gmap radius / proximity End
};
我将编辑过的代码放在了第一篇帖子中。
Terran

2
+1 我喜欢你慷慨的态度!但是,为了保持网站的问答风格,我建议您在问题中发布目标,并将解决方案作为答案发布,然后接受它(即使是您自己的)。谢谢 ;) - bluish
@TerranBrown,我很好奇你是怎么想到0.000621371192这个数字的。我问这个问题是因为这个数字对我来说有点偏差,而且很难调试出原因。我以为可能是Maps API认为我的地图大小与DOM实际显示的大小不同,但即使我将高度改变了150像素,swne边界仍然是相同的。 - Trevan Hetzel
嘿,没事了,我知道那是米转英里的计算 :) - Trevan Hetzel
bounds.getNorthWest()? bounds.getSouthEast()? 在google.maps.LatLngBounds类中没有这样的函数... - pasx
但是如果你需要它们: getBoundsNorthWest : function(bounds) { var ne = bounds.getNorthEast(); var sw = bounds.getSouthWest(); return new google.maps.LatLng (ne.lat(), sw.lng()); }, getBoundsSouthEast : function(bounds) { var ne = bounds.getNorthEast(); var sw = bounds.getSouthWest(); return new google.maps.LatLng (sw.lat(), ne.lng()); } - pasx
显示剩余4条评论
1个回答

10
// Watches for map bounds change - if so - set radius and refresh data Start
function setproximityfrommap() {
    // https://dev59.com/2XA75IYBdhLWcg3wAD_x
    // Get Gmap radius / proximity start
    // First, determine the map bounds
    var bounds = map.getBounds();

    // Then the points
    var swPoint = bounds.getSouthWest();
    var nePoint = bounds.getNorthEast();

    // Now, each individual coordinate
    var swLat = swPoint.lat();
    var swLng = swPoint.lng();
    var neLat = nePoint.lat();
    var neLng = nePoint.lng();

    var proximitymeter = google.maps.geometry.spherical.computeDistanceBetween(swPoint, nePoint);
    var proximitymiles = proximitymeter * 0.000621371192;
    proxmity = proximitymiles;
    console.log("Proxmity " + proximitymiles + " miles");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接