Vertdure commited on
Commit
d5eb90f
•
1 Parent(s): 9293b5d

Update pages/12_🌲_VertXtractor.py

Browse files
Files changed (1) hide show
  1. pages/12_🌲_VertXtractor.py +27 -6
pages/12_🌲_VertXtractor.py CHANGED
@@ -19,10 +19,19 @@ def get_swisstopo_collections():
19
  st.error("Impossible de récupérer les collections Swisstopo")
20
  return {}
21
 
22
- SWISSTOPO_LAYERS = get_swisstopo_collections()
 
 
 
 
 
 
 
 
 
 
23
 
24
- LAYERS = {
25
- **SWISSTOPO_LAYERS,
26
  "World Imagery": {"id": "World_Imagery", "source": "esri", "type": "image"},
27
  "World Elevation": {"id": "Elevation/World_Elevation", "source": "esri", "type": "raster"},
28
  "World Topographic": {"id": "World_Topo_Map", "source": "esri", "type": "image"},
@@ -50,7 +59,10 @@ def get_download_url(bbox, layer_info):
50
  if data['features']:
51
  feature = data['features'][0]
52
  asset_keys = feature['assets'].keys()
53
- data_key = 'data' if 'data' in asset_keys else next(iter(asset_keys))
 
 
 
54
  return feature['assets'][data_key]['href']
55
  else: # ESRI
56
  service_url = f"https://services.arcgisonline.com/arcgis/rest/services/{layer_info['id']}/MapServer/export"
@@ -74,7 +86,16 @@ def main():
74
 
75
  with col1:
76
  st.subheader("1. Sélectionner les couches")
77
- selected_layers = st.multiselect("Couches à extraire", list(LAYERS.keys()))
 
 
 
 
 
 
 
 
 
78
 
79
  st.subheader("2. Définir la zone d'intérêt")
80
  method = st.radio("Méthode", ["Dessiner", "GeoJSON"], horizontal=True)
@@ -95,7 +116,7 @@ def main():
95
  st.error("Sélectionnez au moins une couche à extraire.")
96
  else:
97
  for layer_name in selected_layers:
98
- layer_info = LAYERS[layer_name]
99
  bbox = gpd.GeoDataFrame.from_features(st.session_state['geojson_swiss' if layer_info["source"] == "swisstopo" else 'geojson_wgs84']).total_bounds
100
  st.write(f"Traitement de la couche : {layer_name}")
101
  st.write(f"Bbox : {bbox}")
 
19
  st.error("Impossible de récupérer les collections Swisstopo")
20
  return {}
21
 
22
+ SWISSTOPO_ALL = get_swisstopo_collections()
23
+
24
+ SWISSTOPO_SELECTED = {
25
+ "SWISSIMAGE 10 cm": {"id": "ch.swisstopo.swissimage-dop10", "source": "swisstopo", "type": "image"},
26
+ "Carte nationale 1:25'000": {"id": "ch.swisstopo.pixelkarte-farbe-pk25.noscale", "source": "swisstopo", "type": "image"},
27
+ "MNT": {"id": "ch.swisstopo.swissalti3d", "source": "swisstopo", "type": "raster"},
28
+ "Carte géologique": {"id": "ch.swisstopo.geologie-geologische_karte", "source": "swisstopo", "type": "image"},
29
+ "Limites administratives": {"id": "ch.swisstopo.swissboundaries3d-gemeinde-flaeche.fill", "source": "swisstopo", "type": "vector"},
30
+ "Réseau hydrographique": {"id": "ch.bafu.vec25-gewaessernetz", "source": "swisstopo", "type": "vector"},
31
+ "swissBUILDINGS3D 3.0 Beta": {"id": "ch.swisstopo.swissbuildings3d_3_0", "source": "swisstopo", "type": "3d"},
32
+ }
33
 
34
+ ESRI_LAYERS = {
 
35
  "World Imagery": {"id": "World_Imagery", "source": "esri", "type": "image"},
36
  "World Elevation": {"id": "Elevation/World_Elevation", "source": "esri", "type": "raster"},
37
  "World Topographic": {"id": "World_Topo_Map", "source": "esri", "type": "image"},
 
59
  if data['features']:
60
  feature = data['features'][0]
61
  asset_keys = feature['assets'].keys()
62
+ if layer_info['id'] == 'ch.swisstopo.swissimage-dop10':
63
+ data_key = 'rgb' if 'rgb' in asset_keys else 'data'
64
+ else:
65
+ data_key = 'data' if 'data' in asset_keys else next(iter(asset_keys))
66
  return feature['assets'][data_key]['href']
67
  else: # ESRI
68
  service_url = f"https://services.arcgisonline.com/arcgis/rest/services/{layer_info['id']}/MapServer/export"
 
86
 
87
  with col1:
88
  st.subheader("1. Sélectionner les couches")
89
+ source = st.radio("Source des données", ["Swisstopo (Sélection)", "Swisstopo (Toutes)", "ESRI"])
90
+
91
+ if source == "Swisstopo (Sélection)":
92
+ layers = SWISSTOPO_SELECTED
93
+ elif source == "Swisstopo (Toutes)":
94
+ layers = SWISSTOPO_ALL
95
+ else:
96
+ layers = ESRI_LAYERS
97
+
98
+ selected_layers = st.multiselect("Couches à extraire", list(layers.keys()))
99
 
100
  st.subheader("2. Définir la zone d'intérêt")
101
  method = st.radio("Méthode", ["Dessiner", "GeoJSON"], horizontal=True)
 
116
  st.error("Sélectionnez au moins une couche à extraire.")
117
  else:
118
  for layer_name in selected_layers:
119
+ layer_info = layers[layer_name]
120
  bbox = gpd.GeoDataFrame.from_features(st.session_state['geojson_swiss' if layer_info["source"] == "swisstopo" else 'geojson_wgs84']).total_bounds
121
  st.write(f"Traitement de la couche : {layer_name}")
122
  st.write(f"Bbox : {bbox}")