Vertdure commited on
Commit
57fb324
1 Parent(s): 195f57b

Update pages/12_🌲_VertXtractor.py

Browse files
Files changed (1) hide show
  1. pages/12_🌲_VertXtractor.py +62 -23
pages/12_🌲_VertXtractor.py CHANGED
@@ -12,7 +12,68 @@ from rasterio.io import MemoryFile
12
  import numpy as np
13
  import os
14
 
15
- # ... (le reste des imports et la définition de LAYERS restent inchangés)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  def process_and_save_data(data, layer_name, layer_type):
18
  """Traite et sauvegarde les données extraites."""
@@ -44,28 +105,6 @@ def process_and_save_data(data, layer_name, layer_type):
44
  except Exception as e:
45
  st.error(f"Erreur de traitement pour {layer_name}: {str(e)}")
46
 
47
- @st.cache_data
48
- def extract_esri_data(bbox, layer_id, layer_type):
49
- """Extrait les données d'ESRI."""
50
- service_url = "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/export" if layer_type == "image" else "https://elevation.arcgis.com/arcgis/rest/services/WorldElevation/Terrain/ImageServer/exportImage"
51
- params = {
52
- "bbox": f"{bbox[0]},{bbox[1]},{bbox[2]},{bbox[3]}",
53
- "bboxSR": 4326,
54
- "size": "1000,1000",
55
- "format": "tiff",
56
- "f": "image",
57
- "imageSR": 4326 # Ajout de cette ligne pour spécifier le système de coordonnées de l'image
58
- }
59
- try:
60
- response = requests.get(service_url, params=params)
61
- response.raise_for_status()
62
- return response.content
63
- except requests.RequestException as e:
64
- st.error(f"Erreur ESRI: {str(e)}")
65
- return None
66
-
67
- # ... (le reste du code reste inchangé jusqu'à la fonction main())
68
-
69
  def main():
70
  st.title("Extracteur de données Swisstopo et ESRI")
71
 
 
12
  import numpy as np
13
  import os
14
 
15
+ # Configuration de la page
16
+ st.set_page_config(layout="wide", page_title="Extracteur de données géospatiales")
17
+
18
+ # Définition des couches disponibles
19
+ LAYERS = {
20
+ "Swisstopo - SWISSIMAGE 10 cm": {"id": "ch.swisstopo.swissimage-dop10", "source": "swisstopo", "type": "image"},
21
+ "Swisstopo - Carte nationale 1:25'000": {"id": "ch.swisstopo.pixelkarte-farbe-pk25.noscale", "source": "swisstopo", "type": "image"},
22
+ "Swisstopo - MNT": {"id": "ch.swisstopo.swissalti3d", "source": "swisstopo", "type": "raster"},
23
+ "ESRI - World Imagery": {"id": "WorldImagery", "source": "esri", "type": "image"},
24
+ "ESRI - World Elevation": {"id": "WorldElevation", "source": "esri", "type": "raster"}
25
+ }
26
+
27
+ def draw_box_on_map():
28
+ """Crée une carte interactive pour dessiner une zone d'intérêt."""
29
+ m = folium.Map(location=[46.8, 8.2], zoom_start=8)
30
+ Draw(draw_options={'polyline': False, 'polygon': False, 'circle': False, 'marker': False, 'circlemarker': False},
31
+ edit_options={'edit': False}).add_to(m)
32
+ return st_folium(m, width=700, height=500)
33
+
34
+ def create_geojson_from_box(bbox):
35
+ """Crée un GeoJSON à partir d'une boîte englobante."""
36
+ gdf = gpd.GeoDataFrame({'geometry': [bbox]}, crs="EPSG:4326")
37
+ return json.loads(gdf.to_json()), json.loads(gdf.to_crs("EPSG:2056").to_json())
38
+
39
+ @st.cache_data
40
+ def extract_swisstopo_data(bbox, layer_id, layer_type):
41
+ """Extrait les données de Swisstopo."""
42
+ api_url = f"https://data.geo.admin.ch/api/stac/v0.9/collections/{layer_id}/items"
43
+ params = {"bbox": ",".join(map(str, bbox)), "limit": 1}
44
+ try:
45
+ response = requests.get(api_url, params=params)
46
+ response.raise_for_status()
47
+ data = response.json()
48
+ if data['features']:
49
+ feature = data['features'][0]
50
+ asset_keys = feature['assets'].keys()
51
+ data_key = 'rgb' if 'rgb' in asset_keys else 'data' if 'data' in asset_keys else next(iter(asset_keys))
52
+ data_url = feature['assets'][data_key]['href']
53
+ return requests.get(data_url).content
54
+ except requests.RequestException as e:
55
+ st.error(f"Erreur Swisstopo: {str(e)}")
56
+ return None
57
+
58
+ @st.cache_data
59
+ def extract_esri_data(bbox, layer_id, layer_type):
60
+ """Extrait les données d'ESRI."""
61
+ service_url = "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/export" if layer_type == "image" else "https://elevation.arcgis.com/arcgis/rest/services/WorldElevation/Terrain/ImageServer/exportImage"
62
+ params = {
63
+ "bbox": f"{bbox[0]},{bbox[1]},{bbox[2]},{bbox[3]}",
64
+ "bboxSR": 4326,
65
+ "size": "1000,1000",
66
+ "format": "tiff",
67
+ "f": "image",
68
+ "imageSR": 4326
69
+ }
70
+ try:
71
+ response = requests.get(service_url, params=params)
72
+ response.raise_for_status()
73
+ return response.content
74
+ except requests.RequestException as e:
75
+ st.error(f"Erreur ESRI: {str(e)}")
76
+ return None
77
 
78
  def process_and_save_data(data, layer_name, layer_type):
79
  """Traite et sauvegarde les données extraites."""
 
105
  except Exception as e:
106
  st.error(f"Erreur de traitement pour {layer_name}: {str(e)}")
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  def main():
109
  st.title("Extracteur de données Swisstopo et ESRI")
110