Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将谷歌地图缩放到标记的百分比_Javascript_Google Maps - Fatal编程技术网

Javascript 如何将谷歌地图缩放到标记的百分比

Javascript 如何将谷歌地图缩放到标记的百分比,javascript,google-maps,Javascript,Google Maps,将谷歌地图的边界缩放到所有标记是相当直接的 var position = new google.maps.LatLng(lat, lng); bounds.extend(position); map.fitBounds(bounds); 我想做的是动态地将Google地图的边界缩放到标记的百分比 例如,如果有一个地图上有许多外围标记,我想将边界缩放到标记的70% var position = new google.maps.LatLng(lat, lng); bounds.extend(pos

将谷歌地图的边界缩放到所有标记是相当直接的

var position = new google.maps.LatLng(lat, lng);
bounds.extend(position);
map.fitBounds(bounds);
我想做的是动态地将Google地图的边界缩放到标记的百分比

例如,如果有一个地图上有许多外围标记,我想将边界缩放到标记的70%

var position = new google.maps.LatLng(lat, lng);
bounds.extend(position);
map.fitBounds(bounds);
我可以通过编程方式通过循环所有标记来实现这一点,识别彼此最接近的70%标记并设置它们周围的边界。(如果我走这条路,我会把代码贴上去)


但我想知道是否存在允许这种行为的现有功能。

正如我在评论中提到的那样-为什么不将标记的界限降低30%

可以在bounds对象上使用getNorthEast()和getSouthWest()函数,将这些坐标减少所需的量,然后重新创建一个新的bounds对象。结果呢

这就是我所做的,增加了10%。你可以做类似的事情来减少30%

var increasePercentage = 1.10;  //10%
var pointSouthWest = markerBounds.getSouthWest();
var latAdjustment = (pointNorthEast.lat() - pointSouthWest.lat()) * (increasePercentage - 1);
var lngAdjustment = (pointNorthEast.lng() - pointSouthWest.lng()) * (increasePercentage - 1);
var newPointNorthEast = new google.maps.LatLng(pointNorthEast.lat() + latAdjustment, pointNorthEast.lng() + lngAdjustment);
var newPointSouthWest = new google.maps.LatLng(pointSouthWest.lat() - latAdjustment, pointSouthWest.lng() - lngAdjustment);

bounds = new google.maps.LatLngBounds();
bounds.extend(newPointNorthEast);
bounds.extend(newPointSouthWest);
map.fitBounds(bounds);
google.maps.LatLngBounds文档如下:


我使用了以下方法-工作示例:

var映射;
var标记=[];
var界限=[];
var centreLat=37.422000;
var centreLng=-122.084057;
$(document).ready(initMap());
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
中心:{
lat:centreLat,
液化天然气:centreLng
},
缩放:1,
disableDefaultUI:true
});
对于(i=0;i<100;i++){
var lat=getRandomInRange(-45,45,3);
var lng=getRandomInRange(-180,180,3);
var position=new google.maps.LatLng(lat,lng);
markers[i]=新的google.maps.Marker({
职位:职位,,
地图:地图,
图标:'http://maps.google.com/mapfiles/ms/icons/red-dot.png'
});
标记[i]。距离=之间的距离(lat、lng、centreLat、centreLng);
}
}
函数缩放标记(百分比){
var bounds=new google.maps.LatLngBounds();
var numberOfMarkers=parseInt(markers.length*(百分比/100));
标记。排序(比较);
markers.forEach(函数(marker){
如果(numberOfMarkers>0){
扩展(标记位置);
marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png');
数字标记--;
}否则{
marker.setIcon('http://maps.google.com/mapfiles/ms/icons/red-dot.png');
}
});
映射边界(bounds);
}
功能距离(lat1、lng1、lat2、lng2){
var lat=lat1-lat2;
var lng=lng1-lng2;
返回数学sqrt(lat*lat+lng*lng);
}
函数比较状态(a,b){
如果(a.距离b.距离)
返回1;
返回0;
}
//从https://stackoverflow.com/a/6878845/348485
函数getRandomInRange(从、到、固定){
返回(Math.random()*(to-from)+from.toFixed(fixed)*1;
//.toFixed()返回字符串,因此“*1”是转换为数字的技巧
}

我在这里的地图中做了类似的事情,但是我将边界扩展了一个百分比,所以边界加上10%。你可以通过使用边界矩形来做相反的事情,并减少它,但剩下的部分可能是30%。然后将该结果设置为边界。