/** * @ngdoc service * @name StreetView * @description * Provides [defered/promise API](https://docs.angularjs.org/api/ng/service/$q) service * for [Google StreetViewService](https://developers.google.com/maps/documentation/javascript/streetview) */ ngMap.service('StreetView', ['$q', function($q) { return { /** * Retrieves panorama id from the given map (and or position) * @memberof StreetView * @param {map} map Google map instance * @param {LatLng} latlng Google LatLng instance * default: the center of the map * @example * StreetView.getPanorama(map).then(function(panoId) { * $scope.panoId = panoId; * }); * @returns {HttpPromise} Future object */ getPanorama : function(map, latlng) { latlng = latlng || map.getCenter(); var deferred = $q.defer(); var svs = new google.maps.StreetViewService(); svs.getPanoramaByLocation( (latlng||map.getCenter), 100, function (data, status) { // if streetView available if (status === google.maps.StreetViewStatus.OK) { deferred.resolve(data.location.pano); } else { // no street view available in this range, or some error occurred deferred.resolve(false); //deferred.reject('Geocoder failed due to: '+ status); } }); return deferred.promise; }, /** * Set panorama view on the given map with the panorama id * @memberof StreetView * @param {map} map Google map instance * @param {String} panoId Panorama id fro getPanorama method * @example * StreetView.setPanorama(map, panoId); */ setPanorama : function(map, panoId) { var svp = new google.maps.StreetViewPanorama(map.getDiv(), {enableCloseButton: true}); svp.setPano(panoId); } }; // return }]);