-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathplot_map.py
More file actions
73 lines (64 loc) · 2.64 KB
/
Copy pathplot_map.py
File metadata and controls
73 lines (64 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# def plot_google_map(lat, lon, zoom=11, size=(640, 640), scale=2, maptype="roadmap",
# markers=None, api_key="YOUR_API_KEY", return_image=False):
# import requests
# import numpy as np
# from PIL import Image
# from io import BytesIO
# url = f"https://maps.googleapis.com/maps/api/staticmap?center={lat},{lon}&zoom={zoom}"
# url += f"&size={size[0]}x{size[1]}&scale={scale}&maptype={maptype}&key={api_key}"
# if markers:
# for m_lat, m_lon, color in markers:
# url += f"&markers=color:{color}%7C{m_lat},{m_lon}"
# response = requests.get(url)
# if response.status_code == 200:
# img = Image.open(BytesIO(response.content))
# deg_per_pix = 156543.03392 * np.cos(np.radians(lat)) / (2**zoom) / 111320
# width_deg = size[0] * deg_per_pix
# height_deg = size[1] * deg_per_pix
# extent = [
# lon - width_deg / 2,
# lon + width_deg / 2,
# lat - height_deg / 2,
# lat + height_deg / 2
# ]
# if return_image:
# return np.array(img), extent
# else:
# return extent
# return None, None
def plot_google_map(lat, lon, zoom=11, size=(640, 640), scale=2, maptype="roadmap",
markers=None, api_key="YOUR_API_KEY", return_image=False):
import requests
import numpy as np
from PIL import Image
from io import BytesIO
# Build URL
url = f"https://maps.googleapis.com/maps/api/staticmap?center={lat},{lon}&zoom={zoom}"
url += f"&size={size[0]}x{size[1]}&scale={scale}&maptype={maptype}&key={api_key}"
# Add markers to URL
if markers:
for m_lat, m_lon, color in markers:
url += f"&markers=color:{color}%7C{m_lat},{m_lon}"
# Make the request
response = requests.get(url)
if response.status_code == 200:
# Read image and force RGB mode
img = Image.open(BytesIO(response.content)).convert("RGB")
img_np = np.array(img) # This will be shape (H, W, 3), dtype=uint8 ✅
# Calculate approximate lat/lon extent
deg_per_pix = 156543.03392 * np.cos(np.radians(lat)) / (2**zoom) / 111320
width_deg = size[0] * deg_per_pix
height_deg = size[1] * deg_per_pix
extent = [
lon - width_deg / 2,
lon + width_deg / 2,
lat - height_deg / 2,
lat + height_deg / 2
]
if return_image:
return img_np, extent
else:
return extent
else:
print("Failed to load map image.")
return None, None