|
|
|
|
|
import overpy |
|
|
from geopy.geocoders import Nominatim |
|
|
import requests |
|
|
|
|
|
MAPBOX_API_KEY = None |
|
|
crosswalk_images_folder = "crosswalk_images" |
|
|
|
|
|
|
|
|
|
|
|
def get_cross_walk_location(location_geo_code, bounds=0.001): |
|
|
over_api = overpy.Overpass() |
|
|
geo_locator = Nominatim(user_agent="crosswalk_locator") |
|
|
location = geo_locator.geocode(location_geo_code) |
|
|
|
|
|
if not location: |
|
|
raise ValueError("This location could not be geocoded - try an alternative name?.") |
|
|
|
|
|
geo_bounding_box = (location.latitude - bounds, location.longitude - bounds, |
|
|
location.latitude + bounds, location.longitude + bounds) |
|
|
|
|
|
query = f""" |
|
|
[out:json][timeout:25]; |
|
|
( |
|
|
node["highway"="crossing"]({geo_bounding_box[0]},{geo_bounding_box[1]},{geo_bounding_box[2]},{geo_bounding_box[3]}); |
|
|
); |
|
|
out body; |
|
|
""" |
|
|
|
|
|
result = over_api.query(query) |
|
|
|
|
|
crosswalks = [] |
|
|
for node in result.nodes: |
|
|
crosswalks.append((node.lat, node.lon)) |
|
|
|
|
|
|
|
|
|
|
|
return crosswalks |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_mapbox_aerial_image(location, output_file_name, zoom=18, size="256x256", style="satellite-v9", |
|
|
api_key=MAPBOX_API_KEY): |
|
|
longitude, latitude = location |
|
|
base_url = f"https://api.mapbox.com/styles/v1/mapbox/{style}/static" |
|
|
|
|
|
coords = f"{latitude},{longitude},{zoom}" |
|
|
url = f"{base_url}/{coords}/{size}?access_token={api_key}" |
|
|
|
|
|
response = requests.get(url) |
|
|
|
|
|
if response.status_code == 200: |
|
|
with open(output_file_name, "wb") as file: |
|
|
file.write(response.content) |
|
|
print(f"Retrieved aerial image and saved it as {output_file_name}") |
|
|
|
|
|
else: |
|
|
print("Error, Error, Error!", response.status_code, response.text) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_crosswalk_images(geo_code, folder=crosswalk_images_folder, file_extension="png"): |
|
|
crosswalk_image_files = [] |
|
|
crosswalk_set = get_cross_walk_location(geo_code, bounds=0.1) |
|
|
for crosswalk in crosswalk_set: |
|
|
formatted_crosswalk = list(map(float, crosswalk)) |
|
|
stored_file_name = str(formatted_crosswalk) |
|
|
try: |
|
|
get_mapbox_aerial_image(formatted_crosswalk, |
|
|
f"{folder}/{formatted_crosswalk}.{file_extension}") |
|
|
crosswalk_image_files.append(stored_file_name) |
|
|
except Exception as e: |
|
|
print(e) |
|
|
|
|
|
return crosswalk_image_files |
|
|
|
|
|
|
|
|
|