我在Google Map 中有一个动态生成的标记列表 . 我希望 Map 的中心成为所有标记的中心,并缩小到足以使所有标记都在视野中 .
在计算 Map 中心方面,也许这可以通过遍历所有纬度和经度并找到中心点来实现 . 但是,我无法找出计算缩放应该是什么的最佳方法 .
这有可能实现吗?
我的 Map 正在模板中使用,如下所示:
<ui-gmap-google-map events="map.events" center="map.center" zoom="map.zoom" draggable="true" options="options">
<ui-gmap-marker ng-repeat="home in filteredHomes = (resCtrl.filteredHomes | orderBy : $storage.params.orderby : $storage.params.reverseOrder)" coords="{latitude: home.location.latitude, longitude: home.location.longitude}" idkey="home.homeId">
</ui-gmap-marker>
</ui-gmap-google-map>
UPDATE
从@Tiborg的建议尝试Angular实现:
uiGmapGoogleMapApi.then(function(maps) {
$scope.map = {
center: $scope.$storage.params.views.map.location,
zoom: $scope.$storage.params.views.map.zoom,
events: {
click: function() {
var bounds = new google.maps.LatLngBounds();
for (var i in $scope.filteredHomes) {
bounds.extend($scope.filteredHomes[i].location);
}
$scope.map.fitBounds(bounds);
}
}
};
});
这会产生控制台错误: TypeError: undefined is not a function (evaluating 'a.lat()')
5 回答
在Google Maps API中使用LatLngBounds类,如下所示:
它可以很好地缩放和居中 Map ,以适应您的所有标记 .
当然,这是纯粹的javascript,而不是角度版本,所以如果你在角度实现它时遇到问题(或者你无法访问从中获取标记的 Map 实例),请告诉我 .
angular-google-maps已经完成了这项功能 . 您需要做的就是在markers指令(ui-gmap-markers)中添加fit = "true"属性 . 示例:
<ui-gmap-markers models="map.markers" fit="true" icon="'icon'">
请参阅文档http://angular-ui.github.io/angular-google-maps/#!/api答案已针对另一个问题发布:https://stackoverflow.com/a/23690559/5095063之后您只需要添加以下行:
感谢所有的回复,我得到了这个代码,它对我来说非常有用:
我希望它对某人有所帮助 .
还要使用超时以确保它被正确消化