diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..ab1f416
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/SatForecast.iml b/.idea/SatForecast.iml
new file mode 100644
index 0000000..eab9ae5
--- /dev/null
+++ b/.idea/SatForecast.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b9bf2ff
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..262f5a0
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..adfd90f
--- /dev/null
+++ b/main.py
@@ -0,0 +1,507 @@
+import tkinter as tk
+from tkinter import ttk, messagebox
+from PIL import Image, ImageTk
+import requests
+from io import BytesIO
+import math
+import time
+from datetime import datetime
+import threading
+from pathlib import Path
+import random
+
+
+class RateLimiter:
+ def __init__(self, max_per_second=1):
+ self.min_interval = 1.0 / max_per_second
+ self.last_request = 0
+
+ def wait(self):
+ elapsed = time.time() - self.last_request
+ if elapsed < self.min_interval:
+ time.sleep(self.min_interval - elapsed)
+ self.last_request = time.time()
+
+
+class WeatherMapApp:
+ def __init__(self, root):
+ self.root = root
+ self.root.title("SatForecast")
+ self.root.geometry("1200x800")
+
+ # API ключи
+ self.owm_api_key = "cc437a23f6a217cd5859bd2d4dc9b6f8"
+
+ # Rate limiter
+ self.rate_limiter = RateLimiter(max_per_second=2)
+
+ # Настройки карты
+ self.lon = 37.6173
+ self.lat = 55.7558
+ self.zoom = 8
+ self.dragging = False
+ self.drag_start_x = 0
+ self.drag_start_y = 0
+
+ # Кэш тайлов
+ self.cache_dir = Path("tile_cache")
+ self.cache_dir.mkdir(exist_ok=True)
+
+ # Маркеры
+ self.markers = [
+ {"name": "Москва", "lat": 55.7558, "lon": 37.6173},
+ {"name": "СПб", "lat": 59.9343, "lon": 30.3351},
+ ]
+
+ # Настройка интерфейса
+ self.setup_ui()
+
+ # Загрузка данных
+ self.load_map()
+ self.load_forecast()
+
+ def setup_ui(self):
+ # Основной контейнер
+ main_frame = ttk.Frame(self.root)
+ main_frame.pack(fill='both', expand=True)
+
+ # Левая панель управления
+ control_panel = ttk.Frame(main_frame, width=300)
+ control_panel.pack(side='left', fill='y', padx=5, pady=5)
+ control_panel.pack_propagate(False)
+
+ # Поиск города
+ ttk.Label(control_panel, text="Поиск города:").pack(pady=5)
+ search_frame = ttk.Frame(control_panel)
+ search_frame.pack(fill='x', padx=5)
+
+ self.city_entry = ttk.Entry(search_frame)
+ self.city_entry.pack(side='left', fill='x', expand=True)
+ self.city_entry.bind('', lambda e: self.search_city())
+
+ ttk.Button(search_frame, text="🔍", width=3,
+ command=self.search_city).pack(side='left')
+
+ # Список городов
+ ttk.Label(control_panel, text="Избранные города:").pack(pady=5)
+ self.city_listbox = tk.Listbox(control_panel, height=8)
+ self.city_listbox.pack(fill='x', padx=5)
+ self.city_listbox.bind('<>', self.on_city_select)
+
+ for marker in self.markers:
+ self.city_listbox.insert(tk.END, marker['name'])
+
+ # Управление маркерами
+ marker_frame = ttk.Frame(control_panel)
+ marker_frame.pack(fill='x', padx=5, pady=5)
+
+ ttk.Button(marker_frame, text="Добавить маркер",
+ command=self.add_current_location).pack(fill='x')
+ ttk.Button(marker_frame, text="Удалить маркер",
+ command=self.remove_marker).pack(fill='x')
+
+ # Слои карты
+ ttk.Label(control_panel, text="Слой карты:").pack(pady=5)
+
+ layers = [
+ ("Спутник (ESRI)", "esri_sat"),
+ ("Спутник (Google)", "google_sat"),
+ ("OpenStreetMap", "osm"),
+ ("CartoDB", "cartodb"),
+ ("Температура", "temp"),
+ ("Облачность", "clouds"),
+ ("Осадки", "precipitation")
+ ]
+
+ self.layer_var = tk.StringVar(value="esri_sat")
+ for text, value in layers:
+ ttk.Radiobutton(control_panel, text=text, variable=self.layer_var,
+ value=value, command=self.load_map).pack(anchor='w', padx=20)
+
+ # Прогноз погоды
+ ttk.Label(control_panel, text="Прогноз погоды:").pack(pady=10)
+ self.forecast_text = tk.Text(control_panel, height=12, width=35)
+ self.forecast_text.pack(fill='both', expand=True, padx=5)
+
+ # Карта
+ map_frame = ttk.Frame(main_frame)
+ map_frame.pack(side='right', fill='both', expand=True)
+
+ self.canvas = tk.Canvas(map_frame, bg='#1a1a2e')
+ self.canvas.pack(fill='both', expand=True)
+
+ # Привязка событий
+ self.canvas.bind('', self.start_drag)
+ self.canvas.bind('', self.drag_map)
+ self.canvas.bind('', self.end_drag)
+ self.canvas.bind('', self.mouse_zoom)
+
+ # Кнопки масштаба
+ zoom_frame = ttk.Frame(map_frame)
+ zoom_frame.place(relx=1.0, rely=0.5, anchor='e', x=-10)
+
+ ttk.Button(zoom_frame, text="+", width=3,
+ command=lambda: self.change_zoom(1)).pack()
+ ttk.Button(zoom_frame, text="-", width=3,
+ command=lambda: self.change_zoom(-1)).pack()
+
+ # Статус бар
+ self.status_label = ttk.Label(self.root, text="Готово")
+ self.status_label.pack(side='bottom', fill='x')
+
+ def get_cache_path(self, layer, x, y, zoom):
+ cache_subdir = self.cache_dir / layer / str(zoom) / str(x)
+ cache_subdir.mkdir(parents=True, exist_ok=True)
+ return cache_subdir / f"{y}.png"
+
+ def download_tile_cached(self, url, layer, x, y, zoom):
+ cache_path = self.get_cache_path(layer, x, y, zoom)
+
+ # Проверяем кэш
+ if cache_path.exists():
+ max_age = 3 * 3600 if "sat" in layer else 24 * 3600
+ if datetime.now().timestamp() - cache_path.stat().st_mtime < max_age:
+ try:
+ return Image.open(cache_path)
+ except:
+ pass
+
+ try:
+ headers = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
+ 'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
+ 'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
+ 'Referer': 'https://www.openstreetmap.org/',
+ 'Sec-Fetch-Dest': 'image',
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'cross-site',
+ }
+
+ self.rate_limiter.wait()
+
+ response = requests.get(url, headers=headers, timeout=15)
+
+ if response.status_code == 200:
+ content_type = response.headers.get('content-type', '')
+ if 'image' in content_type or len(response.content) > 1000:
+ img = Image.open(BytesIO(response.content))
+ img.save(cache_path)
+ print(f"✓ {layer}: {x},{y} zoom={zoom}")
+ return img
+ else:
+ print(f"✗ Не изображение: {url[:80]}")
+ else:
+ print(f"✗ {response.status_code}: {url[:80]}")
+
+ except Exception as e:
+ print(f"✗ Ошибка: {e}")
+
+ # Возвращаем из кэша
+ if cache_path.exists():
+ try:
+ return Image.open(cache_path)
+ except:
+ pass
+
+ return None
+
+ def get_tile_url(self, x, y, zoom):
+ """Рабочие бесплатные URL для тайлов"""
+ layer = self.layer_var.get()
+
+ if layer == "esri_sat":
+ # ESRI спутниковые снимки (бесплатно, без ключа)
+ return f"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}"
+
+ elif layer == "google_sat":
+ # Google Maps спутник (бесплатно для некоммерческого использования)
+ # Используем разные поддомены для распределения нагрузки
+ subdomain = random.choice(['0', '1', '2', '3'])
+ return f"https://mt{subdomain}.google.com/vt/lyrs=s&x={x}&y={y}&z={zoom}"
+
+ elif layer == "osm":
+ # OpenStreetMap
+ subdomain = random.choice(['a', 'b', 'c'])
+ return f"https://{subdomain}.tile.openstreetmap.org/{zoom}/{x}/{y}.png"
+
+ elif layer == "cartodb":
+ # CartoDB Light (красивый стиль)
+ return f"https://a.basemaps.cartocdn.com/light_all/{zoom}/{x}/{y}.png"
+
+ elif layer == "temp":
+ return f"https://tile.openweathermap.org/map/temp_new/{zoom}/{x}/{y}.png?appid={self.owm_api_key}"
+
+ elif layer == "clouds":
+ return f"https://tile.openweathermap.org/map/clouds_new/{zoom}/{x}/{y}.png?appid={self.owm_api_key}"
+
+ elif layer == "precipitation":
+ return f"https://tile.openweathermap.org/map/precipitation_new/{zoom}/{x}/{y}.png?appid={self.owm_api_key}"
+
+ return None
+
+ def lat_lon_to_tile(self, lat, lon, zoom):
+ lat_rad = math.radians(lat)
+ n = 2.0 ** zoom
+ xtile = (lon + 180.0) / 360.0 * n
+ ytile = (1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n
+ return xtile, ytile
+
+ def load_map(self):
+ threading.Thread(target=self._load_map_thread, daemon=True).start()
+
+ def _load_map_thread(self):
+ self.root.after(0, lambda: self.status_label.config(text="Загрузка карты..."))
+
+ self.canvas.delete("tile")
+
+ center_x, center_y = self.lat_lon_to_tile(self.lat, self.lon, self.zoom)
+ center_x_int = int(center_x)
+ center_y_int = int(center_y)
+
+ tiles = {}
+ for dx in range(-1, 2):
+ for dy in range(-1, 2):
+ x = center_x_int + dx
+ y = center_y_int + dy
+
+ url = self.get_tile_url(x, y, self.zoom)
+ if url:
+ layer = self.layer_var.get()
+ img = self.download_tile_cached(url, layer, x, y, self.zoom)
+
+ if img:
+ tiles[(dx, dy)] = ImageTk.PhotoImage(img)
+
+ self.root.after(0, self._display_tiles, tiles, center_x, center_y)
+ self.root.after(0, lambda: self.status_label.config(
+ text=f"Загружено тайлов: {len(tiles)}/9"))
+
+ def _display_tiles(self, tiles, center_x, center_y):
+ canvas_width = self.canvas.winfo_width()
+ canvas_height = self.canvas.winfo_height()
+
+ if canvas_width < 100:
+ canvas_width = 800
+ canvas_height = 600
+
+ tile_size = 256
+
+ for (dx, dy), photo in tiles.items():
+ x_offset = (center_x - int(center_x)) * tile_size
+ y_offset = (center_y - int(center_y)) * tile_size
+
+ px = canvas_width / 2 + dx * tile_size - x_offset
+ py = canvas_height / 2 + dy * tile_size - y_offset
+
+ self.canvas.create_image(px, py, image=photo, anchor='nw', tags="tile")
+
+ self.draw_markers()
+ self.canvas.tile_images = tiles
+
+ def draw_markers(self):
+ self.canvas.delete("marker")
+
+ canvas_width = self.canvas.winfo_width()
+ canvas_height = self.canvas.winfo_height()
+
+ for marker in self.markers:
+ marker_x, marker_y = self.lat_lon_to_tile(
+ marker['lat'], marker['lon'], self.zoom)
+
+ center_x, center_y = self.lat_lon_to_tile(self.lat, self.lon, self.zoom)
+
+ tile_size = 256
+ px = canvas_width / 2 + (marker_x - center_x) * tile_size
+ py = canvas_height / 2 + (marker_y - center_y) * tile_size
+
+ # Красивый маркер
+ self.canvas.create_oval(px - 10, py - 10, px + 10, py + 10,
+ fill='#ff4444', outline='white', width=2, tags="marker")
+ self.canvas.create_oval(px - 3, py - 3, px + 3, py + 3,
+ fill='white', tags="marker")
+ self.canvas.create_text(px, py - 20, text=marker['name'],
+ fill='white', font=('Arial', 10, 'bold'),
+ tags="marker")
+
+ def start_drag(self, event):
+ self.dragging = True
+ self.drag_start_x = event.x
+ self.drag_start_y = event.y
+
+ def drag_map(self, event):
+ if not self.dragging:
+ return
+
+ dx = event.x - self.drag_start_x
+ dy = event.y - self.drag_start_y
+
+ self.canvas.move("tile", dx, dy)
+ self.canvas.move("marker", dx, dy)
+
+ tile_size = 256
+ n = 2.0 ** self.zoom
+
+ self.lon -= dx / tile_size * 360.0 / n
+ self.lat += dy / tile_size * 180.0 / n
+
+ self.drag_start_x = event.x
+ self.drag_start_y = event.y
+
+ if abs(dx) > tile_size / 2 or abs(dy) > tile_size / 2:
+ self.load_map()
+
+ def end_drag(self, event):
+ self.dragging = False
+ self.load_map()
+
+ def mouse_zoom(self, event):
+ if event.delta > 0:
+ self.change_zoom(1)
+ else:
+ self.change_zoom(-1)
+
+ def change_zoom(self, delta):
+ new_zoom = self.zoom + delta
+ if 2 <= new_zoom <= 18:
+ self.zoom = new_zoom
+ self.load_map()
+
+ def search_city(self):
+ city = self.city_entry.get().strip()
+ if not city:
+ return
+ threading.Thread(target=self._search_city_thread, args=(city,), daemon=True).start()
+
+ def _search_city_thread(self, city):
+ try:
+ url = "https://nominatim.openstreetmap.org/search"
+ params = {
+ "q": city,
+ "format": "json",
+ "limit": 1
+ }
+ headers = {
+ "User-Agent": "SatForecast/1.0"
+ }
+
+ response = requests.get(url, params=params, headers=headers)
+ data = response.json()
+
+ if data:
+ lat = float(data[0]['lat'])
+ lon = float(data[0]['lon'])
+ self.root.after(0, lambda: self.set_location(lat, lon, city))
+ else:
+ self.root.after(0, lambda: messagebox.showinfo("Поиск", "Город не найден"))
+ except Exception as e:
+ self.root.after(0, lambda: messagebox.showerror("Ошибка", str(e)))
+
+ def set_location(self, lat, lon, name):
+ self.lat = lat
+ self.lon = lon
+
+ if not any(m['name'] == name for m in self.markers):
+ self.markers.append({"name": name, "lat": lat, "lon": lon})
+ self.city_listbox.insert(tk.END, name)
+
+ self.load_map()
+ self.load_forecast()
+
+ def on_city_select(self, event):
+ selection = self.city_listbox.curselection()
+ if selection:
+ index = selection[0]
+ if index < len(self.markers):
+ marker = self.markers[index]
+ self.set_location(marker['lat'], marker['lon'], marker['name'])
+
+ def add_current_location(self):
+ name = f"Точка {len(self.markers) + 1}"
+ self.markers.append({"name": name, "lat": self.lat, "lon": self.lon})
+ self.city_listbox.insert(tk.END, name)
+ self.draw_markers()
+
+ def remove_marker(self):
+ selection = self.city_listbox.curselection()
+ if selection:
+ index = selection[0]
+ if index < len(self.markers):
+ del self.markers[index]
+ self.city_listbox.delete(index)
+ self.load_map()
+
+ def load_forecast(self):
+ threading.Thread(target=self._load_forecast_thread, daemon=True).start()
+
+ def _load_forecast_thread(self):
+ try:
+ # Open-Meteo (бесплатно, без ключа)
+ url = "https://api.open-meteo.com/v1/forecast"
+ params = {
+ "latitude": self.lat,
+ "longitude": self.lon,
+ "hourly": "temperature_2m,precipitation,wind_speed_10m,cloud_cover",
+ "daily": "temperature_2m_max,temperature_2m_min,precipitation_sum",
+ "timezone": "auto",
+ "forecast_days": 3
+ }
+
+ response = requests.get(url, params=params)
+ data = response.json()
+
+ forecast_text = f"📍 Прогноз для координат:\n{self.lat:.2f}, {self.lon:.2f}\n\n"
+
+ if 'daily' in data:
+ forecast_text += "📅 По дням:\n"
+ for i in range(3):
+ date = data['daily']['time'][i]
+ temp_max = data['daily']['temperature_2m_max'][i]
+ temp_min = data['daily']['temperature_2m_min'][i]
+ precip = data['daily']['precipitation_sum'][i]
+
+ weather_emoji = "☀️" if precip == 0 else "🌧️"
+ if temp_max > 30:
+ weather_emoji = "🔥"
+ elif temp_max < 0:
+ weather_emoji = "❄️"
+
+ forecast_text += f"{date}: {weather_emoji} {temp_min}°C...{temp_max}°C, 💧{precip}мм\n"
+
+ if 'hourly' in data:
+ forecast_text += "\n🕐 Ближайшие часы:\n"
+ current_hour = datetime.now().hour
+ for i in range(current_hour, min(current_hour + 8, len(data['hourly']['time']))):
+ time = data['hourly']['time'][i].split('T')[1]
+ temp = data['hourly']['temperature_2m'][i]
+ wind = data['hourly']['wind_speed_10m'][i]
+ clouds = data['hourly']['cloud_cover'][i]
+
+ cloud_emoji = "☁️" if clouds > 50 else "🌤️" if clouds > 20 else "☀️"
+ forecast_text += f"{time}: {cloud_emoji} {temp}°C, 💨{wind}м/с\n"
+
+ self.root.after(0, self._update_forecast_display, forecast_text)
+ except Exception as e:
+ self.root.after(0, lambda: self.status_label.config(text=f"Ошибка прогноза: {e}"))
+
+ def _update_forecast_display(self, text):
+ self.forecast_text.delete(1.0, tk.END)
+ self.forecast_text.insert(1.0, text)
+
+
+def main():
+ root = tk.Tk()
+ app = WeatherMapApp(root)
+
+ style = ttk.Style()
+ style.theme_use('clam')
+
+ def on_closing():
+ if messagebox.askokcancel("Выход", "Закрыть приложение?"):
+ root.destroy()
+
+ root.protocol("WM_DELETE_WINDOW", on_closing)
+ root.mainloop()
+
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/tile_cache/cartodb/9/311/178.png b/tile_cache/cartodb/9/311/178.png
new file mode 100644
index 0000000..4bbf1c0
Binary files /dev/null and b/tile_cache/cartodb/9/311/178.png differ
diff --git a/tile_cache/cartodb/9/311/179.png b/tile_cache/cartodb/9/311/179.png
new file mode 100644
index 0000000..dd4abb4
Binary files /dev/null and b/tile_cache/cartodb/9/311/179.png differ
diff --git a/tile_cache/cartodb/9/311/180.png b/tile_cache/cartodb/9/311/180.png
new file mode 100644
index 0000000..cd599b1
Binary files /dev/null and b/tile_cache/cartodb/9/311/180.png differ
diff --git a/tile_cache/cartodb/9/312/178.png b/tile_cache/cartodb/9/312/178.png
new file mode 100644
index 0000000..b644b88
Binary files /dev/null and b/tile_cache/cartodb/9/312/178.png differ
diff --git a/tile_cache/cartodb/9/312/179.png b/tile_cache/cartodb/9/312/179.png
new file mode 100644
index 0000000..5c3c9b0
Binary files /dev/null and b/tile_cache/cartodb/9/312/179.png differ
diff --git a/tile_cache/cartodb/9/312/180.png b/tile_cache/cartodb/9/312/180.png
new file mode 100644
index 0000000..8961896
Binary files /dev/null and b/tile_cache/cartodb/9/312/180.png differ
diff --git a/tile_cache/cartodb/9/313/178.png b/tile_cache/cartodb/9/313/178.png
new file mode 100644
index 0000000..5245d77
Binary files /dev/null and b/tile_cache/cartodb/9/313/178.png differ
diff --git a/tile_cache/cartodb/9/313/179.png b/tile_cache/cartodb/9/313/179.png
new file mode 100644
index 0000000..cf26698
Binary files /dev/null and b/tile_cache/cartodb/9/313/179.png differ
diff --git a/tile_cache/cartodb/9/313/180.png b/tile_cache/cartodb/9/313/180.png
new file mode 100644
index 0000000..38832d9
Binary files /dev/null and b/tile_cache/cartodb/9/313/180.png differ
diff --git a/tile_cache/clouds/8/155/88.png b/tile_cache/clouds/8/155/88.png
new file mode 100644
index 0000000..d28a1d0
Binary files /dev/null and b/tile_cache/clouds/8/155/88.png differ
diff --git a/tile_cache/clouds/8/155/89.png b/tile_cache/clouds/8/155/89.png
new file mode 100644
index 0000000..f0a74f8
Binary files /dev/null and b/tile_cache/clouds/8/155/89.png differ
diff --git a/tile_cache/clouds/8/155/90.png b/tile_cache/clouds/8/155/90.png
new file mode 100644
index 0000000..ea1e8a9
Binary files /dev/null and b/tile_cache/clouds/8/155/90.png differ
diff --git a/tile_cache/clouds/8/156/88.png b/tile_cache/clouds/8/156/88.png
new file mode 100644
index 0000000..b252e3c
Binary files /dev/null and b/tile_cache/clouds/8/156/88.png differ
diff --git a/tile_cache/clouds/8/156/89.png b/tile_cache/clouds/8/156/89.png
new file mode 100644
index 0000000..65f07b2
Binary files /dev/null and b/tile_cache/clouds/8/156/89.png differ
diff --git a/tile_cache/clouds/8/156/90.png b/tile_cache/clouds/8/156/90.png
new file mode 100644
index 0000000..779e90c
Binary files /dev/null and b/tile_cache/clouds/8/156/90.png differ
diff --git a/tile_cache/clouds/8/157/88.png b/tile_cache/clouds/8/157/88.png
new file mode 100644
index 0000000..c21aa8e
Binary files /dev/null and b/tile_cache/clouds/8/157/88.png differ
diff --git a/tile_cache/clouds/8/157/89.png b/tile_cache/clouds/8/157/89.png
new file mode 100644
index 0000000..fd30248
Binary files /dev/null and b/tile_cache/clouds/8/157/89.png differ
diff --git a/tile_cache/clouds/8/157/90.png b/tile_cache/clouds/8/157/90.png
new file mode 100644
index 0000000..6ba4c1a
Binary files /dev/null and b/tile_cache/clouds/8/157/90.png differ
diff --git a/tile_cache/esri_sat/10/623/358.png b/tile_cache/esri_sat/10/623/358.png
new file mode 100644
index 0000000..70eb126
Binary files /dev/null and b/tile_cache/esri_sat/10/623/358.png differ
diff --git a/tile_cache/esri_sat/10/623/359.png b/tile_cache/esri_sat/10/623/359.png
new file mode 100644
index 0000000..bafcc2c
Binary files /dev/null and b/tile_cache/esri_sat/10/623/359.png differ
diff --git a/tile_cache/esri_sat/10/623/360.png b/tile_cache/esri_sat/10/623/360.png
new file mode 100644
index 0000000..5d71261
Binary files /dev/null and b/tile_cache/esri_sat/10/623/360.png differ
diff --git a/tile_cache/esri_sat/10/624/358.png b/tile_cache/esri_sat/10/624/358.png
new file mode 100644
index 0000000..3d69d59
Binary files /dev/null and b/tile_cache/esri_sat/10/624/358.png differ
diff --git a/tile_cache/esri_sat/10/624/359.png b/tile_cache/esri_sat/10/624/359.png
new file mode 100644
index 0000000..2cafd20
Binary files /dev/null and b/tile_cache/esri_sat/10/624/359.png differ
diff --git a/tile_cache/esri_sat/10/624/360.png b/tile_cache/esri_sat/10/624/360.png
new file mode 100644
index 0000000..88374ab
Binary files /dev/null and b/tile_cache/esri_sat/10/624/360.png differ
diff --git a/tile_cache/esri_sat/10/625/358.png b/tile_cache/esri_sat/10/625/358.png
new file mode 100644
index 0000000..a025cab
Binary files /dev/null and b/tile_cache/esri_sat/10/625/358.png differ
diff --git a/tile_cache/esri_sat/10/625/359.png b/tile_cache/esri_sat/10/625/359.png
new file mode 100644
index 0000000..7c8c8c8
Binary files /dev/null and b/tile_cache/esri_sat/10/625/359.png differ
diff --git a/tile_cache/esri_sat/10/625/360.png b/tile_cache/esri_sat/10/625/360.png
new file mode 100644
index 0000000..d588ce0
Binary files /dev/null and b/tile_cache/esri_sat/10/625/360.png differ
diff --git a/tile_cache/esri_sat/11/1248/717.png b/tile_cache/esri_sat/11/1248/717.png
new file mode 100644
index 0000000..e07b9bc
Binary files /dev/null and b/tile_cache/esri_sat/11/1248/717.png differ
diff --git a/tile_cache/esri_sat/11/1248/718.png b/tile_cache/esri_sat/11/1248/718.png
new file mode 100644
index 0000000..328463a
Binary files /dev/null and b/tile_cache/esri_sat/11/1248/718.png differ
diff --git a/tile_cache/esri_sat/11/1248/719.png b/tile_cache/esri_sat/11/1248/719.png
new file mode 100644
index 0000000..ab44416
Binary files /dev/null and b/tile_cache/esri_sat/11/1248/719.png differ
diff --git a/tile_cache/esri_sat/11/1249/717.png b/tile_cache/esri_sat/11/1249/717.png
new file mode 100644
index 0000000..d09a797
Binary files /dev/null and b/tile_cache/esri_sat/11/1249/717.png differ
diff --git a/tile_cache/esri_sat/12/1249/718.png b/tile_cache/esri_sat/12/1249/718.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/12/1249/718.png differ
diff --git a/tile_cache/esri_sat/12/2498/1435.png b/tile_cache/esri_sat/12/2498/1435.png
new file mode 100644
index 0000000..f2d3e71
Binary files /dev/null and b/tile_cache/esri_sat/12/2498/1435.png differ
diff --git a/tile_cache/esri_sat/13/1249/719.png b/tile_cache/esri_sat/13/1249/719.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/1249/719.png differ
diff --git a/tile_cache/esri_sat/13/1250/717.png b/tile_cache/esri_sat/13/1250/717.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/1250/717.png differ
diff --git a/tile_cache/esri_sat/13/1250/718.png b/tile_cache/esri_sat/13/1250/718.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/1250/718.png differ
diff --git a/tile_cache/esri_sat/13/1250/719.png b/tile_cache/esri_sat/13/1250/719.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/1250/719.png differ
diff --git a/tile_cache/esri_sat/13/2498/1436.png b/tile_cache/esri_sat/13/2498/1436.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2498/1436.png differ
diff --git a/tile_cache/esri_sat/13/2498/1437.png b/tile_cache/esri_sat/13/2498/1437.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2498/1437.png differ
diff --git a/tile_cache/esri_sat/13/2499/1435.png b/tile_cache/esri_sat/13/2499/1435.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2499/1435.png differ
diff --git a/tile_cache/esri_sat/13/2499/1436.png b/tile_cache/esri_sat/13/2499/1436.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2499/1436.png differ
diff --git a/tile_cache/esri_sat/13/2499/1437.png b/tile_cache/esri_sat/13/2499/1437.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2499/1437.png differ
diff --git a/tile_cache/esri_sat/13/2500/1435.png b/tile_cache/esri_sat/13/2500/1435.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2500/1435.png differ
diff --git a/tile_cache/esri_sat/13/2500/1436.png b/tile_cache/esri_sat/13/2500/1436.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2500/1436.png differ
diff --git a/tile_cache/esri_sat/13/2500/1437.png b/tile_cache/esri_sat/13/2500/1437.png
new file mode 100644
index 0000000..a7b54f0
Binary files /dev/null and b/tile_cache/esri_sat/13/2500/1437.png differ
diff --git a/tile_cache/esri_sat/13/4995/2871.png b/tile_cache/esri_sat/13/4995/2871.png
new file mode 100644
index 0000000..90b13b3
Binary files /dev/null and b/tile_cache/esri_sat/13/4995/2871.png differ
diff --git a/tile_cache/esri_sat/13/4995/2872.png b/tile_cache/esri_sat/13/4995/2872.png
new file mode 100644
index 0000000..8c94db2
Binary files /dev/null and b/tile_cache/esri_sat/13/4995/2872.png differ
diff --git a/tile_cache/esri_sat/13/4995/2873.png b/tile_cache/esri_sat/13/4995/2873.png
new file mode 100644
index 0000000..4a09086
Binary files /dev/null and b/tile_cache/esri_sat/13/4995/2873.png differ
diff --git a/tile_cache/esri_sat/13/4996/2871.png b/tile_cache/esri_sat/13/4996/2871.png
new file mode 100644
index 0000000..d016ae6
Binary files /dev/null and b/tile_cache/esri_sat/13/4996/2871.png differ
diff --git a/tile_cache/esri_sat/13/4996/2872.png b/tile_cache/esri_sat/13/4996/2872.png
new file mode 100644
index 0000000..469e17c
Binary files /dev/null and b/tile_cache/esri_sat/13/4996/2872.png differ
diff --git a/tile_cache/esri_sat/13/4997/2871.png b/tile_cache/esri_sat/13/4997/2871.png
new file mode 100644
index 0000000..4eea614
Binary files /dev/null and b/tile_cache/esri_sat/13/4997/2871.png differ
diff --git a/tile_cache/esri_sat/13/4997/2872.png b/tile_cache/esri_sat/13/4997/2872.png
new file mode 100644
index 0000000..208404c
Binary files /dev/null and b/tile_cache/esri_sat/13/4997/2872.png differ
diff --git a/tile_cache/esri_sat/13/4997/2873.png b/tile_cache/esri_sat/13/4997/2873.png
new file mode 100644
index 0000000..c647269
Binary files /dev/null and b/tile_cache/esri_sat/13/4997/2873.png differ
diff --git a/tile_cache/esri_sat/13/4997/2874.png b/tile_cache/esri_sat/13/4997/2874.png
new file mode 100644
index 0000000..9168a32
Binary files /dev/null and b/tile_cache/esri_sat/13/4997/2874.png differ
diff --git a/tile_cache/esri_sat/13/4998/2871.png b/tile_cache/esri_sat/13/4998/2871.png
new file mode 100644
index 0000000..54c99a8
Binary files /dev/null and b/tile_cache/esri_sat/13/4998/2871.png differ
diff --git a/tile_cache/esri_sat/13/4998/2872.png b/tile_cache/esri_sat/13/4998/2872.png
new file mode 100644
index 0000000..abf7b81
Binary files /dev/null and b/tile_cache/esri_sat/13/4998/2872.png differ
diff --git a/tile_cache/esri_sat/13/4998/2873.png b/tile_cache/esri_sat/13/4998/2873.png
new file mode 100644
index 0000000..c697c31
Binary files /dev/null and b/tile_cache/esri_sat/13/4998/2873.png differ
diff --git a/tile_cache/esri_sat/13/4998/2874.png b/tile_cache/esri_sat/13/4998/2874.png
new file mode 100644
index 0000000..87897de
Binary files /dev/null and b/tile_cache/esri_sat/13/4998/2874.png differ
diff --git a/tile_cache/esri_sat/13/4999/2871.png b/tile_cache/esri_sat/13/4999/2871.png
new file mode 100644
index 0000000..2d0a312
Binary files /dev/null and b/tile_cache/esri_sat/13/4999/2871.png differ
diff --git a/tile_cache/esri_sat/13/4999/2872.png b/tile_cache/esri_sat/13/4999/2872.png
new file mode 100644
index 0000000..93ae6e4
Binary files /dev/null and b/tile_cache/esri_sat/13/4999/2872.png differ
diff --git a/tile_cache/esri_sat/13/4999/2873.png b/tile_cache/esri_sat/13/4999/2873.png
new file mode 100644
index 0000000..6d93355
Binary files /dev/null and b/tile_cache/esri_sat/13/4999/2873.png differ
diff --git a/tile_cache/esri_sat/13/4999/2874.png b/tile_cache/esri_sat/13/4999/2874.png
new file mode 100644
index 0000000..51eb861
Binary files /dev/null and b/tile_cache/esri_sat/13/4999/2874.png differ
diff --git a/tile_cache/esri_sat/13/5000/2872.png b/tile_cache/esri_sat/13/5000/2872.png
new file mode 100644
index 0000000..4a9b252
Binary files /dev/null and b/tile_cache/esri_sat/13/5000/2872.png differ
diff --git a/tile_cache/esri_sat/13/5000/2873.png b/tile_cache/esri_sat/13/5000/2873.png
new file mode 100644
index 0000000..90e5e45
Binary files /dev/null and b/tile_cache/esri_sat/13/5000/2873.png differ
diff --git a/tile_cache/esri_sat/13/5000/2874.png b/tile_cache/esri_sat/13/5000/2874.png
new file mode 100644
index 0000000..1141135
Binary files /dev/null and b/tile_cache/esri_sat/13/5000/2874.png differ
diff --git a/tile_cache/esri_sat/14/19988/11491.png b/tile_cache/esri_sat/14/19988/11491.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/14/19988/11491.png differ
diff --git a/tile_cache/esri_sat/14/9991/5743.png b/tile_cache/esri_sat/14/9991/5743.png
new file mode 100644
index 0000000..59ae5e5
Binary files /dev/null and b/tile_cache/esri_sat/14/9991/5743.png differ
diff --git a/tile_cache/esri_sat/14/9991/5744.png b/tile_cache/esri_sat/14/9991/5744.png
new file mode 100644
index 0000000..a382e0a
Binary files /dev/null and b/tile_cache/esri_sat/14/9991/5744.png differ
diff --git a/tile_cache/esri_sat/14/9991/5745.png b/tile_cache/esri_sat/14/9991/5745.png
new file mode 100644
index 0000000..33f567c
Binary files /dev/null and b/tile_cache/esri_sat/14/9991/5745.png differ
diff --git a/tile_cache/esri_sat/14/9992/5742.png b/tile_cache/esri_sat/14/9992/5742.png
new file mode 100644
index 0000000..985fdb9
Binary files /dev/null and b/tile_cache/esri_sat/14/9992/5742.png differ
diff --git a/tile_cache/esri_sat/14/9992/5743.png b/tile_cache/esri_sat/14/9992/5743.png
new file mode 100644
index 0000000..fcd9fa7
Binary files /dev/null and b/tile_cache/esri_sat/14/9992/5743.png differ
diff --git a/tile_cache/esri_sat/14/9992/5744.png b/tile_cache/esri_sat/14/9992/5744.png
new file mode 100644
index 0000000..6257f2b
Binary files /dev/null and b/tile_cache/esri_sat/14/9992/5744.png differ
diff --git a/tile_cache/esri_sat/14/9992/5745.png b/tile_cache/esri_sat/14/9992/5745.png
new file mode 100644
index 0000000..fe313a7
Binary files /dev/null and b/tile_cache/esri_sat/14/9992/5745.png differ
diff --git a/tile_cache/esri_sat/14/9992/5746.png b/tile_cache/esri_sat/14/9992/5746.png
new file mode 100644
index 0000000..5f43beb
Binary files /dev/null and b/tile_cache/esri_sat/14/9992/5746.png differ
diff --git a/tile_cache/esri_sat/14/9993/5742.png b/tile_cache/esri_sat/14/9993/5742.png
new file mode 100644
index 0000000..c48a30c
Binary files /dev/null and b/tile_cache/esri_sat/14/9993/5742.png differ
diff --git a/tile_cache/esri_sat/14/9993/5743.png b/tile_cache/esri_sat/14/9993/5743.png
new file mode 100644
index 0000000..100dffb
Binary files /dev/null and b/tile_cache/esri_sat/14/9993/5743.png differ
diff --git a/tile_cache/esri_sat/14/9993/5744.png b/tile_cache/esri_sat/14/9993/5744.png
new file mode 100644
index 0000000..1358ac3
Binary files /dev/null and b/tile_cache/esri_sat/14/9993/5744.png differ
diff --git a/tile_cache/esri_sat/14/9993/5745.png b/tile_cache/esri_sat/14/9993/5745.png
new file mode 100644
index 0000000..70a8993
Binary files /dev/null and b/tile_cache/esri_sat/14/9993/5745.png differ
diff --git a/tile_cache/esri_sat/14/9993/5746.png b/tile_cache/esri_sat/14/9993/5746.png
new file mode 100644
index 0000000..f27f895
Binary files /dev/null and b/tile_cache/esri_sat/14/9993/5746.png differ
diff --git a/tile_cache/esri_sat/14/9994/5742.png b/tile_cache/esri_sat/14/9994/5742.png
new file mode 100644
index 0000000..c2b1fec
Binary files /dev/null and b/tile_cache/esri_sat/14/9994/5742.png differ
diff --git a/tile_cache/esri_sat/14/9994/5743.png b/tile_cache/esri_sat/14/9994/5743.png
new file mode 100644
index 0000000..23e5b8c
Binary files /dev/null and b/tile_cache/esri_sat/14/9994/5743.png differ
diff --git a/tile_cache/esri_sat/14/9994/5744.png b/tile_cache/esri_sat/14/9994/5744.png
new file mode 100644
index 0000000..b8330ea
Binary files /dev/null and b/tile_cache/esri_sat/14/9994/5744.png differ
diff --git a/tile_cache/esri_sat/14/9994/5745.png b/tile_cache/esri_sat/14/9994/5745.png
new file mode 100644
index 0000000..eee9fb2
Binary files /dev/null and b/tile_cache/esri_sat/14/9994/5745.png differ
diff --git a/tile_cache/esri_sat/14/9994/5746.png b/tile_cache/esri_sat/14/9994/5746.png
new file mode 100644
index 0000000..8ad2b81
Binary files /dev/null and b/tile_cache/esri_sat/14/9994/5746.png differ
diff --git a/tile_cache/esri_sat/15/19986/11489.png b/tile_cache/esri_sat/15/19986/11489.png
new file mode 100644
index 0000000..3aee4bf
Binary files /dev/null and b/tile_cache/esri_sat/15/19986/11489.png differ
diff --git a/tile_cache/esri_sat/15/19986/11490.png b/tile_cache/esri_sat/15/19986/11490.png
new file mode 100644
index 0000000..4740a55
Binary files /dev/null and b/tile_cache/esri_sat/15/19986/11490.png differ
diff --git a/tile_cache/esri_sat/15/19986/11491.png b/tile_cache/esri_sat/15/19986/11491.png
new file mode 100644
index 0000000..2724592
Binary files /dev/null and b/tile_cache/esri_sat/15/19986/11491.png differ
diff --git a/tile_cache/esri_sat/15/19987/11489.png b/tile_cache/esri_sat/15/19987/11489.png
new file mode 100644
index 0000000..7134729
Binary files /dev/null and b/tile_cache/esri_sat/15/19987/11489.png differ
diff --git a/tile_cache/esri_sat/15/19987/11490.png b/tile_cache/esri_sat/15/19987/11490.png
new file mode 100644
index 0000000..96f2adb
Binary files /dev/null and b/tile_cache/esri_sat/15/19987/11490.png differ
diff --git a/tile_cache/esri_sat/15/19987/11491.png b/tile_cache/esri_sat/15/19987/11491.png
new file mode 100644
index 0000000..30a4b27
Binary files /dev/null and b/tile_cache/esri_sat/15/19987/11491.png differ
diff --git a/tile_cache/esri_sat/15/19988/11489.png b/tile_cache/esri_sat/15/19988/11489.png
new file mode 100644
index 0000000..3c4ec1a
Binary files /dev/null and b/tile_cache/esri_sat/15/19988/11489.png differ
diff --git a/tile_cache/esri_sat/15/19988/11490.png b/tile_cache/esri_sat/15/19988/11490.png
new file mode 100644
index 0000000..c21a5f2
Binary files /dev/null and b/tile_cache/esri_sat/15/19988/11490.png differ
diff --git a/tile_cache/esri_sat/15/4996/2873.png b/tile_cache/esri_sat/15/4996/2873.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/4996/2873.png differ
diff --git a/tile_cache/esri_sat/15/4997/2871.png b/tile_cache/esri_sat/15/4997/2871.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/4997/2871.png differ
diff --git a/tile_cache/esri_sat/15/4997/2872.png b/tile_cache/esri_sat/15/4997/2872.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/4997/2872.png differ
diff --git a/tile_cache/esri_sat/15/4997/2873.png b/tile_cache/esri_sat/15/4997/2873.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/4997/2873.png differ
diff --git a/tile_cache/esri_sat/15/9992/5745.png b/tile_cache/esri_sat/15/9992/5745.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9992/5745.png differ
diff --git a/tile_cache/esri_sat/15/9992/5746.png b/tile_cache/esri_sat/15/9992/5746.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9992/5746.png differ
diff --git a/tile_cache/esri_sat/15/9993/5744.png b/tile_cache/esri_sat/15/9993/5744.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9993/5744.png differ
diff --git a/tile_cache/esri_sat/15/9993/5745.png b/tile_cache/esri_sat/15/9993/5745.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9993/5745.png differ
diff --git a/tile_cache/esri_sat/15/9993/5746.png b/tile_cache/esri_sat/15/9993/5746.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9993/5746.png differ
diff --git a/tile_cache/esri_sat/15/9994/5744.png b/tile_cache/esri_sat/15/9994/5744.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9994/5744.png differ
diff --git a/tile_cache/esri_sat/15/9994/5745.png b/tile_cache/esri_sat/15/9994/5745.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9994/5745.png differ
diff --git a/tile_cache/esri_sat/15/9994/5746.png b/tile_cache/esri_sat/15/9994/5746.png
new file mode 100644
index 0000000..2cb95b2
Binary files /dev/null and b/tile_cache/esri_sat/15/9994/5746.png differ
diff --git a/tile_cache/esri_sat/8/152/79.png b/tile_cache/esri_sat/8/152/79.png
new file mode 100644
index 0000000..c42d322
Binary files /dev/null and b/tile_cache/esri_sat/8/152/79.png differ
diff --git a/tile_cache/esri_sat/8/152/80.png b/tile_cache/esri_sat/8/152/80.png
new file mode 100644
index 0000000..a60bcf7
Binary files /dev/null and b/tile_cache/esri_sat/8/152/80.png differ
diff --git a/tile_cache/esri_sat/8/152/81.png b/tile_cache/esri_sat/8/152/81.png
new file mode 100644
index 0000000..057c4ff
Binary files /dev/null and b/tile_cache/esri_sat/8/152/81.png differ
diff --git a/tile_cache/esri_sat/8/152/82.png b/tile_cache/esri_sat/8/152/82.png
new file mode 100644
index 0000000..4c84ffd
Binary files /dev/null and b/tile_cache/esri_sat/8/152/82.png differ
diff --git a/tile_cache/esri_sat/8/153/78.png b/tile_cache/esri_sat/8/153/78.png
new file mode 100644
index 0000000..8156473
Binary files /dev/null and b/tile_cache/esri_sat/8/153/78.png differ
diff --git a/tile_cache/esri_sat/8/153/79.png b/tile_cache/esri_sat/8/153/79.png
new file mode 100644
index 0000000..f5ce264
Binary files /dev/null and b/tile_cache/esri_sat/8/153/79.png differ
diff --git a/tile_cache/esri_sat/8/153/80.png b/tile_cache/esri_sat/8/153/80.png
new file mode 100644
index 0000000..047e450
Binary files /dev/null and b/tile_cache/esri_sat/8/153/80.png differ
diff --git a/tile_cache/esri_sat/8/153/81.png b/tile_cache/esri_sat/8/153/81.png
new file mode 100644
index 0000000..c6df333
Binary files /dev/null and b/tile_cache/esri_sat/8/153/81.png differ
diff --git a/tile_cache/esri_sat/8/153/82.png b/tile_cache/esri_sat/8/153/82.png
new file mode 100644
index 0000000..2bf07c6
Binary files /dev/null and b/tile_cache/esri_sat/8/153/82.png differ
diff --git a/tile_cache/esri_sat/8/154/78.png b/tile_cache/esri_sat/8/154/78.png
new file mode 100644
index 0000000..3c445f3
Binary files /dev/null and b/tile_cache/esri_sat/8/154/78.png differ
diff --git a/tile_cache/esri_sat/8/154/79.png b/tile_cache/esri_sat/8/154/79.png
new file mode 100644
index 0000000..eb4b357
Binary files /dev/null and b/tile_cache/esri_sat/8/154/79.png differ
diff --git a/tile_cache/esri_sat/8/154/80.png b/tile_cache/esri_sat/8/154/80.png
new file mode 100644
index 0000000..4478864
Binary files /dev/null and b/tile_cache/esri_sat/8/154/80.png differ
diff --git a/tile_cache/esri_sat/8/154/81.png b/tile_cache/esri_sat/8/154/81.png
new file mode 100644
index 0000000..c6bc7e5
Binary files /dev/null and b/tile_cache/esri_sat/8/154/81.png differ
diff --git a/tile_cache/esri_sat/8/154/82.png b/tile_cache/esri_sat/8/154/82.png
new file mode 100644
index 0000000..0b87106
Binary files /dev/null and b/tile_cache/esri_sat/8/154/82.png differ
diff --git a/tile_cache/esri_sat/8/155/78.png b/tile_cache/esri_sat/8/155/78.png
new file mode 100644
index 0000000..6db9404
Binary files /dev/null and b/tile_cache/esri_sat/8/155/78.png differ
diff --git a/tile_cache/esri_sat/8/155/79.png b/tile_cache/esri_sat/8/155/79.png
new file mode 100644
index 0000000..ed0c2fb
Binary files /dev/null and b/tile_cache/esri_sat/8/155/79.png differ
diff --git a/tile_cache/esri_sat/8/155/80.png b/tile_cache/esri_sat/8/155/80.png
new file mode 100644
index 0000000..0eac3a3
Binary files /dev/null and b/tile_cache/esri_sat/8/155/80.png differ
diff --git a/tile_cache/esri_sat/8/155/81.png b/tile_cache/esri_sat/8/155/81.png
new file mode 100644
index 0000000..6d6aa88
Binary files /dev/null and b/tile_cache/esri_sat/8/155/81.png differ
diff --git a/tile_cache/esri_sat/8/155/88.png b/tile_cache/esri_sat/8/155/88.png
new file mode 100644
index 0000000..f9a086d
Binary files /dev/null and b/tile_cache/esri_sat/8/155/88.png differ
diff --git a/tile_cache/esri_sat/8/155/89.png b/tile_cache/esri_sat/8/155/89.png
new file mode 100644
index 0000000..4889f8a
Binary files /dev/null and b/tile_cache/esri_sat/8/155/89.png differ
diff --git a/tile_cache/esri_sat/8/155/90.png b/tile_cache/esri_sat/8/155/90.png
new file mode 100644
index 0000000..38b06b7
Binary files /dev/null and b/tile_cache/esri_sat/8/155/90.png differ
diff --git a/tile_cache/esri_sat/8/156/88.png b/tile_cache/esri_sat/8/156/88.png
new file mode 100644
index 0000000..8752d6c
Binary files /dev/null and b/tile_cache/esri_sat/8/156/88.png differ
diff --git a/tile_cache/esri_sat/8/156/89.png b/tile_cache/esri_sat/8/156/89.png
new file mode 100644
index 0000000..e76c1c9
Binary files /dev/null and b/tile_cache/esri_sat/8/156/89.png differ
diff --git a/tile_cache/esri_sat/8/156/90.png b/tile_cache/esri_sat/8/156/90.png
new file mode 100644
index 0000000..aa09553
Binary files /dev/null and b/tile_cache/esri_sat/8/156/90.png differ
diff --git a/tile_cache/esri_sat/8/157/88.png b/tile_cache/esri_sat/8/157/88.png
new file mode 100644
index 0000000..1bf3e17
Binary files /dev/null and b/tile_cache/esri_sat/8/157/88.png differ
diff --git a/tile_cache/esri_sat/8/157/89.png b/tile_cache/esri_sat/8/157/89.png
new file mode 100644
index 0000000..0f4ddb2
Binary files /dev/null and b/tile_cache/esri_sat/8/157/89.png differ
diff --git a/tile_cache/esri_sat/8/157/90.png b/tile_cache/esri_sat/8/157/90.png
new file mode 100644
index 0000000..31585b6
Binary files /dev/null and b/tile_cache/esri_sat/8/157/90.png differ
diff --git a/tile_cache/esri_sat/9/311/178.png b/tile_cache/esri_sat/9/311/178.png
new file mode 100644
index 0000000..be96b63
Binary files /dev/null and b/tile_cache/esri_sat/9/311/178.png differ
diff --git a/tile_cache/esri_sat/9/311/179.png b/tile_cache/esri_sat/9/311/179.png
new file mode 100644
index 0000000..43dcc71
Binary files /dev/null and b/tile_cache/esri_sat/9/311/179.png differ
diff --git a/tile_cache/esri_sat/9/311/180.png b/tile_cache/esri_sat/9/311/180.png
new file mode 100644
index 0000000..7fe9f27
Binary files /dev/null and b/tile_cache/esri_sat/9/311/180.png differ
diff --git a/tile_cache/esri_sat/9/312/178.png b/tile_cache/esri_sat/9/312/178.png
new file mode 100644
index 0000000..ac997dc
Binary files /dev/null and b/tile_cache/esri_sat/9/312/178.png differ
diff --git a/tile_cache/esri_sat/9/312/179.png b/tile_cache/esri_sat/9/312/179.png
new file mode 100644
index 0000000..59148c1
Binary files /dev/null and b/tile_cache/esri_sat/9/312/179.png differ
diff --git a/tile_cache/esri_sat/9/312/180.png b/tile_cache/esri_sat/9/312/180.png
new file mode 100644
index 0000000..7b0ed31
Binary files /dev/null and b/tile_cache/esri_sat/9/312/180.png differ
diff --git a/tile_cache/esri_sat/9/313/178.png b/tile_cache/esri_sat/9/313/178.png
new file mode 100644
index 0000000..4398a83
Binary files /dev/null and b/tile_cache/esri_sat/9/313/178.png differ
diff --git a/tile_cache/esri_sat/9/313/179.png b/tile_cache/esri_sat/9/313/179.png
new file mode 100644
index 0000000..0da4264
Binary files /dev/null and b/tile_cache/esri_sat/9/313/179.png differ
diff --git a/tile_cache/esri_sat/9/313/180.png b/tile_cache/esri_sat/9/313/180.png
new file mode 100644
index 0000000..b09e863
Binary files /dev/null and b/tile_cache/esri_sat/9/313/180.png differ
diff --git a/tile_cache/google_sat/9/311/178.png b/tile_cache/google_sat/9/311/178.png
new file mode 100644
index 0000000..54dd412
Binary files /dev/null and b/tile_cache/google_sat/9/311/178.png differ
diff --git a/tile_cache/google_sat/9/311/179.png b/tile_cache/google_sat/9/311/179.png
new file mode 100644
index 0000000..4c6c9f5
Binary files /dev/null and b/tile_cache/google_sat/9/311/179.png differ
diff --git a/tile_cache/google_sat/9/311/180.png b/tile_cache/google_sat/9/311/180.png
new file mode 100644
index 0000000..71d8fc6
Binary files /dev/null and b/tile_cache/google_sat/9/311/180.png differ
diff --git a/tile_cache/google_sat/9/312/178.png b/tile_cache/google_sat/9/312/178.png
new file mode 100644
index 0000000..e09aa3e
Binary files /dev/null and b/tile_cache/google_sat/9/312/178.png differ
diff --git a/tile_cache/google_sat/9/312/179.png b/tile_cache/google_sat/9/312/179.png
new file mode 100644
index 0000000..6df1581
Binary files /dev/null and b/tile_cache/google_sat/9/312/179.png differ
diff --git a/tile_cache/google_sat/9/312/180.png b/tile_cache/google_sat/9/312/180.png
new file mode 100644
index 0000000..af59923
Binary files /dev/null and b/tile_cache/google_sat/9/312/180.png differ
diff --git a/tile_cache/google_sat/9/313/178.png b/tile_cache/google_sat/9/313/178.png
new file mode 100644
index 0000000..c9cf36f
Binary files /dev/null and b/tile_cache/google_sat/9/313/178.png differ
diff --git a/tile_cache/google_sat/9/313/179.png b/tile_cache/google_sat/9/313/179.png
new file mode 100644
index 0000000..588faad
Binary files /dev/null and b/tile_cache/google_sat/9/313/179.png differ
diff --git a/tile_cache/google_sat/9/313/180.png b/tile_cache/google_sat/9/313/180.png
new file mode 100644
index 0000000..f5e24c9
Binary files /dev/null and b/tile_cache/google_sat/9/313/180.png differ
diff --git a/tile_cache/osm/8/153/79.png b/tile_cache/osm/8/153/79.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/153/79.png differ
diff --git a/tile_cache/osm/8/153/80.png b/tile_cache/osm/8/153/80.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/153/80.png differ
diff --git a/tile_cache/osm/8/153/81.png b/tile_cache/osm/8/153/81.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/153/81.png differ
diff --git a/tile_cache/osm/8/154/79.png b/tile_cache/osm/8/154/79.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/154/79.png differ
diff --git a/tile_cache/osm/8/154/80.png b/tile_cache/osm/8/154/80.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/154/80.png differ
diff --git a/tile_cache/osm/8/154/81.png b/tile_cache/osm/8/154/81.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/154/81.png differ
diff --git a/tile_cache/osm/8/155/79.png b/tile_cache/osm/8/155/79.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/155/79.png differ
diff --git a/tile_cache/osm/8/155/80.png b/tile_cache/osm/8/155/80.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/155/80.png differ
diff --git a/tile_cache/osm/8/155/81.png b/tile_cache/osm/8/155/81.png
new file mode 100644
index 0000000..91754d9
Binary files /dev/null and b/tile_cache/osm/8/155/81.png differ
diff --git a/tile_cache/osm/9/311/178.png b/tile_cache/osm/9/311/178.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/311/178.png differ
diff --git a/tile_cache/osm/9/311/179.png b/tile_cache/osm/9/311/179.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/311/179.png differ
diff --git a/tile_cache/osm/9/311/180.png b/tile_cache/osm/9/311/180.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/311/180.png differ
diff --git a/tile_cache/osm/9/312/178.png b/tile_cache/osm/9/312/178.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/312/178.png differ
diff --git a/tile_cache/osm/9/312/179.png b/tile_cache/osm/9/312/179.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/312/179.png differ
diff --git a/tile_cache/osm/9/312/180.png b/tile_cache/osm/9/312/180.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/312/180.png differ
diff --git a/tile_cache/osm/9/313/178.png b/tile_cache/osm/9/313/178.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/313/178.png differ
diff --git a/tile_cache/osm/9/313/179.png b/tile_cache/osm/9/313/179.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/313/179.png differ
diff --git a/tile_cache/osm/9/313/180.png b/tile_cache/osm/9/313/180.png
new file mode 100644
index 0000000..039d9bd
Binary files /dev/null and b/tile_cache/osm/9/313/180.png differ
diff --git a/tile_cache/precipitation/8/148/73.png b/tile_cache/precipitation/8/148/73.png
new file mode 100644
index 0000000..711b7fd
Binary files /dev/null and b/tile_cache/precipitation/8/148/73.png differ
diff --git a/tile_cache/precipitation/8/148/74.png b/tile_cache/precipitation/8/148/74.png
new file mode 100644
index 0000000..23cc57c
Binary files /dev/null and b/tile_cache/precipitation/8/148/74.png differ
diff --git a/tile_cache/precipitation/8/148/75.png b/tile_cache/precipitation/8/148/75.png
new file mode 100644
index 0000000..f615941
Binary files /dev/null and b/tile_cache/precipitation/8/148/75.png differ
diff --git a/tile_cache/precipitation/8/149/73.png b/tile_cache/precipitation/8/149/73.png
new file mode 100644
index 0000000..8d026a8
Binary files /dev/null and b/tile_cache/precipitation/8/149/73.png differ
diff --git a/tile_cache/precipitation/8/149/74.png b/tile_cache/precipitation/8/149/74.png
new file mode 100644
index 0000000..ac28437
Binary files /dev/null and b/tile_cache/precipitation/8/149/74.png differ
diff --git a/tile_cache/precipitation/8/149/75.png b/tile_cache/precipitation/8/149/75.png
new file mode 100644
index 0000000..e69d17f
Binary files /dev/null and b/tile_cache/precipitation/8/149/75.png differ
diff --git a/tile_cache/precipitation/8/150/73.png b/tile_cache/precipitation/8/150/73.png
new file mode 100644
index 0000000..2924386
Binary files /dev/null and b/tile_cache/precipitation/8/150/73.png differ
diff --git a/tile_cache/precipitation/8/150/74.png b/tile_cache/precipitation/8/150/74.png
new file mode 100644
index 0000000..5b03ce0
Binary files /dev/null and b/tile_cache/precipitation/8/150/74.png differ
diff --git a/tile_cache/precipitation/8/150/75.png b/tile_cache/precipitation/8/150/75.png
new file mode 100644
index 0000000..e066882
Binary files /dev/null and b/tile_cache/precipitation/8/150/75.png differ
diff --git a/tile_cache/precipitation/8/153/79.png b/tile_cache/precipitation/8/153/79.png
new file mode 100644
index 0000000..559670f
Binary files /dev/null and b/tile_cache/precipitation/8/153/79.png differ
diff --git a/tile_cache/precipitation/8/153/80.png b/tile_cache/precipitation/8/153/80.png
new file mode 100644
index 0000000..3cc512e
Binary files /dev/null and b/tile_cache/precipitation/8/153/80.png differ
diff --git a/tile_cache/precipitation/8/153/81.png b/tile_cache/precipitation/8/153/81.png
new file mode 100644
index 0000000..7609557
Binary files /dev/null and b/tile_cache/precipitation/8/153/81.png differ
diff --git a/tile_cache/precipitation/8/154/79.png b/tile_cache/precipitation/8/154/79.png
new file mode 100644
index 0000000..d7962c6
Binary files /dev/null and b/tile_cache/precipitation/8/154/79.png differ
diff --git a/tile_cache/precipitation/8/154/80.png b/tile_cache/precipitation/8/154/80.png
new file mode 100644
index 0000000..709d3bc
Binary files /dev/null and b/tile_cache/precipitation/8/154/80.png differ
diff --git a/tile_cache/precipitation/8/154/81.png b/tile_cache/precipitation/8/154/81.png
new file mode 100644
index 0000000..c8931de
Binary files /dev/null and b/tile_cache/precipitation/8/154/81.png differ
diff --git a/tile_cache/precipitation/8/155/79.png b/tile_cache/precipitation/8/155/79.png
new file mode 100644
index 0000000..d5d990b
Binary files /dev/null and b/tile_cache/precipitation/8/155/79.png differ
diff --git a/tile_cache/precipitation/8/155/80.png b/tile_cache/precipitation/8/155/80.png
new file mode 100644
index 0000000..54e8972
Binary files /dev/null and b/tile_cache/precipitation/8/155/80.png differ
diff --git a/tile_cache/precipitation/8/155/81.png b/tile_cache/precipitation/8/155/81.png
new file mode 100644
index 0000000..d5316e9
Binary files /dev/null and b/tile_cache/precipitation/8/155/81.png differ
diff --git a/tile_cache/precipitation/8/155/88.png b/tile_cache/precipitation/8/155/88.png
new file mode 100644
index 0000000..a618ca0
Binary files /dev/null and b/tile_cache/precipitation/8/155/88.png differ
diff --git a/tile_cache/precipitation/8/155/89.png b/tile_cache/precipitation/8/155/89.png
new file mode 100644
index 0000000..a4997cd
Binary files /dev/null and b/tile_cache/precipitation/8/155/89.png differ
diff --git a/tile_cache/precipitation/8/155/90.png b/tile_cache/precipitation/8/155/90.png
new file mode 100644
index 0000000..6645e00
Binary files /dev/null and b/tile_cache/precipitation/8/155/90.png differ
diff --git a/tile_cache/precipitation/8/156/88.png b/tile_cache/precipitation/8/156/88.png
new file mode 100644
index 0000000..c61ab46
Binary files /dev/null and b/tile_cache/precipitation/8/156/88.png differ
diff --git a/tile_cache/precipitation/8/156/89.png b/tile_cache/precipitation/8/156/89.png
new file mode 100644
index 0000000..496ab1b
Binary files /dev/null and b/tile_cache/precipitation/8/156/89.png differ
diff --git a/tile_cache/precipitation/8/156/90.png b/tile_cache/precipitation/8/156/90.png
new file mode 100644
index 0000000..0415148
Binary files /dev/null and b/tile_cache/precipitation/8/156/90.png differ
diff --git a/tile_cache/precipitation/8/157/88.png b/tile_cache/precipitation/8/157/88.png
new file mode 100644
index 0000000..616c912
Binary files /dev/null and b/tile_cache/precipitation/8/157/88.png differ
diff --git a/tile_cache/precipitation/8/157/89.png b/tile_cache/precipitation/8/157/89.png
new file mode 100644
index 0000000..a8eb5c6
Binary files /dev/null and b/tile_cache/precipitation/8/157/89.png differ
diff --git a/tile_cache/precipitation/8/157/90.png b/tile_cache/precipitation/8/157/90.png
new file mode 100644
index 0000000..03b9e73
Binary files /dev/null and b/tile_cache/precipitation/8/157/90.png differ
diff --git a/tile_cache/temp/8/155/88.png b/tile_cache/temp/8/155/88.png
new file mode 100644
index 0000000..68654ee
Binary files /dev/null and b/tile_cache/temp/8/155/88.png differ
diff --git a/tile_cache/temp/8/155/89.png b/tile_cache/temp/8/155/89.png
new file mode 100644
index 0000000..97babb7
Binary files /dev/null and b/tile_cache/temp/8/155/89.png differ
diff --git a/tile_cache/temp/8/155/90.png b/tile_cache/temp/8/155/90.png
new file mode 100644
index 0000000..6f2a4b0
Binary files /dev/null and b/tile_cache/temp/8/155/90.png differ
diff --git a/tile_cache/temp/8/156/88.png b/tile_cache/temp/8/156/88.png
new file mode 100644
index 0000000..62ce63d
Binary files /dev/null and b/tile_cache/temp/8/156/88.png differ
diff --git a/tile_cache/temp/8/156/89.png b/tile_cache/temp/8/156/89.png
new file mode 100644
index 0000000..d1a9879
Binary files /dev/null and b/tile_cache/temp/8/156/89.png differ
diff --git a/tile_cache/temp/9/311/178.png b/tile_cache/temp/9/311/178.png
new file mode 100644
index 0000000..1342763
Binary files /dev/null and b/tile_cache/temp/9/311/178.png differ
diff --git a/tile_cache/temp/9/311/179.png b/tile_cache/temp/9/311/179.png
new file mode 100644
index 0000000..107446c
Binary files /dev/null and b/tile_cache/temp/9/311/179.png differ
diff --git a/tile_cache/temp/9/311/180.png b/tile_cache/temp/9/311/180.png
new file mode 100644
index 0000000..1bf3c53
Binary files /dev/null and b/tile_cache/temp/9/311/180.png differ
diff --git a/tile_cache/temp/9/312/178.png b/tile_cache/temp/9/312/178.png
new file mode 100644
index 0000000..5aa0a23
Binary files /dev/null and b/tile_cache/temp/9/312/178.png differ
diff --git a/tile_cache/temp/9/312/179.png b/tile_cache/temp/9/312/179.png
new file mode 100644
index 0000000..f6c6bf3
Binary files /dev/null and b/tile_cache/temp/9/312/179.png differ
diff --git a/tile_cache/temp/9/312/180.png b/tile_cache/temp/9/312/180.png
new file mode 100644
index 0000000..9515c81
Binary files /dev/null and b/tile_cache/temp/9/312/180.png differ
diff --git a/tile_cache/temp/9/313/178.png b/tile_cache/temp/9/313/178.png
new file mode 100644
index 0000000..0c615db
Binary files /dev/null and b/tile_cache/temp/9/313/178.png differ
diff --git a/tile_cache/temp/9/313/179.png b/tile_cache/temp/9/313/179.png
new file mode 100644
index 0000000..fcb8c84
Binary files /dev/null and b/tile_cache/temp/9/313/179.png differ
diff --git a/tile_cache/temp/9/313/180.png b/tile_cache/temp/9/313/180.png
new file mode 100644
index 0000000..47caf7e
Binary files /dev/null and b/tile_cache/temp/9/313/180.png differ
diff --git a/ui/__init__.py b/ui/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ui/dialogs/__init__.py b/ui/dialogs/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ui/main_window.py b/ui/main_window.py
new file mode 100644
index 0000000..e69de29