diff --git a/python_scripts/parse_wurzburg_open_data/output/wuerzburg_trees.html b/python_scripts/parse_wurzburg_open_data/output/wuerzburg_trees.html
new file mode 100644
index 0000000000000000000000000000000000000000..25e21178ac3541f13a1ca0b8d137b999d73ab517
--- /dev/null
+++ b/python_scripts/parse_wurzburg_open_data/output/wuerzburg_trees.html
@@ -0,0 +1,803 @@
+<!DOCTYPE html>
+<html>
+<head>
+    
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+    
+        <script>
+            L_NO_TOUCH = false;
+            L_DISABLE_3D = false;
+        </script>
+    
+    <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
+    <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
+    <script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
+    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
+    <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
+    
+            <meta name="viewport" content="width=device-width,
+                initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+            <style>
+                #map_0a18e9f592807b7da8ad7df3701854cc {
+                    position: relative;
+                    width: 100.0%;
+                    height: 100.0%;
+                    left: 0.0%;
+                    top: 0.0%;
+                }
+                .leaflet-container { font-size: 1rem; }
+            </style>
+        
+</head>
+<body>
+    
+    
+            <div class="folium-map" id="map_0a18e9f592807b7da8ad7df3701854cc" ></div>
+        
+</body>
+<script>
+    
+    
+            var map_0a18e9f592807b7da8ad7df3701854cc = L.map(
+                "map_0a18e9f592807b7da8ad7df3701854cc",
+                {
+                    center: [0.0, 0.0],
+                    crs: L.CRS.EPSG3857,
+                    zoom: 1,
+                    zoomControl: true,
+                    preferCanvas: false,
+                }
+            );
+
+            
+
+        
+    
+            var tile_layer_fa0998e64f3b93954936f33f8ee901dd = L.tileLayer(
+                "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
+                {"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
+            );
+        
+    
+            tile_layer_fa0998e64f3b93954936f33f8ee901dd.addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+            map_0a18e9f592807b7da8ad7df3701854cc.fitBounds(
+                [[49.77794, 9.92724], [49.79761, 10.001541255042]],
+                {}
+            );
+        
+    
+            var circle_981ebc2a4a74f3aa21e9f2d665723cf6 = L.circle(
+                [49.782, 9.95677],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_8baab6221ecf85d84ca4ef9d7e63be46 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_cef3a8150cf716145838b6c71ab54846 = $(`<div id="html_cef3a8150cf716145838b6c71ab54846" style="width: 100.0%; height: 100.0%;">Tree #58753 (Acer Platanoides)</div>`)[0];
+                popup_8baab6221ecf85d84ca4ef9d7e63be46.setContent(html_cef3a8150cf716145838b6c71ab54846);
+            
+        
+
+        circle_981ebc2a4a74f3aa21e9f2d665723cf6.bindPopup(popup_8baab6221ecf85d84ca4ef9d7e63be46)
+        ;
+
+        
+    
+    
+            circle_981ebc2a4a74f3aa21e9f2d665723cf6.bindTooltip(
+                `<div>
+                     Acer Platanoides
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_2a2d0745e95a072d4812752621496adb = L.circle(
+                [49.7819944, 9.95930555555555],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_3339232496f135e1c830da2233a7b6e4 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_5fd3c764b7b2fd110d624c60d157ca26 = $(`<div id="html_5fd3c764b7b2fd110d624c60d157ca26" style="width: 100.0%; height: 100.0%;">Tree #06_Ersatz_01_58753 (Acer Platanoides)</div>`)[0];
+                popup_3339232496f135e1c830da2233a7b6e4.setContent(html_5fd3c764b7b2fd110d624c60d157ca26);
+            
+        
+
+        circle_2a2d0745e95a072d4812752621496adb.bindPopup(popup_3339232496f135e1c830da2233a7b6e4)
+        ;
+
+        
+    
+    
+            circle_2a2d0745e95a072d4812752621496adb.bindTooltip(
+                `<div>
+                     Acer Platanoides
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_189049d3ebdbe495cea9d128ade477a4 = L.circle(
+                [49.7819944, 9.959305555555554],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_c27924f4412739b006ab4e20775ee887 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_fddd084bf5cd8c155b97d92dd2e51a84 = $(`<div id="html_fddd084bf5cd8c155b97d92dd2e51a84" style="width: 100.0%; height: 100.0%;">Tree #06_Ersatz_01_58753 (Acer Platanoides)</div>`)[0];
+                popup_c27924f4412739b006ab4e20775ee887.setContent(html_fddd084bf5cd8c155b97d92dd2e51a84);
+            
+        
+
+        circle_189049d3ebdbe495cea9d128ade477a4.bindPopup(popup_c27924f4412739b006ab4e20775ee887)
+        ;
+
+        
+    
+    
+            circle_189049d3ebdbe495cea9d128ade477a4.bindTooltip(
+                `<div>
+                     Acer Platanoides
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_b00b475545351240c12a246f965dbce8 = L.circle(
+                [49.7912, 9.92724],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_18282a8adabe693466654d260e9432e3 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_ba2eedc08a7bab8f91b4f1bfed898bb1 = $(`<div id="html_ba2eedc08a7bab8f91b4f1bfed898bb1" style="width: 100.0%; height: 100.0%;">Tree #65851 (Fraxinus Angustifolia Raywood)</div>`)[0];
+                popup_18282a8adabe693466654d260e9432e3.setContent(html_ba2eedc08a7bab8f91b4f1bfed898bb1);
+            
+        
+
+        circle_b00b475545351240c12a246f965dbce8.bindPopup(popup_18282a8adabe693466654d260e9432e3)
+        ;
+
+        
+    
+    
+            circle_b00b475545351240c12a246f965dbce8.bindTooltip(
+                `<div>
+                     Fraxinus Angustifolia Raywood
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_25635b8b27400277c5ed16d92ef1b213 = L.circle(
+                [49.77794, 9.93879],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_a969f5bc84ce9d6f0d934cc9a483eb02 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_21455c1c6c03e3f24b73f74b3831d772 = $(`<div id="html_21455c1c6c03e3f24b73f74b3831d772" style="width: 100.0%; height: 100.0%;">Tree #54838 (Fraxinus Ornus)</div>`)[0];
+                popup_a969f5bc84ce9d6f0d934cc9a483eb02.setContent(html_21455c1c6c03e3f24b73f74b3831d772);
+            
+        
+
+        circle_25635b8b27400277c5ed16d92ef1b213.bindPopup(popup_a969f5bc84ce9d6f0d934cc9a483eb02)
+        ;
+
+        
+    
+    
+            circle_25635b8b27400277c5ed16d92ef1b213.bindTooltip(
+                `<div>
+                     Fraxinus Ornus
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_d9c88bdee2db3466656cdfe372fe0d4b = L.circle(
+                [49.79037, 9.92953],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_adfead7649afa2476c726b17d784de1d = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_5ba1c474dc319342dd9a370236ddd5b0 = $(`<div id="html_5ba1c474dc319342dd9a370236ddd5b0" style="width: 100.0%; height: 100.0%;">Tree #8971.1 (Gleditsia Triacanthos Inermis)</div>`)[0];
+                popup_adfead7649afa2476c726b17d784de1d.setContent(html_5ba1c474dc319342dd9a370236ddd5b0);
+            
+        
+
+        circle_d9c88bdee2db3466656cdfe372fe0d4b.bindPopup(popup_adfead7649afa2476c726b17d784de1d)
+        ;
+
+        
+    
+    
+            circle_d9c88bdee2db3466656cdfe372fe0d4b.bindTooltip(
+                `<div>
+                     Gleditsia Triacanthos Inermis
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_fc0b3beef9e9a76751cbd89ef147cafc = L.circle(
+                [49.7913, 9.96101],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_23194f068c635e7968cd152a2b5e1153 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_09b37e024c7841dad55eae3589fd7978 = $(`<div id="html_09b37e024c7841dad55eae3589fd7978" style="width: 100.0%; height: 100.0%;">Tree #36312 (Robinia Pseudoacacia)</div>`)[0];
+                popup_23194f068c635e7968cd152a2b5e1153.setContent(html_09b37e024c7841dad55eae3589fd7978);
+            
+        
+
+        circle_fc0b3beef9e9a76751cbd89ef147cafc.bindPopup(popup_23194f068c635e7968cd152a2b5e1153)
+        ;
+
+        
+    
+    
+            circle_fc0b3beef9e9a76751cbd89ef147cafc.bindTooltip(
+                `<div>
+                     Robinia Pseudoacacia
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_6140a4ff66c3b664569024f69b8798e7 = L.circle(
+                [49.78955, 9.93318],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_78b6f0fc9a40c6af5b6538207d1aea00 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_1f0e661408ca758a98f4742287d28478 = $(`<div id="html_1f0e661408ca758a98f4742287d28478" style="width: 100.0%; height: 100.0%;">Tree #54976 (Sophora Japonica)</div>`)[0];
+                popup_78b6f0fc9a40c6af5b6538207d1aea00.setContent(html_1f0e661408ca758a98f4742287d28478);
+            
+        
+
+        circle_6140a4ff66c3b664569024f69b8798e7.bindPopup(popup_78b6f0fc9a40c6af5b6538207d1aea00)
+        ;
+
+        
+    
+    
+            circle_6140a4ff66c3b664569024f69b8798e7.bindTooltip(
+                `<div>
+                     Sophora Japonica
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_d947e5e21b5bb51af172cce8e89029c0 = L.circle(
+                [49.79344, 9.94073],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_f4b9df3014faff570f828073c0956967 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_d7fb105b0c22dda5e2bd9eff7ca549a5 = $(`<div id="html_d7fb105b0c22dda5e2bd9eff7ca549a5" style="width: 100.0%; height: 100.0%;">Tree #23631 (Tilia Cordata Greenspire)</div>`)[0];
+                popup_f4b9df3014faff570f828073c0956967.setContent(html_d7fb105b0c22dda5e2bd9eff7ca549a5);
+            
+        
+
+        circle_d947e5e21b5bb51af172cce8e89029c0.bindPopup(popup_f4b9df3014faff570f828073c0956967)
+        ;
+
+        
+    
+    
+            circle_d947e5e21b5bb51af172cce8e89029c0.bindTooltip(
+                `<div>
+                     Tilia Cordata Greenspire
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_f7ab6f27123e8509994521321840c289 = L.circle(
+                [49.79318, 9.93319],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_66589ced6a2febc16296c0c2090049ee = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_7b025c9102d00aff929e7f4e2c8726f7 = $(`<div id="html_7b025c9102d00aff929e7f4e2c8726f7" style="width: 100.0%; height: 100.0%;">Tree #5540 (Tilia Cordata Greenspire)</div>`)[0];
+                popup_66589ced6a2febc16296c0c2090049ee.setContent(html_7b025c9102d00aff929e7f4e2c8726f7);
+            
+        
+
+        circle_f7ab6f27123e8509994521321840c289.bindPopup(popup_66589ced6a2febc16296c0c2090049ee)
+        ;
+
+        
+    
+    
+            circle_f7ab6f27123e8509994521321840c289.bindTooltip(
+                `<div>
+                     Tilia Cordata Greenspire
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_76fcc0d4223da0e1edeb0616c9c4c0a4 = L.circle(
+                [49.78558, 9.95938],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_b7d6ef6f66b34a7140e5f1a3b7025b6b = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_f081975dccdaf814914367f977aaff05 = $(`<div id="html_f081975dccdaf814914367f977aaff05" style="width: 100.0%; height: 100.0%;">Tree #58762 (Tilia Tomentosa Brabant)</div>`)[0];
+                popup_b7d6ef6f66b34a7140e5f1a3b7025b6b.setContent(html_f081975dccdaf814914367f977aaff05);
+            
+        
+
+        circle_76fcc0d4223da0e1edeb0616c9c4c0a4.bindPopup(popup_b7d6ef6f66b34a7140e5f1a3b7025b6b)
+        ;
+
+        
+    
+    
+            circle_76fcc0d4223da0e1edeb0616c9c4c0a4.bindTooltip(
+                `<div>
+                     Tilia Tomentosa Brabant
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_126a7607b2f03e5b736805b688d7bd33 = L.circle(
+                [49.7855, 9.95930555555555],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_9403bf09a10efa4d5c9033166b6e689b = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_966faddf55491e4242b3aaf1d7ad02fb = $(`<div id="html_966faddf55491e4242b3aaf1d7ad02fb" style="width: 100.0%; height: 100.0%;">Tree #01_Ersatz_2_58762 (Tilia Tomentosa Brabant)</div>`)[0];
+                popup_9403bf09a10efa4d5c9033166b6e689b.setContent(html_966faddf55491e4242b3aaf1d7ad02fb);
+            
+        
+
+        circle_126a7607b2f03e5b736805b688d7bd33.bindPopup(popup_9403bf09a10efa4d5c9033166b6e689b)
+        ;
+
+        
+    
+    
+            circle_126a7607b2f03e5b736805b688d7bd33.bindTooltip(
+                `<div>
+                     Tilia Tomentosa Brabant
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_d6aed4680a1befee70bcb5a20c6367d9 = L.circle(
+                [49.7855, 9.959305555555554],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_59529475359321945850c1e5f7717546 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_ab2c96d585649846efe1e6ff9d222477 = $(`<div id="html_ab2c96d585649846efe1e6ff9d222477" style="width: 100.0%; height: 100.0%;">Tree #01_Ersatz_2_58762 (Tilia Tomentosa Brabant)</div>`)[0];
+                popup_59529475359321945850c1e5f7717546.setContent(html_ab2c96d585649846efe1e6ff9d222477);
+            
+        
+
+        circle_d6aed4680a1befee70bcb5a20c6367d9.bindPopup(popup_59529475359321945850c1e5f7717546)
+        ;
+
+        
+    
+    
+            circle_d6aed4680a1befee70bcb5a20c6367d9.bindTooltip(
+                `<div>
+                     Tilia Tomentosa Brabant
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_92a4fbca08b58e20ba6e6d2d1aefe32d = L.circle(
+                [49.79619, 9.93103],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_cd94c08d8b7203caddaaaca3a1b097f3 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_cd7c7a18b0400ac40b893c99d45908a7 = $(`<div id="html_cd7c7a18b0400ac40b893c99d45908a7" style="width: 100.0%; height: 100.0%;">Tree #5445 (Tilia Vulgaris Pallida)</div>`)[0];
+                popup_cd94c08d8b7203caddaaaca3a1b097f3.setContent(html_cd7c7a18b0400ac40b893c99d45908a7);
+            
+        
+
+        circle_92a4fbca08b58e20ba6e6d2d1aefe32d.bindPopup(popup_cd94c08d8b7203caddaaaca3a1b097f3)
+        ;
+
+        
+    
+    
+            circle_92a4fbca08b58e20ba6e6d2d1aefe32d.bindTooltip(
+                `<div>
+                     Tilia Vulgaris Pallida
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_f138b63bb165bdec4fb348efb2e319a4 = L.circle(
+                [49.79761, 9.9327],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_fa1c123c7cde49049c3ebe89f9f251bd = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_e2dfdd45681d61ca36a488a8c963ddb4 = $(`<div id="html_e2dfdd45681d61ca36a488a8c963ddb4" style="width: 100.0%; height: 100.0%;">Tree #42374 (Tilia Vulgaris Pallida)</div>`)[0];
+                popup_fa1c123c7cde49049c3ebe89f9f251bd.setContent(html_e2dfdd45681d61ca36a488a8c963ddb4);
+            
+        
+
+        circle_f138b63bb165bdec4fb348efb2e319a4.bindPopup(popup_fa1c123c7cde49049c3ebe89f9f251bd)
+        ;
+
+        
+    
+    
+            circle_f138b63bb165bdec4fb348efb2e319a4.bindTooltip(
+                `<div>
+                     Tilia Vulgaris Pallida
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_4b30eec10afb6c716ec1b5eba1cc3fcf = L.circle(
+                [49.796, 9.93272],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_f924b9d126382d2437142ef3cc9cd0df = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_16911d280d025bc6e598d098b382c957 = $(`<div id="html_16911d280d025bc6e598d098b382c957" style="width: 100.0%; height: 100.0%;">Tree #5463.1 (Ulmus New Horizon)</div>`)[0];
+                popup_f924b9d126382d2437142ef3cc9cd0df.setContent(html_16911d280d025bc6e598d098b382c957);
+            
+        
+
+        circle_4b30eec10afb6c716ec1b5eba1cc3fcf.bindPopup(popup_f924b9d126382d2437142ef3cc9cd0df)
+        ;
+
+        
+    
+    
+            circle_4b30eec10afb6c716ec1b5eba1cc3fcf.bindTooltip(
+                `<div>
+                     Ulmus New Horizon
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_ec87653c7e906080e4cc73fc39c4de7a = L.circle(
+                [49.79658, 9.94169],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_0a648d8732aa736971ac9da7fec4e28d = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_81c1f01975eea1f926a26d7883a1b38b = $(`<div id="html_81c1f01975eea1f926a26d7883a1b38b" style="width: 100.0%; height: 100.0%;">Tree #58413 (Ulmus New Horizon)</div>`)[0];
+                popup_0a648d8732aa736971ac9da7fec4e28d.setContent(html_81c1f01975eea1f926a26d7883a1b38b);
+            
+        
+
+        circle_ec87653c7e906080e4cc73fc39c4de7a.bindPopup(popup_0a648d8732aa736971ac9da7fec4e28d)
+        ;
+
+        
+    
+    
+            circle_ec87653c7e906080e4cc73fc39c4de7a.bindTooltip(
+                `<div>
+                     Ulmus New Horizon
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_7e7cb41265abeb7939e032d272089dec = L.circle(
+                [49.78703, 9.92758],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_a26d6b51cdf79f04b4889d4e41e1ea8a = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_630553cc36fcf0c38d2a7987e81f1f69 = $(`<div id="html_630553cc36fcf0c38d2a7987e81f1f69" style="width: 100.0%; height: 100.0%;">Tree #56822 (Ulmus Rebona)</div>`)[0];
+                popup_a26d6b51cdf79f04b4889d4e41e1ea8a.setContent(html_630553cc36fcf0c38d2a7987e81f1f69);
+            
+        
+
+        circle_7e7cb41265abeb7939e032d272089dec.bindPopup(popup_a26d6b51cdf79f04b4889d4e41e1ea8a)
+        ;
+
+        
+    
+    
+            circle_7e7cb41265abeb7939e032d272089dec.bindTooltip(
+                `<div>
+                     Ulmus Rebona
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_ef819b046854f73929bd0047244f67c6 = L.circle(
+                [49.79166, 9.93557],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_92eead152216eebd47591fb7998ef220 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_0e289200a973d461a1a3242836f141fe = $(`<div id="html_0e289200a973d461a1a3242836f141fe" style="width: 100.0%; height: 100.0%;">Tree #7023.2 (Unbekannt)</div>`)[0];
+                popup_92eead152216eebd47591fb7998ef220.setContent(html_0e289200a973d461a1a3242836f141fe);
+            
+        
+
+        circle_ef819b046854f73929bd0047244f67c6.bindPopup(popup_92eead152216eebd47591fb7998ef220)
+        ;
+
+        
+    
+    
+            circle_ef819b046854f73929bd0047244f67c6.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_95292adf4a2bcdb97b7077233bf113a8 = L.circle(
+                [49.7916417, 9.93559444444444],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_b0937c6d814944f27329aea10fdc8b79 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_c4f1dfbf21372c17cf48622849c2cb24 = $(`<div id="html_c4f1dfbf21372c17cf48622849c2cb24" style="width: 100.0%; height: 100.0%;">Tree #05_Ersatz_3_7023.2 (Unbekannt)</div>`)[0];
+                popup_b0937c6d814944f27329aea10fdc8b79.setContent(html_c4f1dfbf21372c17cf48622849c2cb24);
+            
+        
+
+        circle_95292adf4a2bcdb97b7077233bf113a8.bindPopup(popup_b0937c6d814944f27329aea10fdc8b79)
+        ;
+
+        
+    
+    
+            circle_95292adf4a2bcdb97b7077233bf113a8.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_6a3e08dba104ddfc6d29a72fae80e254 = L.circle(
+                [49.7916417, 9.935594444444444],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_bfeb9b4a3179d59bf3181b7936ccef98 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_0f2f9bdc7744082df31906966fe42350 = $(`<div id="html_0f2f9bdc7744082df31906966fe42350" style="width: 100.0%; height: 100.0%;">Tree #05_Ersatz_3_7023.2 (Unbekannt)</div>`)[0];
+                popup_bfeb9b4a3179d59bf3181b7936ccef98.setContent(html_0f2f9bdc7744082df31906966fe42350);
+            
+        
+
+        circle_6a3e08dba104ddfc6d29a72fae80e254.bindPopup(popup_bfeb9b4a3179d59bf3181b7936ccef98)
+        ;
+
+        
+    
+    
+            circle_6a3e08dba104ddfc6d29a72fae80e254.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_8bb566179aa541464a1eea77216eda48 = L.circle(
+                [49.79701159928018, 10.001281499862673],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_cf8fddaf2eb30ee704ddee70031cf16b = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_411da31f51ae769dffb5c8d6795c647e = $(`<div id="html_411da31f51ae769dffb5c8d6795c647e" style="width: 100.0%; height: 100.0%;">Tree #Gartenamt_Kontroll_2 (Unbekannt)</div>`)[0];
+                popup_cf8fddaf2eb30ee704ddee70031cf16b.setContent(html_411da31f51ae769dffb5c8d6795c647e);
+            
+        
+
+        circle_8bb566179aa541464a1eea77216eda48.bindPopup(popup_cf8fddaf2eb30ee704ddee70031cf16b)
+        ;
+
+        
+    
+    
+            circle_8bb566179aa541464a1eea77216eda48.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_cc64310ab2e4a12ec4da4a41095551e0 = L.circle(
+                [49.796866164882324, 10.001541255041959],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_6d047405962da9eedd6a13f30c8f3ac0 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_7a97f17c921b1fe7ae8415e15fe5988d = $(`<div id="html_7a97f17c921b1fe7ae8415e15fe5988d" style="width: 100.0%; height: 100.0%;">Tree #Gartenamt_Kontroll_1 (Unbekannt)</div>`)[0];
+                popup_6d047405962da9eedd6a13f30c8f3ac0.setContent(html_7a97f17c921b1fe7ae8415e15fe5988d);
+            
+        
+
+        circle_cc64310ab2e4a12ec4da4a41095551e0.bindPopup(popup_6d047405962da9eedd6a13f30c8f3ac0)
+        ;
+
+        
+    
+    
+            circle_cc64310ab2e4a12ec4da4a41095551e0.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_1ee5687504018e5227d1d344acaf84b9 = L.circle(
+                [49.7970115992802, 10.0012814998627],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_76c6af6781bfa03fed47931b34a1ce88 = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_6ccac956ff6cf2fbec613c302ad43d1a = $(`<div id="html_6ccac956ff6cf2fbec613c302ad43d1a" style="width: 100.0%; height: 100.0%;">Tree #Gartenamt_Kontroll_2 (Unbekannt)</div>`)[0];
+                popup_76c6af6781bfa03fed47931b34a1ce88.setContent(html_6ccac956ff6cf2fbec613c302ad43d1a);
+            
+        
+
+        circle_1ee5687504018e5227d1d344acaf84b9.bindPopup(popup_76c6af6781bfa03fed47931b34a1ce88)
+        ;
+
+        
+    
+    
+            circle_1ee5687504018e5227d1d344acaf84b9.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+    
+            var circle_e27c381673255467b8a7d647f7f7e8a3 = L.circle(
+                [49.7968661648823, 10.001541255042],
+                {"bubblingMouseEvents": true, "color": "black", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "green", "fillOpacity": 0.9, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1, "radius": 50, "stroke": true, "weight": 1}
+            ).addTo(map_0a18e9f592807b7da8ad7df3701854cc);
+        
+    
+        var popup_c222b257d70bc2ac2af56a702905726f = L.popup({"maxWidth": "100%"});
+
+        
+            
+                var html_ed29f32c36040771e5c39c556904dcc6 = $(`<div id="html_ed29f32c36040771e5c39c556904dcc6" style="width: 100.0%; height: 100.0%;">Tree #Gartenamt_Kontroll_1 (Unbekannt)</div>`)[0];
+                popup_c222b257d70bc2ac2af56a702905726f.setContent(html_ed29f32c36040771e5c39c556904dcc6);
+            
+        
+
+        circle_e27c381673255467b8a7d647f7f7e8a3.bindPopup(popup_c222b257d70bc2ac2af56a702905726f)
+        ;
+
+        
+    
+    
+            circle_e27c381673255467b8a7d647f7f7e8a3.bindTooltip(
+                `<div>
+                     Unbekannt
+                 </div>`,
+                {"sticky": true}
+            );
+        
+</script>
+</html>
\ No newline at end of file
diff --git a/python_scripts/parse_wurzburg_open_data/parse_open_data.py b/python_scripts/parse_wurzburg_open_data/parse_open_data.py
index d3c7871eb15fad3130d53bbf69aedb8e3c092dc3..7e684ac2894d8e67592d0bc8bf213e1cada169ae 100644
--- a/python_scripts/parse_wurzburg_open_data/parse_open_data.py
+++ b/python_scripts/parse_wurzburg_open_data/parse_open_data.py
@@ -9,10 +9,13 @@ from pathlib import Path
 import requests
 import shutil
 import pandas as pd
+import folium
 from rich import print
 
 SCRIPT_DIR = Path(__file__).resolve().parent
 INPUT_DIR = SCRIPT_DIR / 'input'
+OUTPUT_DIR = SCRIPT_DIR / 'output'
+OUTPUT_DIR.mkdir(exist_ok=True)
 
 INPUT_FILE = INPUT_DIR / 'wuerzburg_trees.parquet'
 INPUT_URL = "https://opendata.wuerzburg.de/api/explore/v2.1/catalog/datasets/sls-klimabaeume/exports/parquet?lang=en&timezone=Europe%2FBerlin"
@@ -34,12 +37,30 @@ else:
 
 df = pd.read_parquet(INPUT_FILE, engine='fastparquet')
 
-print(df)
-
-interesting_columns = ['tree_number', 'species_latin', 'latitude', 'longitude']
 
+interactive_map = folium.Map()
 species = 'species_latin'
 coordinates = ['latitude', 'longitude']
-df[interesting_columns].drop_duplicates().groupby(species).apply(print)
+interesting_columns = ['tree_number', 'species_latin', 'latitude', 'longitude']
+lat_min, lon_min, lat_max, lon_max = df[coordinates].agg(['min', 'max']).stack().values
+interactive_map.fit_bounds([(lat_min, lon_min), (lat_max, lon_max)])
+
+for same, grouped_df in df[interesting_columns].drop_duplicates().groupby(species):
+    for row in grouped_df.itertuples():
+        folium.Circle(
+            location=[row.latitude, row.longitude],
+            tooltip=row.species_latin,
+            radius=50,  # [m]
+            color="black",
+            weight=1,
+            fill_opacity=0.9,
+            opacity=1,
+            fill_color="green",
+            fill=False,  # gets overridden by fill_color
+            popup=f"Tree #{row.tree_number} ({row.species_latin})",
+        ).add_to(interactive_map)
+
+output_map = OUTPUT_DIR / INPUT_FILE.with_suffix('.html').name
+interactive_map.save(output_map)
 
-df[interesting_columns].drop_duplicates().groupby(coordinates).apply(print)
+print(f"{output_map} has been written.")
diff --git a/python_scripts/parse_wurzburg_open_data/requirements.txt b/python_scripts/parse_wurzburg_open_data/requirements.txt
index 5a331f5918ae18f53a4b3f1feb612d3d74764039..bcb66a268bc3cbd36bc885787e7928870745f57b 100644
--- a/python_scripts/parse_wurzburg_open_data/requirements.txt
+++ b/python_scripts/parse_wurzburg_open_data/requirements.txt
@@ -2,3 +2,4 @@ pandas
 requests
 fastparquet
 folium
+rich