Skip to content

Instantly share code, notes, and snippets.

@sujinleeme
Last active May 17, 2019 15:22
Show Gist options
  • Save sujinleeme/a3881f88ed1cab761fa091a4af630801 to your computer and use it in GitHub Desktop.
Save sujinleeme/a3881f88ed1cab761fa091a4af630801 to your computer and use it in GitHub Desktop.

How to download Google Maps Street View Static Images based on geojson

Google Maps Street View Static API

os.environ['GOOGLE_MAPS_KEY'] = 'YOUR KEY'
  • Run the script with python3 static-street-image.py.
Abingdon Road.
6 images are going to be download.....
success: 6/6 **** fail: 0/6
=======================================
Adam Drive.
15 images are going to be download.....
success: 10/15 **** fail: 5/15
=======================================
Adam Park.
19 images are going to be download.....
....
  • All images might be uploaded inside images folder.

e.g)

.
├── Abingdon\ Road
│   ├── 103.9787469-1.3692966.jpg
│   ├── 103.9787969-1.3692413.jpg
│   ├── 103.979376-1.3685506.jpg
│   ├── 103.9794005-1.3685049.jpg
│   └── 103.9794143-1.3684698.jpg
├── Adam\ Drive
│   ├── 103.8116705-1.3365496.jpg
│   ├── 103.8119119-1.3365496.jpg
│   ├── 103.8121614-1.3366166.jpg
│   ├── 103.8122767-1.3367507.jpg
│   ├── 103.812376-1.3369867.jpg
│   ├── 103.8125208-1.3372978.jpg
│   ├── 103.8174696-1.3342135.jpg
│   ├── 103.8175177-1.3342015.jpg
│   ├── 103.8175498-1.3341896.jpg
│   ├── 103.817576-1.3341744.jpg
│   ├── 103.8175954-1.3341525.jpg
│   ├── 103.8176052-1.3339948.jpg
│   ├── 103.8176081-1.3341221.jpg
│   ├── 103.8176107-1.3340427.jpg
│   └── 103.8176123-1.33409.jpg
├── Adam\ Park
│   ├── 103.8123316-1.331977.jpg
│   ├── 103.8125838-1.331864.jpg
│   ├── 103.8131354-1.3317404.jpg
│   ├── 103.813454-1.3315882.jpg
│   ├── 103.81363-1.3313742.jpg
│   ├── 103.813713-1.3303406.jpg
│   ├── 103.81374-1.3310596.jpg
│   ├── 103.8137425-1.3302173.jpg
│   ├── 103.8137841-1.3300845.jpg
│   ├── 103.8139726-1.3289442.jpg
│   ├── 103.8139745-1.3288971.jpg
│   ├── 103.8139981-1.3288462.jpg
│   ├── 103.8140378-1.3288127.jpg
│   ├── 103.8140529-1.3296554.jpg
│   ├── 103.8140937-1.3287749.jpg
│   ├── 103.8141061-1.3291786.jpg
│   ├── 103.8141172-1.3294503.jpg
│   ├── 103.8141291-1.3292492.jpg
│   └── 103.8141346-1.3293362.jpg
├── Adam\ Road
│   ├── 103.8140913-1.3282751.jpg
│   ├── 103.8140937-1.3287749.jpg
│   ├── 103.8141326-1.3284244.jpg
│   ├── 103.814175-1.3285513.jpg
│   ├── 103.8142173-1.3286633.jpg
│   ├── 103.814247-1.3291124.jpg
│   ├── 103.8144745-1.3294515.jpg
│   ├── 103.8145377-1.3295436.jpg
│   ├── 103.8161537-1.33193.jpg
│   ├── 103.816335-1.3322289.jpg
│   ├── 103.8165165-1.3325033.jpg
│   ├── 103.8166993-1.3327336.jpg
│   ├── 103.8196739-1.3382658.jpg
│   └── 103.8197248-1.3383892.jpg
├── Adis\ Road
│   ├── 103.8473761-1.2999338.jpg
│   ├── 103.8474352-1.2999231.jpg
│   ├── 103.8474616-1.3018907.jpg
│   ├── 103.8474634-1.3018376.jpg
│   ├── 103.8474823-1.3019426.jpg
│   ├── 103.847508-1.2999259.jpg
│   ├── 103.8475341-1.3017785.jpg
│   ├── 103.8475485-1.3020338.jpg
│   ├── 103.8477678-1.2999911.jpg
│   ├── 103.8478728-1.3000191.jpg
│   ├── 103.8480048-1.300081.jpg
│   ├── 103.8480976-1.3013509.jpg
│   ├── 103.8481052-1.3001347.jpg
│   ├── 103.8481822-1.3001954.jpg
│   ├── 103.8481982-1.3012517.jpg
│   ├── 103.8482453-1.3002771.jpg
│   ├── 103.8482787-1.3011458.jpg
│   ├── 103.8482873-1.3003471.jpg
│   ├── 103.8483323-1.3010291.jpg
│   ├── 103.848339-1.3004405.jpg
│   ├── 103.8483672-1.3009433.jpg
│   ├── 103.8483725-1.3005518.jpg
│   ├── 103.8483846-1.3008548.jpg
│   ├── 103.848386-1.300655.jpg
│   └── 103.84839-1.3007556.jpg
├── Admiralty\ Drive
│   ├── 103.8144727-1.4481926.jpg
│   ├── 103.8145197-1.4481451.jpg
│   ├── 103.8149691-1.4498961.jpg
│   ├── 103.8152239-1.4499777.jpg
│   ├── 103.8176211-1.4508496.jpg
│   ├── 103.817718-1.4508926.jpg
│   ├── 103.8196917-1.4517672.jpg
│   └── 103.8198963-1.4518805.jpg
├── Admiralty\ Lane
│   ├── 103.8148011-1.4591936.jpg
│   ├── 103.8148997-1.4591367.jpg
│   ├── 103.8153398-1.4588782.jpg
│   ├── 103.8156053-1.4587495.jpg
│   ├── 103.8175822-1.4577312.jpg
│   ├── 103.8179268-1.4575287.jpg
│   ├── 103.8180808-1.4574006.jpg
│   ├── 103.8186362-1.4569611.jpg
│   ├── 103.8195956-1.4559905.jpg
│   └── 103.819724-1.4558317.jpg
├── Admiralty\ Link
│   ├── 103.8151495-1.4544973.jpg
│   ├── 103.815953-1.4545836.jpg
│   ├── 103.8181803-1.4559985.jpg
│   └── 103.8183584-1.4562348.jpg
└── Admiralty\ Road
    ├── 103.7710264-1.4410374.jpg
    ├── 103.7711543-1.4410394.jpg
    ├── 103.7719245-1.4410656.jpg
    ├── 103.7745389-1.4415389.jpg
    ├── 103.7746305-1.4415933.jpg
    └── 103.7751878-1.4420243.jpg
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
import json
import os
import shutil
import requests
from random import choice
BASE_URL = 'https://maps.googleapis.com/maps/api/streetview?'
METADATA_URL = 'https://maps.googleapis.com/maps/api/streetview/metadata?'
SIZE = '200x200'
GOOGLE_MAPS_KEY = os.environ['GOOGLE_MAPS_KEY']
BASE_DIR = 'images100'
desktop_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0']
def random_headers():
return {'User-Agent': choice(desktop_agents), 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}
if not os.path.exists(BASE_DIR):
os.makedirs(BASE_DIR)
else:
shutil.rmtree(BASE_DIR)
with open('geojson.json', 'r') as f:
body = json.load(f)
streets = body['features']
for street in streets:
street_name = street['properties']['name']
print(f'{street_name}.')
coordinates = street['geometry']['coordinates']
img_dir = f'{BASE_DIR}/{street_name}'
if not os.path.exists(img_dir):
os.makedirs(img_dir)
print(f'{len(coordinates)} images are going to be download.....')
success_images_num = 0
fail_images_num = 0
for corrdinate in coordinates:
latitude = corrdinate[1]
longtitude = corrdinate[0]
img_url = f'{BASE_URL}size={SIZE}&location={latitude},{longtitude}&key={GOOGLE_MAPS_KEY}'
meta_data_url = f'{METADATA_URL}size={SIZE}&location={latitude},{longtitude}&key={GOOGLE_MAPS_KEY}'
meta_data_request = requests.get(meta_data_url)
meta_data_content = meta_data_request.json()
if meta_data_content['status'] == "OK":
success_images_num += 1
img_path = f'{img_dir}/{longtitude}-{latitude}.jpg'
r = requests.get(img_url, timeout=100, headers=random_headers())
open(img_path, 'wb').write(r.content)
else:
fail_images_num += 1
print(
f'success: {success_images_num}/{len(coordinates)} **** fail: {fail_images_num}/{len(coordinates)}')
print("=======================================")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment