Update pages/12_🌲_VertXtractor.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
-
|
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 |
-
|
|
|
|
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 =
|
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}")
|