So ein Python-Projekt reizt mich dann doch am späten Abend...
Am besten sollte so etwas natürlich in tomedo direkt installiert werden. Solange dies nicht verfügbar ist, kann man sich aber mittels CSV-Export einer Patientendatei mit Adressdaten und beliebigen Markern und einem Pythonprogramm behelfen. Ich kann selbst wirklich kaum damit umgehen, mittels ChatGPT kommt man aber recht weit. Zugriffe auf Open source-Kartenmaterial geht z.B. über opencagedata.com (kostenloser Zugriff bis 2500 requests/Tag, 10.000/d für 45$/Monat). Das Programm (hier mal für die farbliche Differenzierung von einigen COPD-Testpatienten in Bremen mit verschiedenem Status: Raucher / Ex-Raucher / Nie-Raucher (in Rot / Gelb / Grün, zugegeben: eine sinnfreie Test-Thematik...).
Das Programm dazu:
import pandas as pd
from opencage.geocoder import OpenCageGeocode
import folium
import time
# OpenCage API-Schlüssel (ersetze durch deinen eigenen)
api_key = 'YOUR_API_KEY'
geocoder = OpenCageGeocode(api_key)
# CSV-Datei laden
csv_datei = "/Users/hansjoerg/Downloads/tomedoExport.csv"
df = pd.read_csv(csv_datei)
# Erstelle eine leere Karte (zentriert auf Deutschland)
karte = folium.Map(location=[51.1657, 10.4515], zoom_start=6)
# Funktion, um Markerfarbe basierend auf dem Inhalt der "marker"-Spalte zu bestimmen
def bestimme_marker_farbe(marker_status):
# Aufspaltung der "marker"-Spalte nach gängigen Trennzeichen (Komma, Semikolon, Leerzeichen)
marker_liste = [item.strip().lower() for item in re.split(',|;|\s+', marker_status)]
if "raucher" in marker_liste:
return "red"
elif "exraucher" in marker_liste:
return "orange"
elif "nie-raucher" in marker_liste:
return "green"
else:
return "blue" # Standardfarbe für Patienten ohne spezifischen Marker
# Adressen verarbeiten und auf der Karte anzeigen
for index, row in df.iterrows():
adresse = f"{row['strasse']}, {row['plz']} {row['ort']}"
marker_status = row.get('marker', 'Unbekannt')
try:
result = geocoder.geocode(adresse)
if result:
location = result[0]['geometry']
lat, lng = location['lat'], location['lng']
marker_farbe = bestimme_marker_farbe(marker_status)
folium.Marker([lat, lng],
popup=f"{adresse} - {marker_status}",
icon=folium.Icon(color=marker_farbe)).add_to(karte)
print(f"Marker hinzugefügt für: {adresse}")
else:
print(f"Adresse nicht gefunden: {adresse}")
except Exception as e:
print(f"Fehler bei der Adresse: {adresse}. Fehler: {str(e)}")
# Kleine Verzögerung einfügen, um das Rate-Limit zu respektieren
time.sleep(1)
# Karte speichern
karte_speicherpfad = "/Users/hansjoerg/Downloads/test_bremen_map_final.html"
karte.save(karte_speicherpfad)
print(f"Karte wurde erfolgreich unter {karte_speicherpfad} gespeichert.")
Ich habe das Programm in Jupyter Notebook (Anaconda) laufen lassen, da hat man als Anfänger die geringsten Probleme.
Wenn man Kartenmaterial mit KV-Grenzen haben will, fängt es an kompliziert zu werden. Das müsste man zunächst erst mal suchen.