Vista panorâmica da rua em 360 graus no iOS do Google Map SDK
-
21-12-2019 - |
Pergunta
eu quero mostrar esse localização dentro do mapa sem usar o esquema de URL do Google Maps. Usei GMSPanoramaView para mostrar a vista da rua usando determinada lat/long (53.426398,-2.242795) mas dentro da área de construção não aparece, essa área está aparecendo no navegador ou no esquema de URL.
eu usei demonstração do github código para mostrar o Street View, mas quero mostrar exatamente acima da localização dentro do aplicativo.
Não quero usar o aplicativo webview, safari ou google map.
Solução
Eu acho que você está faltando
[panoramaView_ moveToPanoramaID:@"i3XJvXkmgNMAAAQW-ezYnQ"];
Outras dicas
É possível!Extraia o panoid
de postagem do usuário2744623:
Aqui está um link alternativo (usado Embedder para Google Business View) https://maps.google.com/maps?layer=c&panoid=shcQTg4Y9qh9T0p5aspVvA&ie=UTF8&source=embed&output=svembed&cbp=13%2C213%2C%2C0%2C0
E então use-o como um PanoramaID
no SDK do iOS:
GMSPanoramaView *view_ = [GMSPanoramaView panoramaWithFrame:CGRectZero
nearCoordinate:CLLocationCoordinate2DMake(53.426398, -2.242795)];
[view_ moveToPanoramaID:@"shcQTg4Y9qh9T0p5aspVvA"];
Você pode então definir GMSPanoramaCamera:cameraWithHeading:pitch:zoom:
para o ângulo que você preferir:
[GMSPanoramaCamera cameraWithHeading:200.0f pitch:-10.0f zoom:1];
Aqui está a documentação oficial sobre GMSPanoramaView:moveToPanoramaID:
:
Solicita um panorama com
panoramaID
.Após a conclusão bem-sucedidapanoramaView:didMoveToPanorama:
será enviado paraGMSPanoramaViewDelegate
.Em caso de erropanoramaView:error:onMoveToPanoramaID:
será enviado.Chamadas repetidas paramoveToPanoramaID:
resultará no cancelamento das transições pendentes (incompletas) anteriores - apenas as mais recentesmoveNearCoordinate:
emoveToPanoramaId:
irá prosseguir e gerar eventos.ApenaspanoramaID
s obtidos do SDK do Google Maps para iOS são suportados.
Acho que você pode ignorar a última frase, heh.
Aqui está uma implementação completa, adaptada do projeto de demonstração do SDK:
@interface PanoramaViewController () <GMSPanoramaViewDelegate>
@end
@implementation PanoramaViewController {
GMSPanoramaView *view_;
BOOL configured_;
}
- (void)viewDidLoad {
[super viewDidLoad];
view_ = [GMSPanoramaView panoramaWithFrame:CGRectZero
nearCoordinate:CLLocationCoordinate2DMake(53.426398, -2.242795)];
view_.backgroundColor = [UIColor grayColor];
view_.delegate = self;
self.view = view_;
[view_ moveToPanoramaID:@"shcQTg4Y9qh9T0p5aspVvA"];
}
#pragma mark - GMSPanoramaDelegate
- (void)panoramaView:(GMSPanoramaView *)view
didMoveToPanorama:(GMSPanorama *)panorama {
if (!configured_) {
view_.camera = [GMSPanoramaCamera cameraWithHeading:200.0f pitch:-10.0f zoom:1];
configured_ = YES;
}
}
// Use to fine-tune initial heading and pitch
- (void)panoramaView:(GMSPanoramaView *)panoramaView
didMoveCamera:(GMSPanoramaCamera *)camera {
NSLog(@"Camera: (%f,%f,%f)", camera.orientation.heading, camera.orientation.pitch, camera.zoom);
}
// Helpful in finding other panorama IDs or debugging:
- (void)panoramaView:(GMSPanoramaView *)view
willMoveToPanoramaID:(NSString *)panoramaID {
NSLog(@"willMoveToPanoramaID: %@", panoramaID);
}
- (void)panoramaView:(GMSPanoramaView *)view
error:(NSError *)error
onMoveToPanoramaID:(NSString *)panoramaID {
NSLog(@"error: %@ onMoveToPanoramaID: %@", error, panoramaID);
}
@end
Você tem duas opções.Baixe o panorama ou use uma das muitas formas aprovadas pelo Google para obter a visualização.
Aqui está um link alternativo (usado Embedder para Google Business View)https://maps.google.com/maps?layer=c&panoid=shcQTg4Y9qh9T0p5aspVvA&ie=UTF8&source=embed&output=svembed&cbp=13%2C213%2C%2C0%2C0
Pegue o panorama usando Pano Fetch
Use a API - O código abaixo é parcialmente psudo. Você precisará de um pouco de conhecimento de Javascript.
var your_pano = new google.maps.LatLng(53.426398,-2.242795);
var panoramaOptions2 = {
position: your_pano,
addressControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER
},
zoomControl: false,
linksControl: true,
panControl: false,
fov: 110,
pov: {
heading: 100,
pitch: -20
},
zoom: 0
};
var your_pano = new google.maps.StreetViewPanorama(
document.getElementById('your_pano'),
panoramaOptions2);
your_pano.setVisible(true);