streetlevel.streetside: Bing Streetside
Finding panoramas
- find_panoramas(lat, lon, radius=25, limit=50, session=None)
Retrieves panoramas within a square around a point.
- Parameters:
lat (float) – Latitude of the center point.
lon (float) – Longitude of the center point.
radius (float) – (optional) Radius of the square in meters. (Not sure if that’s the correct mathematical term, but you get the idea.) Defaults to 25.
limit (int) – (optional) Maximum number of results to return. Defaults to 50.
session (Session | None) – (optional) A requests session.
- Returns:
A list of StreetsidePanorama objects.
- Return type:
List[StreetsidePanorama]
Usage sample:
from streetlevel import streetside panos = streetside.find_panoramas(-17.831848, 31.046641) print(panos[0].lat, panos[0].lon) print(panos[0].id) print(panos[0].date)
- async find_panoramas_async(lat, lon, session, radius=25, limit=50)
- Parameters:
lat (float)
lon (float)
session (ClientSession)
radius (float)
limit (int)
- Return type:
List[StreetsidePanorama]
Usage sample:
from streetlevel import streetside from aiohttp import ClientSession async with ClientSession() as session: panos = await streetside.find_panoramas_async(-17.831848, 31.046641, session) print(panos[0].lat, panos[0].lon) print(panos[0].id) print(panos[0].date)
- find_panoramas_in_bbox(north, west, south, east, limit=50, session=None)
Retrieves panoramas within a bounding box.
- Parameters:
north (float) – lat1.
west (float) – lon1.
south (float) – lat2.
east (float) – lon2.
limit (int) – (optional) Maximum number of results to return. Defaults to 50.
session (Session | None) – (optional) A requests session.
- Returns:
A list of StreetsidePanorama objects.
- Return type:
List[StreetsidePanorama]
- async find_panoramas_in_bbox_async(north, west, south, east, session, limit=50)
- Parameters:
north (float)
west (float)
south (float)
east (float)
session (ClientSession)
limit (int)
- Return type:
List[StreetsidePanorama]
- find_panorama_by_id(panoid, session=None)
Fetches metadata for a specific panorama.
- Parameters:
panoid (int) – The pano ID.
session (Session | None) – (optional) A requests session.
- Returns:
A StreetsidePanorama object if a panorama was found, or None.
- Return type:
StreetsidePanorama | None
Usage sample:
from streetlevel import streetside pano = streetside.find_panorama_by_id(398611371) print(pano.lat, pano.lon) print(pano.date) print(pano.heading)
- async find_panorama_by_id_async(panoid, session)
- Parameters:
panoid (int)
session (ClientSession)
- Return type:
StreetsidePanorama | None
Usage sample:
from streetlevel import streetside from aiohttp import ClientSession async with ClientSession() as session: pano = await streetside.find_panorama_by_id_async(398611371, session) print(pano.lat, pano.lon) print(pano.date) print(pano.heading)
Downloading panoramas
- get_panorama(pano, zoom=4, stitching_method=CubemapStitchingMethod.ROW)
Downloads a panorama and returns it as PIL image.
- Parameters:
pano (StreetsidePanorama) – The panorama.
zoom (int) – (optional) Image size; 0 is lowest, 4 is highest. Defaults to 4. If 4 is not available, 3 will be downloaded. (Note that only the old Microsoft panoramas go up to 4; the TomTom-provided panoramas stop at 3.)
stitching_method (CubemapStitchingMethod) – (optional) Whether and how the faces of the cubemap are stitched into one image. Defaults to
ROW.- Returns:
A PIL image or a list of six PIL images depending on
stitching_method.- Return type:
List[Image] | Image
- async get_panorama_async(pano, session, zoom=4, stitching_method=CubemapStitchingMethod.ROW)
- Parameters:
pano (StreetsidePanorama)
session (ClientSession)
zoom (int)
stitching_method (CubemapStitchingMethod)
- Return type:
List[Image] | Image
- download_panorama(pano, path, zoom=4, stitching_method=CubemapStitchingMethod.ROW, pil_args=None)
Downloads a panorama to a file.
- Parameters:
pano (StreetsidePanorama) – The panorama.
path (str) – Output path.
zoom (int) – (optional) Image size; 0 is lowest, 4 is highest. Defaults to 4. If 4 is not available, 3 will be downloaded. (Note that only the old Microsoft panoramas go up to 4; the TomTom-provided panoramas stop at 3.)
stitching_method (CubemapStitchingMethod) – (optional) Whether and how the faces of the cubemap are stitched into one image. Defaults to
ROW.pil_args (dict | None) – (optional) Additional arguments for PIL’s Image.save method, e.g.
{"quality":100}. Defaults to{}.- Return type:
None
Usage sample:
from streetlevel import streetside pano = streetside.find_panorama_by_id(398611371) streetside.download_panorama(pano, f"{pano.id}.jpg")
- async download_panorama_async(pano, path, session, zoom=4, stitching_method=CubemapStitchingMethod.ROW, pil_args=None)
- Parameters:
pano (StreetsidePanorama)
path (str)
session (ClientSession)
zoom (int)
stitching_method (CubemapStitchingMethod)
pil_args (dict | None)
- Return type:
None
Usage sample:
from streetlevel import streetside from aiohttp import ClientSession async with ClientSession() as session: pano = await streetside.find_panorama_by_id_async(398611371, session) await streetside.download_panorama_async(pano, f"{pano.id}.jpg", session)
Data classes
- class StreetsidePanorama(id, lat, lon, date, next=None, previous=None, elevation=None, heading=None, pitch=None, roll=None, max_zoom=None)
Metadata of a Streetside panorama.
- Parameters:
id (int)
lat (float)
lon (float)
date (datetime)
next (int)
previous (int)
elevation (int)
heading (float)
pitch (float)
roll (float)
max_zoom (int)
- date: datetime
Capture date and time of the panorama.
- elevation: int = None
Elevation at the capture location in meters.
- heading: float = None
Heading in radians, where 0° is north, 90° is east, 180° is south and 270° is west.
- id: int
The pano ID.
- lat: float
Latitude of the panorama’s location.
- lon: float
Longitude of the panorama’s location.
- max_zoom: int = None
Highest zoom level available; 4 for the original Microsoft panoramas, 3 for the TomTom-provided ones.
- next: int = None
ID of the next image in the sequence.
- permalink(heading=0.0, pitch=0.0, map_zoom=17.0, radians=False)
Creates a permalink to the closest panorama to the given location. Directly linking to a specific panorama by its ID does not appear to be possible.
- Parameters:
heading (float) – (optional) Initial heading of the viewport. Defaults to 0°.
pitch (float) – (optional) Initial pitch of the viewport. Defaults to 0°.
map_zoom (float) – (optional) Initial zoom level of the map. Defaults to 17.
radians (bool) – (optional) Whether angles are in radians. Defaults to False.
- Returns:
A Bing Maps URL which will open the closest panorama to the given location.
- Return type:
str
- pitch: float = None
Pitch offset for upright correction of the panorama, in radians.
- previous: int = None
ID of the previous image in the sequence.
- roll: float = None
Roll offset for upright correction of the panorama, in radians.
Miscellaneous
- build_permalink(lat, lon, heading=0.0, pitch=0.0, map_zoom=17.0, radians=False)
Creates a permalink to the closest panorama to the given location. Directly linking to a specific panorama by its ID does not appear to be possible.
- Parameters:
lat (float) – Latitude of the panorama’s location.
lon (float) – Longitude of the panorama’s location.
heading (float) – (optional) Initial heading of the viewport. Defaults to 0°.
pitch (float) – (optional) Initial pitch of the viewport. Defaults to 0°.
map_zoom (float) – (optional) Initial zoom level of the map. Defaults to 17.
radians (bool) – (optional) Whether angles are in radians. Defaults to False.
- Returns:
A Bing Maps URL which will open the closest panorama to the given location.
- Return type:
str
- from_base4(n)
Converts a string containing a base 4 number to integer.
- Parameters:
n (str) – The string containing a base 4 number.
- Returns:
The integer represented by the string.
- Return type:
int
- to_base4(n)
Converts an integer to a base 4 string.
- Parameters:
n (int) – The integer.
- Returns:
The base 4 representation of the integer.
- Return type:
str