现在,我有一系列位置,这些位置之一将是一个标记。
第二标记将基于用户搜索的位置。
现在的代码是这样的:
function find_closest_marker( lat1, lon1 ) {
var pi = Math.PI;
var R = 6371; //equatorial radius
var distances = [];
var closest = -1;
var markers = allMyLocations;
for( i=0;i<markers.length; i++ ) {
var lat2 = markers[i][1];
var lon2 = markers[i][2];
var chLat = lat2-lat1;
var chLon = lon2-lon1;
var dLat = chLat*(pi/180);
var dLon = chLon*(pi/180);
var rLat1 = lat1*(pi/180);
var rLat2 = lat2*(pi/180);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
distances[i] = d;
if ( closest == -1 || d < distances[closest] ) {
closest = i;
}
var closestMarker = markers[closest];
var newLat = markers[closest][1]
var newLon = markers[closest][2]
var b = new google.maps.LatLng(newLat, newLon);
map.setCenter(b);
map.setZoom(10);
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
ShowHideMenu();
if($('#newPos').length==0){
$('div.gmnoprint').last().parent().wrap('<div id="newPos" />');
}
//showInfoWindow(map, closest);
});
}
}
现在,此代码将获得用户搜索并在页面上居中的最近位置。我想做的是使其缩放,以使搜索的位置居中,并且数组中的位置在 map 区域内。 map 尺寸不正常,为790px x 400px。
有人可以在缩放逻辑方面帮助我,如何实现这一目标?
最佳答案
您是否尝试过LatLngBounds function这个函数将根据西南角和东北角构造一个可见的图像。结果,图钉将在 map 中居中。您可以根据需要使用缩放,但是可以忽略它以查看是否可以提供所需的结果。
代码示例为:
发表你的声明
var mybounds = new google.maps.LatLngBounds();
然后在事件监听器中创建标记的地方添加
mybounds.extend(b);
然后终于在事件监听器之外
map.fitBounds(mybounds)