source : street-view.js

  1. /**
  2. * @ngdoc service
  3. * @name StreetView
  4. * @description
  5. * Provides [defered/promise API](https://docs.angularjs.org/api/ng/service/$q)
  6. * service for [Google StreetViewService]
  7. * (https://developers.google.com/maps/documentation/javascript/streetview)
  8. */
  9. (function() {
  10. 'use strict';
  11. var $q;
  12. /**
  13. * Retrieves panorama id from the given map (and or position)
  14. * @memberof StreetView
  15. * @param {map} map Google map instance
  16. * @param {LatLng} latlng Google LatLng instance
  17. * default: the center of the map
  18. * @example
  19. * StreetView.getPanorama(map).then(function(panoId) {
  20. * $scope.panoId = panoId;
  21. * });
  22. * @returns {HttpPromise} Future object
  23. */
  24. var getPanorama = function(map, latlng) {
  25. latlng = latlng || map.getCenter();
  26. var deferred = $q.defer();
  27. var svs = new google.maps.StreetViewService();
  28. svs.getPanoramaByLocation( (latlng||map.getCenter), 100,
  29. function (data, status) {
  30. // if streetView available
  31. if (status === google.maps.StreetViewStatus.OK) {
  32. deferred.resolve(data.location.pano);
  33. } else {
  34. // no street view available in this range, or some error occurred
  35. deferred.resolve(false);
  36. //deferred.reject('Geocoder failed due to: '+ status);
  37. }
  38. }
  39. );
  40. return deferred.promise;
  41. };
  42. /**
  43. * Set panorama view on the given map with the panorama id
  44. * @memberof StreetView
  45. * @param {map} map Google map instance
  46. * @param {String} panoId Panorama id fro getPanorama method
  47. * @example
  48. * StreetView.setPanorama(map, panoId);
  49. */
  50. var setPanorama = function(map, panoId) {
  51. var svp = new google.maps.StreetViewPanorama(
  52. map.getDiv(), {enableCloseButton: true}
  53. );
  54. svp.setPano(panoId);
  55. };
  56. var StreetView = function(_$q_) {
  57. $q = _$q_;
  58. return {
  59. getPanorama: getPanorama,
  60. setPanorama: setPanorama
  61. };
  62. };
  63. StreetView.$inject = ['$q'];
  64. angular.module('ngMap').service('StreetView', StreetView);
  65. })();