2

angularjs アプリでngMapを使用しています。
複数のマーカーonclick of Open map! buttonと住所配列に存在する最初の住所を地図の中心として Google マップを表示しています。

プランクはこちら

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>

すべての住所関連のマーカーは正常に表示されています。

しかし、アドレスの配列に最適なズームを自動的に設定する方法、ここではこれらのアドレスはデータベースから取得しているため、これらのアドレスはいくつかの条件に基づいてリクエストごとに変更されます。

4

2 に答える 2

4

最近の ngMap (1.10.0) には、マップ属性「zoom-to-include-markers」が含まれていました。ここで例を見つけることができますhttps://rawgit.com/allenhwkim/angularjs-google-maps/master/testapp/map_zoom_to_include_markers.html

于 2015-07-29T13:31:59.637 に答える
0

したがって、理想的なズーム レベルは、特定のユース ケースによって異なります。それに応じて同じものを選択できます。詳細な説明はドキュメントにあります。

ただし、イベントにはビューポート バイアスを設定することをお勧めしzoomChangedます。このスニペットは、角度用に実装する方法を示しています (ここで提案されているように)。
これにより、マップが目的のマーカーの中心に配置され、パンされた領域内のすべてのマーカーを合わせることができます。

<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>

于 2015-05-05T23:04:09.363 に答える