adapt mecator
update interface adapt time base before converting to grib refactor some stuff remove debug comments
This commit is contained in:
56
iface.py
56
iface.py
@@ -84,32 +84,36 @@ class MapSelector:
|
||||
self.start_x = self.start_y = None
|
||||
self.rect = None
|
||||
|
||||
coord_frame = ttk.Frame(self.frame_download)
|
||||
coord_frame.pack(pady=5)
|
||||
params_frame = ttk.Frame(self.frame_download) #, borderwidth=1, relief="solid")
|
||||
|
||||
params_frame.pack(pady=5)
|
||||
#params_frame.pack(pady=5)
|
||||
|
||||
self.lat1_var = tk.StringVar()
|
||||
self.lon1_var = tk.StringVar()
|
||||
self.lat2_var = tk.StringVar()
|
||||
self.lon2_var = tk.StringVar()
|
||||
|
||||
ttk.Label(coord_frame, text="Lat Min:").grid(row=0, column=0)
|
||||
ttk.Entry(coord_frame, textvariable=self.lat1_var, width=10).grid(row=0, column=1)
|
||||
ttk.Label(coord_frame, text="Lon Min:").grid(row=0, column=2)
|
||||
ttk.Entry(coord_frame, textvariable=self.lon1_var, width=10).grid(row=0, column=3)
|
||||
ttk.Label(params_frame, text="Lat Min:").grid(row=0, column=0)
|
||||
ttk.Entry(params_frame, textvariable=self.lat1_var, width=10).grid(row=0, column=1)
|
||||
params_frame.grid_columnconfigure(2, minsize=20)
|
||||
ttk.Label(params_frame, text="Lon Min:").grid(row=0, column=3)
|
||||
ttk.Entry(params_frame, textvariable=self.lon1_var, width=10).grid(row=0, column=4)
|
||||
params_frame.grid_columnconfigure(5, minsize=20)
|
||||
|
||||
ttk.Label(coord_frame, text="Lat Max:").grid(row=1, column=0)
|
||||
ttk.Entry(coord_frame, textvariable=self.lat2_var, width=10).grid(row=1, column=1)
|
||||
ttk.Label(coord_frame, text="Lon Max:").grid(row=1, column=2)
|
||||
ttk.Entry(coord_frame, textvariable=self.lon2_var, width=10).grid(row=1, column=3)
|
||||
ttk.Label(params_frame, text="Lat Max:").grid(row=1, column=0)
|
||||
ttk.Entry(params_frame, textvariable=self.lat2_var, width=10).grid(row=1, column=1)
|
||||
ttk.Label(params_frame, text="Lon Max:").grid(row=1, column=3)
|
||||
ttk.Entry(params_frame, textvariable=self.lon2_var, width=10).grid(row=1, column=4)
|
||||
|
||||
self.duration_var = tk.StringVar(value="1")
|
||||
ttk.Label(self.frame_download, text="Durée (jours):").pack()
|
||||
ttk.Combobox(self.frame_download, textvariable=self.duration_var, values=["1", "2", "3", "4", "5"], width=5).pack(pady=5)
|
||||
self.duration_var = tk.StringVar(value="3")
|
||||
ttk.Label(params_frame, text="Days").grid(row=0, column=6)
|
||||
ttk.Combobox(params_frame, textvariable=self.duration_var, values=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], width=5).grid(row=1, column=6)
|
||||
|
||||
btn_frame = ttk.Frame(self.frame_download)
|
||||
btn_frame.pack(pady=5)
|
||||
ttk.Button(btn_frame, text="Télécharger", command=self.start_download).grid(row=0, column=1, padx=5)
|
||||
ttk.Button(btn_frame, text="Ouvrir le dossier", command=self.open_download_folder).grid(row=0, column=2, padx=5)
|
||||
ttk.Button(btn_frame, text="Download", command=self.start_download).grid(row=0, column=1, padx=5)
|
||||
ttk.Button(btn_frame, text="Open Folder", command=self.open_download_folder).grid(row=0, column=2, padx=5)
|
||||
|
||||
self.status = ttk.Label(self.frame_download, text="")
|
||||
self.status.pack()
|
||||
@@ -146,7 +150,7 @@ class MapSelector:
|
||||
self.redraw_rectangle_from_coords()
|
||||
|
||||
def setzoom(self, event):
|
||||
# Déterminer la direction du zoom
|
||||
# Define the zoom direction
|
||||
if event.num == 5 or event.delta == -120:
|
||||
zoom_factor = 0.9
|
||||
elif event.num == 4 or event.delta == 120:
|
||||
@@ -228,8 +232,7 @@ class MapSelector:
|
||||
|
||||
canvas_w = self.canvas.winfo_width()
|
||||
canvas_h = self.canvas.winfo_height()
|
||||
|
||||
print(f"canvas = {canvas_w} {canvas_h} scale = {self.scale} offset = {self.offset_x} {self.offset_y}")
|
||||
# print(f"canvas = {canvas_w} {canvas_h} scale = {self.scale} offset = {self.offset_x} {self.offset_y}")
|
||||
|
||||
# Longitude (linéaire)
|
||||
x_norm = (lon - lon_min) / (lon_max - lon_min)
|
||||
@@ -243,7 +246,6 @@ class MapSelector:
|
||||
y_norm = (mercator_max - mercator_lat) / (mercator_max - mercator_min)
|
||||
y = y_norm * self.scale * self.original_img.height + self.offset_y
|
||||
|
||||
print(f"xy_from_latlon : {x} - {y}")
|
||||
return x, y
|
||||
|
||||
def latlon_from_xy(self, x, y):
|
||||
@@ -252,8 +254,7 @@ class MapSelector:
|
||||
lat_max = self.config.getfloat('map', 'map_lat_end')
|
||||
lon_min = self.config.getfloat('map', 'map_lon_start')
|
||||
lon_max = self.config.getfloat('map', 'map_lon_end')
|
||||
|
||||
print(f"latlon_from_xy dbg coord = {lat_min}-{lat_max}-{lon_min}-{lon_max}")
|
||||
# print(f"latlon_from_xy dbg coord = {lat_min}-{lat_max}-{lon_min}-{lon_max}")
|
||||
|
||||
# Calculer la position relative dans l’image (sans offset/zoom)
|
||||
img_x = (x - self.offset_x) / self.scale
|
||||
@@ -271,14 +272,11 @@ class MapSelector:
|
||||
merc_max = log(tan(pi / 4 + radians(lat_max) / 2)) # Mercator
|
||||
merc_y = merc_max - rel_y * (merc_max - merc_min)
|
||||
lat = degrees(atan(sinh(merc_y))) # Mercator Inverse
|
||||
|
||||
print(f"latlon_from_xy : {lat} - {lon}")
|
||||
return lat, lon
|
||||
else:
|
||||
return None, None # En dehors de l'image
|
||||
|
||||
def on_click(self, event):
|
||||
print(f"dbg on_click : {event.x} - {event.y}")
|
||||
self.start_x, self.start_y = event.x, event.y
|
||||
if self.rect:
|
||||
self.canvas.delete(self.rect)
|
||||
@@ -289,10 +287,8 @@ class MapSelector:
|
||||
self.canvas.coords(self.rect, self.start_x, self.start_y, event.x, event.y)
|
||||
|
||||
def on_release(self, event):
|
||||
print(f"dbg 1 {self.start_x} - {self.start_y} -- {event.x} - {event.y}\n")
|
||||
lat1, lon1 = self.latlon_from_xy(self.start_x, self.start_y)
|
||||
lat2, lon2 = self.latlon_from_xy(event.x, event.y)
|
||||
print("dbg 2\n")
|
||||
self.lat1_var.set(f"{min(lat1, lat2):.4f}")
|
||||
self.lat2_var.set(f"{max(lat1, lat2):.4f}")
|
||||
self.lon1_var.set(f"{min(lon1, lon2):.4f}")
|
||||
@@ -315,16 +311,16 @@ class MapSelector:
|
||||
except ValueError:
|
||||
messagebox.showerror("Erreur", "Veuillez entrer des coordonnées et durée valides.")
|
||||
return
|
||||
|
||||
self.progress.start(10)
|
||||
self.status.config(text="Téléchargement en cours...")
|
||||
threading.Thread(target=self.download, args=(lat_min, lat_max, lon_min, lon_max, days), daemon=True).start()
|
||||
|
||||
def download(self, lat_min, lat_max, lon_min, lon_max, days):
|
||||
try:
|
||||
self.downloader.download(lat_min, lat_max, lon_min, lon_max, days)
|
||||
self.status.config(text="Conversion en GRIB2 en cours...")
|
||||
grib_path = self.downloader.convert_to_grib2()
|
||||
|
||||
grib_path = self.downloader.retrieve_grib2(lat_min, lat_max, lon_min, lon_max, days)
|
||||
#self.status.config(text="Conversion en GRIB2 en cours...")
|
||||
#grib_path = self.downloader.convert_to_grib2()
|
||||
self.status.config(text=f"Téléchargement et conversion terminés : {os.path.basename(grib_path)}")
|
||||
except Exception as e:
|
||||
self.status.config(text=f"Erreur : {e}")
|
||||
|
||||
Reference in New Issue
Block a user