Files
Synthese-PSM_LARRA/Scripts/pyCreate_th2/helpers/satmap.py
T
Alex38Lyon c2e1457cd5 Scripts
2025-01-31 14:15:58 +01:00

64 lines
2.2 KiB
Python

from dataclasses import dataclass, field
import matplotlib.pyplot as plt
from salem import GoogleVisibleMap, Map, transform_geopandas
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point, MultiPoint
from helpers.geo import coordinatePairUTM
from helpers.cadaster import CaveCadaster,Cave, Expedition
@dataclass
class SatelliteMapPlot:
# Configure image aspect
size_x : int
size_y : int
dpi : int
scale : float = 0.013988764
points : list[coordinatePairUTM] = field(init = False)
point_names : list[str] = field(init=False)
new_x : float = field(init = False)
new_y : float = field(init=False)
def add_points(self, cadaster : CaveCadaster) -> None:
self.points = [cave.coordinates for cave in cadaster.caves]
self.point_names = [cave.name for cave in cadaster.caves]
def add_point_to_plot(self, x: float, y: float) -> None:
self.new_x = x
self.new_y = y
def plot_map(self):
# Get the Google Static image
g = GoogleVisibleMap(y=[self.new_y-0.64*self.scale, self.new_y+0.64*self.scale], x=[self.new_x-1.5*self.scale, self.new_x+1.5*self.scale],
scale=2, # scale is for more details
maptype='satellite',
size_x=self.size_x, size_y=self.size_y
)
# the google static image is a standard rgb image
ggl_img = g.get_vardata()
sm = Map(g.grid, nx=self.size_x, factor=1)
sm.set_rgb(ggl_img) # add the background rgb image
# prepare the figure
fig, ax = plt.subplots(figsize=(self.size_x/self.dpi,self.size_y/self.dpi), dpi=self.dpi)
# plot 1
x, y = sm.grid.transform([self.new_x],[self.new_y])
xi, yi = sm.grid.transform([p._orig_long for p in self.points],[p._orig_lat for p in self.points])
ax.scatter(x, y, zorder= 100, s=5,color="blue", marker = "d") # type:ignore
ax.scatter(xi, yi, zorder= 100, s=3,color="red", marker = "d") # type:ignore
for name,x,y in zip(self.point_names,xi,yi):
ax.text(x+.0001,y+.0001,name,fontsize=5,color = "red")
sm.plot(ax=ax)
fig.patch.set_facecolor('black') # type:ignore
return fig,ax