osm-directive.js 1.43 KB
angular.module('focaModalLocalizar')
  .directive('osmDireccion', function () {
    return {
      restrict: 'E',
      link: function (scope, el, attrs) {
        var contenedor = document.createElement('div');
        el.append(contenedor);
        scope.map = L.map(contenedor).setView([-32.89214159952345, -68.84572999101856], attrs.zoom);
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(scope.map);
      },
      controller: ['$scope', '$timeout', function ($scope, $timeout) {
        //resuelve bug mapa gris en modales
        $timeout(function () {
          $scope.map.invalidateSize();
        }, 100);

        $scope.markers = [];
        $scope.$watchGroup(['latitud', 'longitud'], function () {
          for (var i in $scope.markers) {
            $scope.map.removeLayer($scope.markers[i]);
          }
          $scope.markers.push(
            L.marker([$scope.latitud, $scope.longitud], { draggable: true })
              .addTo($scope.map)
              .on('dragend', function () {
                $scope.latitud = this.getLatLng().lat;
                $scope.longitud = this.getLatLng().lng;
                $scope.$apply();
              })
          );
        });

        $scope.$on('moveMap', function (evt, data) {
          $scope.map.panTo(new L.LatLng(data.latitud, data.longitud));
        });
      }],
      scope: {
        latitud: '=',
        longitud: '=',
        zoom: '='
      }
    };
  });