Vertdure commited on
Commit
7f066e2
1 Parent(s): d0334cd

Update pages/12_🌲_VertXtractor.py

Browse files
Files changed (1) hide show
  1. pages/12_🌲_VertXtractor.py +38 -11
pages/12_🌲_VertXtractor.py CHANGED
@@ -6,12 +6,22 @@ import requests
6
  from io import BytesIO
7
  from PIL import Image
8
  import tempfile
9
- import os
10
 
11
  st.set_page_config(layout="wide", page_title="GeoJSON Orthophoto Downloader")
12
 
13
  st.title("GeoJSON Orthophoto Downloader")
14
 
 
 
 
 
 
 
 
 
 
 
 
15
  # File uploader for GeoJSON
16
  uploaded_file = st.file_uploader("Choose a GeoJSON file", type="geojson")
17
 
@@ -37,6 +47,9 @@ if uploaded_file is not None:
37
  # Choose the map provider
38
  provider = st.selectbox("Choose map provider", ["ESRI World Imagery", "Swisstopo"])
39
 
 
 
 
40
  if st.button("Download Orthophoto"):
41
  if provider == "ESRI World Imagery":
42
  # ESRI World Imagery WMS URL
@@ -55,17 +68,31 @@ if uploaded_file is not None:
55
  # Make the request
56
  response = requests.get(wms_url, params=params)
57
 
58
- if response.status_code == 200:
59
- # Save the image
60
- image = Image.open(BytesIO(response.content))
61
- with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp_file:
62
- image.save(tmp_file.name)
63
- st.success(f"Image saved as {tmp_file.name}")
64
- else:
65
- st.error("Failed to download the image")
66
-
67
  elif provider == "Swisstopo":
68
- st.warning("Swisstopo implementation is not available in this demo. You would need to use Swisstopo's specific API or services.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  st.write("Note: This is a demo application. For production use, please ensure you comply with the usage terms of the chosen map provider.")
71
 
 
6
  from io import BytesIO
7
  from PIL import Image
8
  import tempfile
 
9
 
10
  st.set_page_config(layout="wide", page_title="GeoJSON Orthophoto Downloader")
11
 
12
  st.title("GeoJSON Orthophoto Downloader")
13
 
14
+ @st.cache_data
15
+ def get_swisstopo_layers():
16
+ url = "https://api3.geo.admin.ch/rest/services/api/MapServer"
17
+ response = requests.get(url)
18
+ if response.status_code == 200:
19
+ layers = response.json()
20
+ return {layer['layerBodId']: layer['layerName'] for layer in layers['layers']}
21
+ return {}
22
+
23
+ swisstopo_layers = get_swisstopo_layers()
24
+
25
  # File uploader for GeoJSON
26
  uploaded_file = st.file_uploader("Choose a GeoJSON file", type="geojson")
27
 
 
47
  # Choose the map provider
48
  provider = st.selectbox("Choose map provider", ["ESRI World Imagery", "Swisstopo"])
49
 
50
+ if provider == "Swisstopo":
51
+ selected_layer = st.selectbox("Choose Swisstopo layer", list(swisstopo_layers.keys()), format_func=lambda x: swisstopo_layers[x])
52
+
53
  if st.button("Download Orthophoto"):
54
  if provider == "ESRI World Imagery":
55
  # ESRI World Imagery WMS URL
 
68
  # Make the request
69
  response = requests.get(wms_url, params=params)
70
 
 
 
 
 
 
 
 
 
 
71
  elif provider == "Swisstopo":
72
+ # Swisstopo MapServer URL
73
+ mapserver_url = f"https://api3.geo.admin.ch/rest/services/api/MapServer/{selected_layer}/image"
74
+
75
+ # Parameters for the MapServer request
76
+ params = {
77
+ 'bbox': f"{minx},{miny},{maxx},{maxy}",
78
+ 'imageSize': '1000,1000',
79
+ 'format': 'png'
80
+ }
81
+
82
+ # Make the request
83
+ response = requests.get(mapserver_url, params=params)
84
+
85
+ if response.status_code == 200:
86
+ # Save the image
87
+ image = Image.open(BytesIO(response.content))
88
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp_file:
89
+ image.save(tmp_file.name)
90
+ st.success(f"Image saved as {tmp_file.name}")
91
+
92
+ # Display the downloaded image
93
+ st.image(image, caption=f"Downloaded {provider} Orthophoto", use_column_width=True)
94
+ else:
95
+ st.error(f"Failed to download the image. Status code: {response.status_code}")
96
 
97
  st.write("Note: This is a demo application. For production use, please ensure you comply with the usage terms of the chosen map provider.")
98