Skip to content
Snippets Groups Projects
example05.py 1.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • import geopandas as gpd
    import pandas as pd
    import folium
    import zipfile
    import os
    
    # Unpack ZIP file containing geodata to subfolder
    zip_file_path = 'parkbench.zip'
    output_dir = 'shapefile_extracted'
    
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        zip_ref.extractall(output_dir)
    
    # Locate shapefile in subfolder (suffix SHP) and read it
    shp_file = [f for f in os.listdir(output_dir) if f.endswith('.shp')][0]
    shp_file_path = os.path.join(output_dir, shp_file)
    gdf = gpd.read_file(shp_file_path)
    
    # The folium library can only work on WGS84 (EPSG:4326) coordinates.
    # This is not provided by the shape file, but geopands can convert this
    # on the fly using the to_crs() method:
    print("Shapefile coordinate system before conversion:", gdf.crs)
    gdf = gdf.to_crs(epsg=4326)
    print("Shapefile coordinate system before conversion:", gdf.crs)
    
    # Show all park bench data in terminal as fromatted table
    # If you use the default pandas output settings will only show the first five lines
    # and it will remove some data for convenience. We don't want this so we disable some
    # of pandas' display settings beforehand: 
    pd.set_option('display.max_rows', None)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_colwidth', None)
    pd.set_option('display.expand_frame_repr', False)
    pd.set_option('display.max_rows', None)
    print(gdf)
    
    # Visualize park benches on a map. Use center of data in shape file as center point
    center_lat = gdf.geometry.y.mean()
    center_lon = gdf.geometry.x.mean()
    
    # Create OpenStreetMap overlay using folium library
    m = folium.Map(location=[center_lat, center_lon], zoom_start=6)
    
    # Add each park bench to overlay
    for idx, row in gdf.iterrows():
        lat = row.geometry.y
        lon = row.geometry.x
        ort = row.ort
        folium.Marker([lat, lon], popup=f'{ort}').add_to(m)
    
    # Save finished overlay to map
    m.save('output.htm')
    print("Overlay has been saved to output.htm")