Skip to content
Snippets Groups Projects
Commit 4a1fdcbd authored by Lejf Diecks's avatar Lejf Diecks
Browse files

Added example 04 - Water measuring stations

parent 6629d2ac
Branches
No related tags found
No related merge requests found
Display all water level measuring stations in Schleswig-Holstein using the folium library with OpenStreetMap
Data Source: https://opendata.schleswig-holstein.de/dataset/pegel-stammdaten
import csv
import folium
from frictionless import Resource, Schema, validate
# Validates the given CSV file against a frictionless schema
def validate_csv_with_schema(file_path, schema_path):
schema = Schema(schema_path)
resource = Resource(file_path, schema=schema)
report = validate(resource)
if report.valid:
print("CSV file validated using frictionless schema")
else:
print("Unable to validate CSV file:")
for error in report.flatten(["rowPosition", "fieldPosition", "code", "message"]):
print(f"Row {error['rowPosition']}, Column {error['fieldPosition']}: {error['message']}")
# Create OpenStreetMap overlay using folium library
def show_coordinates_on_map(file_path):
# Set the center to the city of Nortorf (which is the center of Schleswig-Holstein
# according to Google):
m = folium.Map(location=[54.16995, 9.85516], zoom_start=6)
# Read coordinates and description from CSV file
with open(file_path, newline='', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter = ";")
for row in reader:
#print(row.keys())
lon = float(row['geogrLaenge'])
lat = float(row['geogrBreite'])
#name = row.get('name', 'pegelName')
name = row['pegelName']
folium.Marker([lat, lon], popup=name).add_to(m)
# Save map
map_file = 'output.htm'
m.save(map_file)
print(f"Map has been saved as: '{map_file}'")
# Main program
csv_file = 'pegel.csv'
schema_file = 'frictionless-description.json'
# Step 1: Validate CSV against frictionless schema
validate_csv_with_schema(csv_file, schema_file)
# Step 2: Create OpenStreetMap overlay
show_coordinates_on_map(csv_file)
{
"dialect" : {
"delimiter" : ";"
},
"encoding" : "utf-8",
"format" : "csv",
"name" : "pegel-stammdaten",
"path" : "https://opendata.schleswig-holstein.de/dataset/a78f23ef-7180-4274-96a3-b32150359035/resource/ea7a76cc-0ef5-4d01-8f63-4152f44a1556/download/pegel.csv",
"profile" : "tabular-data-resource",
"fields" : [
{
"name" : "pegelNummer",
"type" : "integer",
"description": "eindeutige Nummer des Pegels"
},
{
"name" : "pegelName",
"type" : "string",
"description": "Name des Pegels"
},
{
"name" : "betreiber",
"type" : "string",
"description": "Name des Betreibers des Pegels"
},
{
"name" : "gewaesser",
"type" : "string",
"description": "Name des Gewässers, an dem sich der Pegel befindet"
},
{
"name" : "geogrLaenge",
"rdfType" : "https://schema.org/longitude",
"type" : "number",
"description": "Lage des Pegels (Längengrad)"
},
{
"name" : "geogrBreite",
"rdfType" : "https://schema.org/latitude",
"type" : "number",
"description": "Lage des Pegels (Breitengrad)"
},
{
"name" : "von",
"type" : "date",
"description": "Datum des ältesten Messwertes"
},
{
"name" : "bis",
"type" : "date",
"description": "Datum des jüngsten Messwertes"
},
{
"constraints" : {
"enum" : [
"Abfluss",
"Wasserstand"
]
},
"name" : "parameter",
"type" : "string",
"description": "gemessener Parameter"
},
{
"name" : "stillgelegtAm",
"type" : "date",
"description": "Datum der Stilllegung"
},
{
"name" : "isDFUE",
"type" : "boolean",
"description": "gibt an, ob die Daten des Pegels kurzfristig verfügbar sind"
},
{
"name" : "einzugsgebiet",
"title": "Einzugsgebiet",
"description": "Größe des Einzugsgebiets in km²",
"type" : "number"
},
{
"name" : "pnp",
"title": "Pegelnullpunkt",
"description": "Höhe des Pegelnullpunkt",
"type" : "number"
},
{
"name" : "pnp_gueltig_ab",
"title": "PNP gültig ab",
"description": "Gültigkeit des Pegelnullpunkts (seit)",
"type" : "date"
},
{
"name" : "gewaesserfolge",
"title": "Gewässerfolge",
"description": "Gewässerfolge (nicht durchgängig vorhanden)",
"type" : "string"
}
],
"primaryKey" : [
"pegelNummer",
"parameter"
]
}
#!/bin/bash
# Install necessary python packages for this example
pip install folium
pip install frictionless
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment