streetlevel is a library for downloading panoramas and metadata from street-level imagery services such as Google Street View, Apple Look Around, and several others. It provides a simple abstraction over the internal APIs of the supported services โ this means that no API keys are required, but the library may break unexpectedly.
(Nearly) all functions are available as either a sync function using requests
or an async function
using aiohttp
, requiring a ClientSession
.
pip install streetlevel
Downloading the closest Google Street View panorama to a specific location, sync:
from streetlevel import streetview
pano = streetview.find_panorama(46.883958, 12.169002)
streetview.download_panorama(pano, f"{pano.id}.jpg")
Or async:
from streetlevel import streetview
from aiohttp import ClientSession
async with ClientSession() as session:
pano = await streetview.find_panorama_async(46.883958, 12.169002, session)
await streetview.download_panorama_async(pano, f"{pano.id}.jpg", session)
Documentation is available at streetlevel.readthedocs.io.
Services covering multiple countries are on the left; services covering one specific country are on the right.
โ implemented / available; ๐ก partially implemented; โ not implemented; โซ not available / not applicable
Google Streetย View |
Apple Lookย Around |
Yandex Panorama |
Bing Streetside |
๐จ๐ณ Baidu Panorama |
๐ฐ๐ท Kakao Roadย View |
๐ฐ๐ท Naver Streetย View |
๐จ๐ฟ Mapy.cz Panorama |
๐ฎ๐ธ Jรก 360 |
||
---|---|---|---|---|---|---|---|---|---|---|
Finding panoramas How panoramas can be retrieved through the API. |
||||||||||
Find panoramas around a point | โ1 | โซ | โ1 | โ | โ1 | โ | โ1 | โ1 | โ1 | |
Find panoramas by map tile or bbox | โ2 | โ2 | โซ | โ3 | โซ | โซ | โซ | โซ | โซ | |
Get specific panorama by ID | โ | โซ | โ | โ | โ | โ | โ | โ | โ | |
Imagery The type of imagery returned by the service. |
||||||||||
Panoramas | โ | โ4 | โ | โ | โ | โ | โ | โ | โ | |
Depth | โ5 | โ | โซ | โซ | โ?10 | โ | โ14 | โซ |
โซ |
|
Image projection | Equirectangular | ??? | Equirectangular | Cubemap | Equirectangular | Equirectangular | Equirectangular/Cubemap13 | Equirectangular | Cubemap | |
Image format | JPEG | HEIC | JPEG | JPEG | JPEG | JPEG | JPEG | JPEG | JPEG | |
Available metadata Metadata returned by the API of the service alongside ID and location. |
||||||||||
Capture date | โ6 | โ | โ | โ | โ | โ | โ | โ | โ9 | |
Heading, pitch, roll | โ | โ | โ7 | โ | โ | โ7 | โ11 | โ | โ7 | |
Elevation | โ | โ | โซ | โ | โ | โซ | โซ12 | โ | โซ | |
Nearby / linked panoramas | โ | โซ | โ | โ8 | โ | โ | โ | โ | โ | |
Historical panoramas | โ | โซ | โ | โซ | โ | โ | โ | โ | โซ | |
Address | โ | โซ | โ | โซ | โซ | โ | โ | โซ | โ | |
PoIs | โ | โ | โ | โซ | โซ | โ | โ | โซ | โซ | |
Creator | โ | โซ | โ | โซ | โ | โซ | โซ | โ | โซ |
1: Returns closest only
2: Tile, z=17
3: Bounding box
4: Unstitched
5: Appears to be a synthetic depth map created from elevation data and building footprints
6: Month and year only for official coverage, full date for inofficial coverage
7: Only heading; pitch/roll do not appear to be available
8: Previous and next image in sequence
9: Month and year only
10: There is a has_depth
field in the raw metadata, but I've yet to find a panorama that actually has depth
11: Pitch/roll are only available for the new 3D imagery
12: Camera altitude is available, however
13: 3D imagery panos have both an equirectangular and a cubemap version; everything else is only available as cubemap
14: Non-3D imagery appears to use a synthetic depthmap created from elevation data and building footprints