UNPKG

ngmap

Version:
60 lines (52 loc) 1.71 kB
/** * @ngdoc directive * @name heatmap-layer * @param Attr2Options {service} convert html attribute to Google map api options * @description * Requires: map directive * Restrict To: Element * * @example * * <map zoom="11" center="[41.875696,-87.624207]"> * <heatmap-layer data="taxiData"></heatmap-layer> * </map> */ (function() { 'use strict'; angular.module('ngMap').directive('heatmapLayer', [ 'Attr2MapOptions', '$window', function(Attr2MapOptions, $window) { var parser = Attr2MapOptions; return { restrict: 'E', require: ['?^map','?^ngMap'], link: function(scope, element, attrs, mapController) { mapController = mapController[0]||mapController[1]; var filtered = parser.filter(attrs); /** * set options */ var options = parser.getOptions(filtered, {scope: scope}); options.data = $window[attrs.data] || parseScope(attrs.data, scope); if (options.data instanceof Array) { options.data = new google.maps.MVCArray(options.data); } else { throw "invalid heatmap data"; } var layer = new google.maps.visualization.HeatmapLayer(options); /** * set events */ var events = parser.getEvents(scope, filtered); console.log('heatmap-layer options', layer, 'events', events); mapController.addObject('heatmapLayers', layer); //helper get nexted path function parseScope( path, obj ) { return path.split('.').reduce( function( prev, curr ) { return prev[curr]; }, obj || this ); } } }; // return }]); })();