使用leafletView在Angular Leaflet Directive

时间:2016-01-26 20:58:15

标签: javascript angularjs leaflet angular-leaflet-directive

我正在尝试使用修剪群集在角度传单地图中显示弹出窗口。但是,我收到一个错误,leafletView是一个未知的提供程序。我已按照此页面上的示例进行了操作,但我没有成功 - https://github.com/SINTEF-9012/PruneCluster。这是我的代码:

angular.module('bizvizmap').controller('controller', [
    '$scope', '$http', '$filter', 'leafletData', 'leafletView',
    function ($scope, $http, $filter, leafletData, leafletView){
    $scope.center = {
        lat: 39.5500507,
        lng: -105.7820674,
        zoom: 4
            },
    $scope.defaults = {
        scrollWheelZoom: true
            },
    $scope.events = {
            map: {
            enable: ['zoomstart', 'drag', 'click', 'mousemove'],
            logic: 'emit'
            }
            },
    $scope.layers = {
            baselayers: {
            osm: {
            name: 'OpenStreetMap',
            url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
            type: 'xyz'
                    }
                },
            markers:{}
    },
    $scope.map = null;
    leafletData.getMap("bizvizmap").then(function(map){
        $scope.map = map;
    });
    function renderMarkers(data, map){
        var markerLayer = new PruneClusterForLeaflet();
        for (var i=0; i < data.length; i++){
            var marker = new PruneCluster.Marker(data[i].geometry.coordinates[1], data[i].geometry.coordinates[0]);
            popup: "Marker";
            markerLayer.RegisterMarker(marker);
        }
        map.addLayer(markerLayer);
        markerLayer.ProcessView();
    }
//Display PopUp
    leafletView.PrepareLeafletMarker = function (marker, data) {
        if (marker.getPopup()) {
            marker.setPopupContent(data.company);
        } else {
            marker.bindPopup(data.company);
        }
    };
    $scope.geojson = {};
    $http.get('data/bizvizmap.geojson').success(function (data){
            $scope.data = data;
            // Render clustered markers
            renderMarkers(data.features, $scope.map);
        });
    // Filtering markers
    $scope.search = {
        'NAICS':'',
        'SIC':''
    };
        $scope.$watch('search', function(newVal, oldVal){
            if(!angular.equals(newVal, oldVal)) {
                var geojson = angular.copy($scope.data);
                angular.forEach(newVal, function(value, property){
                    console.log(property + ':' + value);
                    if (value !== ''){
                        geojson = $filter('filter')(geojson, property, value);
                    }
                });
        function removeMarkers(data, map){
        map.removeLayer(markerLayer);
        markerLayer.ProcessView();
    }
                //map.removeLayer(markerLayer);
                // Remove all the markers
               $scope.geojson.data = geojson;
               //renderMarkers(data.features, $scope.map);
            } else {
                $scope.geojson.data = $scope.data;
            }
        }, true);
    }
]);

1 个答案:

答案 0 :(得分:0)

我认为为了添加弹出窗口而必须修改的对象是实际的prunecluster,如果你正在注册标记。

var markerLayer = new PruneClusterForLeaflet();

markerLayer.PrepareLeafletMarker = function (marker, data) {
    if (marker.getPopup()) {
        marker.setPopupContent(data.company);
    } else {
        marker.bindPopup(data.company);
    }
};