Streamlit_Docker / pages /Location.py
MaxGit32's picture
Create Location.py
ffce005
from functools import partial
from geopy.geocoders import Nominatim # Openstreatmaps
import requests
import json
import pandas as pd
class Location:
def __init__(self, location):
self.location = location
self.df = self.jsonToDf()
def jsonToDf(self):
plz = pd.read_json('plz.json')
plz["plz_name"] = plz['plz_name'].str.replace('\u00f6','Ö')
plz["plz_name"] = plz['plz_name'].str.replace('\u00fc','ü')
plz["plz_name"] = plz['plz_name'].str.replace('\u00df','ß')
plz["plz_name"] = plz['plz_name'].str.replace('\u00e4','ä')
plz["plz_name"] = plz['plz_name'].str.replace('\u00c4','Ä')
plz["plz_name"] = plz['plz_name'].str.replace('\u00d6','Ö')
plz["plz_name"] = plz['plz_name'].str.replace('\u00dc','Ü')
plz["plz_name"] = plz['plz_name'].str.replace('Halle/ Saale','Halle (Saale)')
mask = plz['plz_name'] == "Halle"
plz.loc[mask, 'plz_name'] = "Halle (Weserbergland)"
return plz
def getPostalJson(self):
# Postleitzahlen per API erzahlten
url = 'https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/georef-germany-postleitzahl/exports/json?select=plz_name%2C%20name&lang=de&timezone=UTC&use_labels=false&epsg=4326' # Ersetze dies durch die tatsächliche API-URL
response = requests.get(url)
# Überprüfen, ob die Anfrage erfolgreich war (Status-Code 200)
if response.status_code == 200:
# JSON-Antwort aus der API
json_data = response.json()
# Speichern der JSON-Antwort in einer Datei
with open('plz.json', 'w') as file:
json.dump(json_data, file)
print('Daten erfolgreich in "api_response.json" gespeichert.')
return json_data
else:
print('Fehler bei der API-Anfrage.')
## return Postleitzahl
def getPostalCode(self):
try:
geolocator = Nominatim(user_agent="LocationApiPruefen")
geocode = partial(geolocator.geocode, language="de")
postleitzahl = geocode(self.location).raw.get("display_name")
x_split = postleitzahl.split(", ")
post_sub = x_split[4]
columns = ['plz_name', 'name']
df = pd.DataFrame(columns=columns)
df.loc[0] = [self.location, post_sub]
if post_sub.isdigit():
return df
else:
raise Exception
except:
# Dataframe PLZ durchsuchen
gesuchter_wert = self.location
ergebnisse = self.df[self.df['plz_name'] == gesuchter_wert]
if ergebnisse.empty:
gesuchter_wert_erw = gesuchter_wert+ " "
ergebnisse = self.df[self.df['plz_name'].str.contains(gesuchter_wert_erw)]
if ergebnisse.empty:
neue_zeile = pd.Series({'plz_name': "", 'name': ''})
#ergebnisse = ergebnisse.append(neue_zeile, ignore_index=True)
ergebnisse = pd.concat([neue_zeile, ergebnisse], ignore_index=True)
#ergebnisse = ergebnisse.drop(1)
#print(ergebnisse)
return ergebnisse
#print(ergebnisse)
return ergebnisse
## Testing
#l1 = Location("Wartenberg").getPostalCode()
#print(type(l1))