Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放
Posted
技术标签:
【中文标题】Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放【英文标题】:Angularjs - ng-map - Google Maps Javascript API v3 - how to Set best Zoom for Multiple markers 【发布时间】:2015-07-15 00:50:07 【问题描述】:我正在使用ngMap
在 angularjs 应用程序中。
我正在显示带有多个标记 onclick of Open map! button
的谷歌地图,并且地址数组中存在第一个地址,我将其作为地图中心。
这里是The Plunk
example.js:
angular.module('plunker', ['ui.bootstrap', 'ngMap']);
var ModalDemoCtrl = function ($scope, $modal, $log)
$scope.displayMap = function ()
$scope.addresses = [ "address": "Hyderabad" ,
"address": "Chennai" ,
"address": "Bangalore" ,
"address": "Kolkata" ,];
$scope.latlng = [];
$scope.loop(0, $scope.addresses)
$scope.loop = function (id, addressesresult)
if (id < addressesresult.length)
var address = addressesresult[id].address;
geocoder = new google.maps.Geocoder();
geocoder.geocode(
'address': address
, function (results, status)
if (status == google.maps.GeocoderStatus.OK)
$scope.latlng.push(
"lat": results[0].geometry.location.lat(),
"lng": results[0].geometry.location.lng(),
"title": results[0].formatted_address
);
if (id == ((addressesresult.length) - 1))
$scope.openPopup();
else
console.log('Geocode was not successful for the following reason:' + status);
id = id + 1;
$scope.loop(id, addressesresult);
);
$scope.openPopup = function ()
var modalInstance = $modal.open(
templateUrl: 'modal1',
controller: ModalInstanceCtrl,
scope: $scope,
resolve:
lat: function ()
return $scope.latlng[0].lat;
,
lng: function ()
return $scope.latlng[0].lng;
,
latlng: function ()
return $scope.latlng;
);
;
;
// Please note that $modalInstance represents a modal window (instance) dependency.
// It is not the same as the $modal service used above.
var ModalInstanceCtrl = function ($scope, $modalInstance, lat, lng)
$scope.lat = lat;
$scope.lng = lng;
$scope.render = true;
$scope.close = function ()
$modalInstance.close();
;
;
index.html:
<!doctype html>
<html ng-app="plunker">
<head>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.11.0.js"></script>
<script src="http://rawgit.com/allenhwkim/angularjs-google-maps/master/build/scripts/ng-map.min.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div ng-controller="ModalDemoCtrl">
<script type="text/ng-template" id="myModalContent.html">
<div class="modal-header">
<h3 class="modal-title">I'm a modal!</h3>
</div>
<div class="modal-body">
<map ng-if="$parent.render" center="[$parent.lat, $parent.lng]" zoom-control="true" zoom="8"> </map>
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ok()">OK</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
</script>
<button class="btn btn-default" ng-click="displayMap()">Open map!</button>
<script type="text/ng-template" id="modal1">
<div class="modal-header googlemodal-header">
<button type="button" ng-click="close()" style="opacity:1" class="close" data-dismiss="modal" aria-hidden="true"> <span style="color:red; ">x</span> </button>
<div align="center"><h3 class="modal-title">Addresses pointing in Google Map </h3></div>
</div>
<div class="modal-body">
<map ng-if="$parent.render" center="[lat, lng]" zoom="15" zoom-control="true" style="display:block; width:auto; height:auto;">
<marker ng-repeat="item in latlng"
position="item.lat, item.lng"
title="item.title"></marker>
</map>
</div>
<div class="modal-footer googlemodal-header">
<button class="btn btn-primary btn-sm" ng-click="close()">CLOSE</button>
</div>
</script>
</div>
</body>
</html>
所有与地址相关的标记都显示正常。
但是如何为地址数组自动设置最佳缩放,这里这些地址是我从数据库中获取的,所以这些地址会根据某些条件针对每个请求进行更改。
【问题讨论】:
【参考方案1】:ngMap 最近(1.10.0) 包含了一个地图属性“缩放到包含标记”。你可以在这里找到一个例子,https://rawgit.com/allenhwkim/angularjs-google-maps/master/testapp/map_zoom_to_include_markers.html
【讨论】:
感谢您回复 allenhwkim。它运行良好。谢谢:-)【参考方案2】:因此,理想的缩放级别取决于特定的用例。您可以相应地选择相同的。深入的解释可以在documentation 中找到。
不过,我建议对zoomChanged
事件设置视口偏差。 sn-p 显示了如何为 angular 实现它(如建议的here)。
这将确保地图以所需标记为中心,并且您也可以将平移区域中的所有标记与它匹配。
<div ng-controller="RectangleZoomCtrl" class="ng-scope">
<map zoom="11" center="33.6803003, -116.173894" map-type-id="TERRAIN" on-zoom_changed="zoomChanged()">
<shape name="rectangle" id="foo" stroke-color="#FF0000" stroke-opacity="0.8" stroke-weight="2" fill-color="#FF0000" fill-opacity="0.35">
</shape>
</map>
</div>
【讨论】:
感谢您回复凯安。如果我单击运行代码 sn-p 它显示为空。我想你忘记了包含代码。请附上这里。以上是关于Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放的主要内容,如果未能解决你的问题,请参考以下文章
谷歌钱包应用内付款:未捕获的 ReferenceError:未定义 goog。 google.payments 与 goog.payments