This commit is contained in:
2025-05-11 14:55:15 +02:00
parent 382a252e0f
commit c60d7789e3
4 changed files with 1640 additions and 0 deletions

78
Geovisualization copy.py Normal file
View File

@ -0,0 +1,78 @@
import os
import bibtexparser
import pandas as pd
from tqdm import tqdm
import folium
from folium.plugins import Fullscreen
# Terminal bereinigen
os.system('cls' if os.name == 'nt' else 'clear')
# Dateipfade
geonames_file = 'allCountries.txt'
bib_file = 'Research/Charité - Universitätsmedizin Berlin/Systematische Literaturrecherche/Literaturverzeichnis.bib'
# Laden der GeoNames-Daten
print("Laden der GeoNames-Daten...")
geonames_columns = [
'geonameid', 'name', 'asciiname', 'alternatenames', 'latitude',
'longitude', 'feature class', 'feature code', 'country code', 'cc2',
'admin1 code', 'admin2 code', 'admin3 code', 'admin4 code', 'population',
'elevation', 'dem', 'timezone', 'modification date'
]
chunksize = 10**6
geonames_data = pd.DataFrame()
for chunk in tqdm(pd.read_csv(geonames_file, sep='\t', header=None, names=geonames_columns, chunksize=chunksize, dtype=str, encoding='utf-8')):
geonames_data = pd.concat([geonames_data, chunk], ignore_index=True)
# Laden der BibTeX-Daten
print("Laden der BibTeX-Daten...")
with open(bib_file, encoding='utf-8') as bibtex_file:
bib_database = bibtexparser.load(bibtex_file)
# Ortsnamen extrahieren und bereinigen
print("Extrahieren und Bereinigen der Ortsnamen...")
locations = set()
for entry in bib_database.entries:
if 'address' in entry:
locations.update(entry['address'].replace(';', ',').replace('&', 'and').split(','))
locations = {loc.strip() for loc in locations}
print(f"Bereinigte Ortsnamen: {locations}")
# Geo-Koordinaten zuordnen
print("Zuordnen der Geo-Koordinaten...")
geo_data = []
for location in tqdm(locations):
matching_rows = geonames_data[geonames_data['name'].str.contains(location, case=False, na=False)]
if not matching_rows.empty:
best_match = matching_rows.iloc[0]
geo_data.append({
'name': location,
'latitude': best_match['latitude'],
'longitude': best_match['longitude']
})
if not geo_data:
print("Keine gültigen Koordinaten gefunden.")
else:
df = pd.DataFrame(geo_data)
# Karte erstellen
print("Erstellen der Karte...")
m = folium.Map(location=[0, 0], zoom_start=2)
for _, row in df.iterrows():
folium.Marker(
location=[row['latitude'], row['longitude']],
popup=row['name']
).add_to(m)
# Vollbildmodus und LayerControl hinzufügen
Fullscreen(position='topright').add_to(m)
folium.LayerControl().add_to(m)
# Karte speichern
m.save('literature_map_with_zoom.html')
print("Karte wurde gespeichert als 'literature_map_with_zoom.html'.")