I would like to launch Google StreetView in the Safari browser from my native iOS app. I have the street address and latitude longitude available. I know it is relatively easy to find panorama ID using an API, but unfortunately I can't use any Google API. I need to launch the google maps website outside of my app with the given address or latitude longitude.
The url for street view (for 40.535673,-74.209823) on desktop looks something like this:
https://www.google.com/maps?es_sm=91&um=1&ie=UTF-8&q=719+Ramona+ave+new+york&layer=c&z=17&iwloc=A&sll=40.535673,-74.209823&cbp=13,354.4,0,0,0&cbll=40.535462,-74.209796&sa=X&ei=BMdjVIaPMIn5yASA64Jw&ved=0CCAQxB0wAA
How can construct this url without using any Google Maps API? If I simply try to replace the latitude longitude above the street view ends up facing in the incorrect direction. Any way to get the heading just right?
The way I solved this was to first call the following API to get a panoId
and best_view_direction_deg
. Here's an example url for that API:
http://maps.google.com/cbk?output=json&ll=40.766200,-73.982500
Here's a piece of ObjC code I used to convert the pano ID and direction into a url:
+ (NSString *)bestStreetViewWebUrlForCoordinate:(CLLocationCoordinate2D)coordinate panoId:(NSString *)panoId bestViewDirectionDeg:(NSString *)bestViewDirectionDeg
{
NSString *streetViewUrlString = nil;
if (panoId != nil)
{
streetViewUrlString = [NSString stringWithFormat:@"https://maps.gstatic.com/m/streetview/?panoid=%@&cbp=0,%@,0,0,0", panoId, bestViewDirectionDeg];
}
else
{
streetViewUrlString = [NSString stringWithFormat:@"https://maps.gstatic.com/m/streetview/?q=&layer=c&cbll=%f,%f&cbp=11,0,0,0,0&output=classic&dg=brw",coordinate.latitude, coordinate.longitude];
}
return streetViewUrlString;
}
Output looks like:
https://maps.gstatic.com/m/streetview/?panoid=fB883QwmW5xNsXRuEHxmHw&cbp=0,207.478,0,0,0