Last active
January 19, 2023 06:57
-
-
Save cmddavid/65abdab6d2e1330b8838e795e7d6414b to your computer and use it in GitHub Desktop.
Example street view component utilizing MapsAPILoader from @agm/core package
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#streetview-map { | |
display: none; | |
} | |
#streetview-pano { | |
width: 100%; | |
height: 100%; | |
} | |
#streetview-container { | |
position: relative; | |
} | |
* { | |
height: 100%; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div id="streetview-container"> | |
<div id="streetview-map" #streetviewMap></div> | |
<div id="streetview-pano" #streetviewPano></div> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// based on https://developers.google.com/maps/documentation/javascript/examples/streetview-simple | |
import { Component, OnInit, ViewChild, Input, Inject, PLATFORM_ID } from '@angular/core'; | |
import { MapsAPILoader } from '@agm/core'; | |
import { isPlatformBrowser } from '@angular/common'; | |
@Component({ | |
selector: 'app-streetview', | |
templateUrl: './streetview.component.html', | |
styleUrls: ['./streetview.component.scss'] | |
}) | |
export class StreetviewComponent implements OnInit { | |
@ViewChild('streetviewMap') streetviewMap: any; | |
@ViewChild('streetviewPano') streetviewPano: any; | |
@Input() latitude: number = 42.345573; | |
@Input() longitude: number = -71.098326; | |
@Input() zoom: number = 11; | |
@Input() heading: number = 34; | |
@Input() pitch: number = 10; | |
@Input() scrollwheel: boolean = false; | |
constructor(@Inject(PLATFORM_ID) private platformId: Object, private mapsAPILoader: MapsAPILoader) { } | |
ngOnInit() { | |
if(isPlatformBrowser(this.platformId)){ | |
this.mapsAPILoader.load().then(() => { | |
let center = { lat: this.latitude, lng: this.longitude }; | |
let map = new window['google'].maps.Map(this.streetviewMap.nativeElement, { center: center, zoom: this.zoom, scrollwheel: this.scrollwheel }); | |
let panorama = new window['google'].maps.StreetViewPanorama( | |
this.streetviewPano.nativeElement, { | |
position: center, | |
pov: { heading: this.heading, pitch: this.pitch }, | |
scrollwheel: this.scrollwheel | |
}); | |
map.setStreetView(panorama); | |
}); | |
} | |
} | |
} |
hello ,can you tell me how do you get parameters like heading ,pitch ,zoom dynamically i.e by any api
For my project where I used this component we have manpower for that. So its manual work for us. I don't think there is any possibility to automatically get the proper values. You can calculate the zoom level from given bounds via https://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds
But that's only useful for normal Google Maps, not for Street View
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Ekaanth, I just made a repo https://github.com/cmddavid/ng-streetview-test to replicate the problem with the code you provided. It is however working as expected. Even when I add a timeout to simulate a wait for an api request the street view gets painted as expected. Can you fork the repo and break it by implementing behavior that is as close as possible to the project you are facing the problem?