| OLD | NEW |
| 1 <link rel="import" href="../polymer/polymer.html"> | 1 <link rel="import" href="../polymer/polymer.html"> |
| 2 <link rel="import" href="../google-apis/google-maps-api.html"> | 2 <link rel="import" href="../google-apis/google-maps-api.html"> |
| 3 | 3 |
| 4 <!-- | 4 <!-- |
| 5 Element for generating a Google Maps Street View Panorama. | 5 Element for generating a Google Maps Street View Panorama. |
| 6 | 6 |
| 7 ##### Example | 7 ##### Example |
| 8 | 8 |
| 9 <google-streetview-pano | 9 <google-streetview-pano |
| 10 pano-id="CWskcsTEZBNXaD8gG-zATA" | 10 pano-id="CWskcsTEZBNXaD8gG-zATA" |
| 11 heading="330" | 11 heading="330" |
| 12 pitch="-2" | 12 pitch="-2" |
| 13 zoom="0.8" | 13 zoom="0.8" |
| 14 disable-default-ui> | 14 disable-default-ui> |
| 15 </google-streetview-pano> | 15 </google-streetview-pano> |
| 16 | 16 |
| 17 There are tons of great panoramas on the [Google Maps | Views page](https://www.
google.com/maps/views/home?gl=us) | 17 There are tons of great panoramas on the [Google Maps | Views page](https://www.
google.com/maps/views/home?gl=us) |
| 18 | 18 |
| 19 To grab a panorama, look at its url in the address bar. For example: | 19 To grab a panorama, look at its url in the address bar. For example: |
| 20 | 20 |
| 21 google.com/maps/views/view/102684927602131521305/photo/**1szTnskrdKIAAAGuu3fZRw*
* | 21 google.com/maps/views/view/102684927602131521305/photo/**1szTnskrdKIAAAGuu3fZRw*
* |
| 22 | 22 |
| 23 The hash in bold is the `pano-id`. You'll often need to dial in the `heading`, `
pitch` and `zoom` manually. | 23 The hash in bold is the `pano-id`. You'll often need to dial in the `heading`, `
pitch` and `zoom` manually. |
| 24 | 24 |
| 25 You can also use the position attribute and set it to a position with a computed
value. Example: { lat: 42.345573, lng: -71.098326 } |
| 26 |
| 27 <google-streetview-pano |
| 28 position="[[_myComputedPosition()]]" |
| 29 heading="330" |
| 30 pitch="-2" |
| 31 zoom="0.8" |
| 32 disable-default-ui> |
| 33 </google-streetview-pano> |
| 34 |
| 25 @demo | 35 @demo |
| 26 --> | 36 --> |
| 27 | 37 |
| 28 <dom-module id="google-streetview-pano"> | 38 <dom-module id="google-streetview-pano"> |
| 29 <style> | 39 <style> |
| 30 :host { | 40 :host { |
| 31 display: block; | 41 display: block; |
| 32 } | 42 } |
| 33 #pano { | 43 #pano { |
| 34 height: 100%; | 44 height: 100%; |
| 35 } | 45 } |
| 36 </style> | 46 </style> |
| 37 <template> | 47 <template> |
| 38 <google-maps-api api-key="{{apiKey}}" version="{{version}}" | 48 <google-maps-api api-key="{{apiKey}}" version="{{version}}" |
| 39 libraries="{{libraries}}" | |
| 40 client-id="{{clientId}}" | 49 client-id="{{clientId}}" |
| 41 language="{{language}}" | 50 language="{{language}}" |
| 42 client | 51 client |
| 43 on-api-load="_mapApiLoaded"></google-maps-api> | 52 on-api-load="_mapApiLoaded"></google-maps-api> |
| 44 <div id="pano" on-mouseenter="_autoStop" | 53 <div id="pano" on-mouseenter="_autoStop" |
| 45 on-mouseleave="_autoUpdate"></div> | 54 on-mouseleave="_autoUpdate"></div> |
| 46 </template> | 55 </template> |
| 47 </dom-module> | 56 </dom-module> |
| 48 | 57 |
| 49 <script> | 58 <script> |
| 50 "use strict"; | 59 "use strict"; |
| 51 | 60 |
| 52 Polymer({ | 61 Polymer({ |
| 62 |
| 53 is: 'google-streetview-pano', | 63 is: 'google-streetview-pano', |
| 54 properties: { | 64 |
| 65 properties: { |
| 55 /** | 66 /** |
| 56 * A Maps API key. To obtain an API key, see developers.google.com/maps/do
cumentation/javascript/tutorial#api_key. | 67 * A Maps API key. To obtain an API key, see developers.google.com/maps/do
cumentation/javascript/tutorial#api_key. |
| 57 */ | 68 */ |
| 58 apiKey: String, | 69 apiKey: String, |
| 59 | 70 |
| 60 /** | 71 /** |
| 61 * A Maps API for Business Client ID. To obtain a Maps API for Business Cl
ient ID, see developers.google.com/maps/documentation/business/. | 72 * A Maps API for Business Client ID. To obtain a Maps API for Business Cl
ient ID, see developers.google.com/maps/documentation/business/. |
| 62 * If set, a Client ID will take precedence over an API Key. | 73 * If set, a Client ID will take precedence over an API Key. |
| 63 */ | 74 */ |
| 64 clientId: String, | 75 clientId: String, |
| 65 | 76 |
| 66 /** | 77 /** |
| 67 * The localized language to load the Maps API with. For more information | 78 * The localized language to load the Maps API with. For more information |
| 68 * see https://developers.google.com/maps/documentation/javascript/basics#
Language | 79 * see https://developers.google.com/maps/documentation/javascript/basics#
Language |
| 69 * | 80 * |
| 70 * Note: the Maps API defaults to the preferred language setting of the br
owser. | 81 * Note: the Maps API defaults to the preferred language setting of the br
owser. |
| 71 * Use this parameter to override that behavior. | 82 * Use this parameter to override that behavior. |
| 72 * | 83 * |
| 73 */ | 84 */ |
| 74 language: String, | 85 language: String, |
| 75 | 86 |
| 76 /** | 87 /** |
| 77 * A comma separated list (e.g. "places,geometry") of libraries to load | |
| 78 * with this map. Defaults to "places". For more information see | |
| 79 * https://developers.google.com/maps/documentation/javascript/libraries. | |
| 80 * | |
| 81 */ | |
| 82 libraries: { | |
| 83 type: String, | |
| 84 value: "places" | |
| 85 }, | |
| 86 | |
| 87 /** | |
| 88 * Version of the Google Maps API to use. | 88 * Version of the Google Maps API to use. |
| 89 * | 89 * |
| 90 */ | 90 */ |
| 91 version: { | 91 version: { |
| 92 type: String, | 92 type: String, |
| 93 value: '3.exp' | 93 value: '3.exp' |
| 94 }, | 94 }, |
| 95 | 95 |
| 96 /** | 96 /** |
| 97 * Specifies which photosphere to load | 97 * Specifies which photosphere to load |
| 98 * | 98 * |
| 99 * **Required** | 99 * |
| 100 */ | 100 */ |
| 101 panoId: { | 101 panoId: { |
| 102 type: String, | 102 type: String, |
| 103 observer: '_panoIdChanged' | 103 observer: '_panoIdChanged' |
| 104 }, | 104 }, |
| 105 | 105 |
| 106 /** | 106 /** |
| 107 * Specifies which position to load |
| 108 * |
| 109 * |
| 110 */ |
| 111 position: { |
| 112 type: Object, |
| 113 observer: '_positionChanged' |
| 114 }, |
| 115 |
| 116 /** |
| 107 * The camera heading in degrees relative to true north. True north is 0°,
east is 90°, south is 180°, west is 270°. | 117 * The camera heading in degrees relative to true north. True north is 0°,
east is 90°, south is 180°, west is 270°. |
| 108 */ | 118 */ |
| 109 heading: { | 119 heading: { |
| 110 type: Number, | 120 type: Number, |
| 111 value: 45 | 121 value: 45 |
| 112 }, | 122 }, |
| 113 | 123 |
| 114 /** | 124 /** |
| 115 * The camera pitch in degrees, relative to the street view vehicle. Range
s from 90° (directly upwards) to -90° (directly downwards). | 125 * The camera pitch in degrees, relative to the street view vehicle. Range
s from 90° (directly upwards) to -90° (directly downwards). |
| 116 */ | 126 */ |
| (...skipping 17 matching lines...) Expand all Loading... |
| 134 type: Boolean, | 144 type: Boolean, |
| 135 value: false | 145 value: false |
| 136 }, | 146 }, |
| 137 | 147 |
| 138 /** | 148 /** |
| 139 * If true, disables the auto panning animation | 149 * If true, disables the auto panning animation |
| 140 */ | 150 */ |
| 141 disableAutoPan: { | 151 disableAutoPan: { |
| 142 type: Boolean, | 152 type: Boolean, |
| 143 value: false | 153 value: false |
| 144 }, | 154 } |
| 145 | 155 |
| 146 }, | 156 }, |
| 147 | 157 |
| 148 pano: null, | 158 pano: null, |
| 149 rAFid: null, | 159 rAFid: null, |
| 160 |
| 161 /** |
| 162 * Called when the Google Maps API has loaded. |
| 163 */ |
| 150 _mapApiLoaded: function() { | 164 _mapApiLoaded: function() { |
| 151 this.pano = new google.maps.StreetViewPanorama( | 165 this.pano = new google.maps.StreetViewPanorama(this.$.pano, this._getPanoO
ptions()); |
| 152 this.$.pano, | |
| 153 this._getPanoOptions()); | |
| 154 this.pano.setVisible(true); | 166 this.pano.setVisible(true); |
| 155 | 167 |
| 156 if (this.disableAutoPan) { | 168 if (this.disableAutoPan) { |
| 157 return; | 169 return; |
| 158 } | 170 } |
| 159 // Kickoff the rotating animation | 171 // Kickoff the rotating animation |
| 160 this.rAFid = requestAnimationFrame(this.update.bind(this)); | 172 this.rAFid = requestAnimationFrame(this.update.bind(this)); |
| 161 }, | 173 }, |
| 162 | 174 |
| 163 /** | 175 /** |
| 164 * Returns the an object with the current panorama configurations. | 176 * Returns the an object with the current panorama configurations. |
| 165 */ | 177 */ |
| 166 _getPanoOptions: function() { | 178 _getPanoOptions: function() { |
| 167 var panoOptions = { | 179 var panoOptions = { |
| 168 pano: this.panoId, | 180 pano: this.panoId, |
| 181 position: this.position, |
| 169 pov: { | 182 pov: { |
| 170 heading: this.heading, | 183 heading: this.heading, |
| 171 pitch: this.pitch | 184 pitch: this.pitch |
| 172 }, | 185 }, |
| 173 disableDefaultUI: this.disableDefaultUi, | 186 disableDefaultUI: this.disableDefaultUi, |
| 174 zoom: this.zoom | 187 zoom: this.zoom |
| 175 }; | 188 }; |
| 176 | 189 |
| 177 return panoOptions; | 190 return panoOptions; |
| 178 }, | 191 }, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 234 } |
| 222 | 235 |
| 223 this.stop(); | 236 this.stop(); |
| 224 }, | 237 }, |
| 225 | 238 |
| 226 _panoIdChanged: function(newVal, oldVal) { | 239 _panoIdChanged: function(newVal, oldVal) { |
| 227 if (this.pano) { | 240 if (this.pano) { |
| 228 this.pano.setPano(newVal); | 241 this.pano.setPano(newVal); |
| 229 this.reset(); | 242 this.reset(); |
| 230 } | 243 } |
| 244 }, |
| 245 |
| 246 _positionChanged: function(newVal, oldVal) { |
| 247 if (this.pano) { |
| 248 this.pano.setPosition(newVal); |
| 249 this.reset(); |
| 250 } |
| 231 } | 251 } |
| 232 }); | 252 }); |
| 233 </script> | 253 </script> |
| OLD | NEW |