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 high-level 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 |
🇰🇷 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 | |
Find panoramas by slippy map tile or bounding box | ✔2 | ✔2 | ⚫ | ✔3 | ⚫ | ⚫ | ⚫ | ⚫ | |
Get specific panorama by ID | ✔ | ⚫ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Imagery The type of imagery returned by the service. |
|||||||||
Download panoramas | ✔ | ✔4 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Download depth information | ✔5 | ❌ | ⚫ | ⚫ | ✔ | ✔5 | ⚫ |
⚫ |
|
Image projection | Equirectangular | ??? | Equirectangular | Cubemap | Equirectangular | Cubemap | Equirectangular | Cubemap | |
Image format | JPEG | HEIC | 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 | ✔7 | ✔ |
✔7 | |
Elevation | ✔ | ✔ | ⚫ | ✔ | ⚫ | ✔ | ✔ | ⚫ | |
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