Contour lines and annual rain flood directions map generator

#1
by antiquesordo - opened

๐Ÿ˜ƒ: Write Python code that creates a combined map of contour lines and annual rain flood directions in one downloadable png map according to longitude and latitude that user input in a text box or according to the map zoom level through a map box
๐Ÿค–: To create a combined map of contour lines and annual rain flood directions, you can use the folium library for interactive maps, geopandas for handling geospatial data, and matplotlib for plotting the contour lines. Here's an example of how you can achieve this:

First, make sure you have the required libraries installed:

pip install folium geopandas matplotlib descartes

Now, let's create a Python script to generate the map:

import folium
import geopandas as gpd
import matplotlib.pyplot as plt
from folium.plugins import MarkerCluster
import numpy as np

def create_combined_map(longitude, latitude, zoom_start):
    # Load your contour lines and annual rain flood direction data (replace with actual data sources)
    contour_data = gpd.read_file("path/to/contour_lines.shp")
    flood_data = gpd.read_file("path/to/annual_rain_flood_directions.shp")

    # Center the map on the user-input coordinates
    m = folium.Map(location=[latitude, longitude], zoom_start=zoom_start)

    # Add contour lines to the map
    folium.GeoJson(contour_data).add_to(m)

    # Add annual rain flood directions to the map
    folium.GeoJson(flood_data).add_to(m)

    # Create a MarkerCluster for the data points (if any)
    marker_cluster = MarkerCluster().add_to(m)

    # Plot contour lines using matplotlib
    fig, ax = plt.subplots(figsize=(6, 6))
    contour_data.plot(column='elevation', ax=ax, linewidth=0.5, cmap='terrain')
    flood_data.plot(column='flood_direction', ax=ax, edgecolor='r', linewidth=1, cmap='Blues')
    ax.set_axis_off()

    # Add the matplotlib plot as an image layer to the folium map
    img = m._folium_map.get_root().empty()
    img.add_child(folium.raster_layers.ImageOverlay(
        image=plt.imshow(ax.figure.canvas.get_renderer().to_image(), interpolation='bilinear'),
        bounds=[[m.min_lat, m.min_lon], [m.max_lat, m.max_lon]],
        opacity=0.8,
        mercator_project=True
    ))

    # Save the map as a PNG
    m.save("combined_map.png")

# Get user input for longitude, latitude, and zoom level
longitude = float(input("Enter the longitude: "))
latitude = float(input("Enter the latitude: "))
zoom_start = int(input("Enter the zoom start level: "))

create_combined_map(longitude, latitude, zoom_start)

Replace "path/to/contour_lines.shp" and "path/to/annual_rain_flood_directions.shp" with the actual file paths to your contour lines and annual rain flood direction shapefiles.

This script will create a PNG image named "combined_map.png" with the combined map based on the user's input for longitude, latitude, and zoom level. Note that this code assumes your contour lines and flood direction data are stored in shapefiles with appropriate columns like 'elevation' for contour lines and 'flood_direction' for flood directions. Adjust these column names according to your data.

Sign up or log in to comment