GeoPy - GeoCoderTimeout - alternativen Anbieter finden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Hallo zusammen,

ich habe eine Webanwendung mit Flask erstellt, dort können registrierte User Zimmer reinstellen. Andere User können dann nach diesen Zimmern suchen.

Beim Reinstellen der Zimmer benutze ich GeoPy um aus den Adressdaten die lat und lng Werte zu bekommen z.b.:

Code: Alles auswählen

try:
			if form.hausnr.data:
				location_zimmer = geolocator.geocode(form.land.data + " " + form.stadt.data + " " + form.strasse.data + " " + form.hausnr.data, timeout=2)
			else:
				location_zimmer = geolocator.geocode(form.land.data + " " + form.stadt.data + " " + form.strasse.data, timeout=2)
		except GeocoderTimedOut as e:
			print "Geocoder timeout beim Einstellen", e
Ich benutze geopy auch an ganz vielen anderen Stellen im Code, um z.B. Marker auf der google map zu setzen und beim Editen des Zimmers.

Jedoch kommt ab und zu der GeoCoderTimeout error. Ich habe herausgefunden, dass geopy wohl sehr viele Dienste durchgeht und deswegen kann es vorkommen, dass es einen timeout gibt. Mein Programm kriegt aber einen "InternalServerError 500" wenn das passiert.

Eine Lösung wäre es vill. den timeout hochzustellen und eine custom Fehler Seite einzubauen nach dem Motto "etwas ist schief gelaufen, probiere es in 5 min. nochmal".

Der Timeout kommt im Schnitt alle 10 Zimmer 1 mal.

Schlimmer ist es wenn ich die map marker lade und ich irgendwann über 100 zu ladene Zimmermarker habe und jeder 10te wird nicht angezeigt auf der Karte.

Kennt ihr eine Alternative? Kann auch etwas sein, was Geld kostet.

Wie immer vielen Dank!

EDIT:

Leute ich habe jetzt mal in eine etwas andere Richtung recherchiert, ich brauche eine eigene Installation davon auf meinen Server. Für meine Anwendung reicht GeoPy einfach nicht aus, die Daten kommen von OpenStreetMap und habe starke Limits.
Zuletzt geändert von Zoja am Mittwoch 31. August 2016, 14:41, insgesamt 1-mal geändert.
BlackJack

@Zoja: Hatten wir die Frage nicht schon mal und es kam die Rückfrage warum Du jedes mal diese Information abfragst und nicht nur einmal und dann bei Dir in der Datenbank speicherst‽

Edit: viewtopic.php?f=1&t=38821
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

BlackJack hat geschrieben:@Zoja: Hatten wir die Frage nicht schon mal und es kam die Rückfrage warum Du jedes mal diese Information abfragst und nicht nur einmal und dann bei Dir in der Datenbank speicherst‽
Ja wir hatten das Thema, aber das habe ich gelöst, ich weiß ja jetzt woran es lag. Der Service funktioniert auch so wie ich ihn nun eingebaut habe. Ich habe nur Mist gebaut. Ich kann GeoPy nicht benutzen:

http://wiki.openstreetmap.org/wiki/Nomi ... age_policy

EDIT:

Aber wiederum
geopy includes geocoder classes for the OpenStreetMap Nominatim, ESRI ArcGIS, Google Geocoding API (V3), Baidu Maps, Bing Maps API, Mapzen Search, Yandex, IGN France, GeoNames, NaviData, OpenMapQuest, What3Words, OpenCage, SmartyStreets, geocoder.us, and GeocodeFarm geocoder services. The various geocoder classes are located in geopy.geocoders.
Nominatum ist nur ein Teil von GeoPy. ich könnte den timeout wesentlich höher setzten, aber wenn dann nach "Dortmund" gesucht wird und 100 Zimmer sind in Dortmund und er bei einigen bis zu 10 sec brauchen würde um den Marker zu platzieren, dann dauert das 1-2 min. bis die Seite geladen ist.

EDIT:

Ich bin ein idiot :D. Ich habe doch schon lat und lng wenn ich die Zimmer reinstelle, ich brauche den geoservice nicht bei der Suche, also das Problem mit den Marker ist weg, sorry Leute das war peinlich! Ist mir gerade aber erst klar geworden (wurde im letzten Post auch schon erwähnt, ich habs nur irgendwie nicht verstanden was gemeint war).

Dass der Timeout aber jetzt einmal beim Erstellen des Zimmers kam, ist immernoch Fakt, aber nicht so wild, da man nur 1 x etwas reinstellt, hier kann ich den timeout hochstellen und zusätzlich im worst case eine custom Fehlerseite benutzen.
Zuletzt geändert von Zoja am Mittwoch 31. August 2016, 14:57, insgesamt 1-mal geändert.
BlackJack

@Zoja: Alternativen werden bei den Nutzungsbedingungen ja erwähnt. Und Du kannst Dir so einen Server auch selbst aufsetzen.
BlackJack

@Zoja: Den letzten Abschnitt in Deinem Edit verstehe ich jetzt wieder nicht so wirklich. Die Daten kommen dann doch *sofort* aus Deiner Datenbank, denn wir hatten ja schon festgestellt das es Unsinnig ist die *jedes mal* wieder über GeoPy zu ermitteln.
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

BlackJack hat geschrieben:@Zoja: Den letzten Abschnitt in Deinem Edit verstehe ich jetzt wieder nicht so wirklich. Die Daten kommen dann doch *sofort* aus Deiner Datenbank, denn wir hatten ja schon festgestellt das es Unsinnig ist die *jedes mal* wieder über GeoPy zu ermitteln.
Ja hast vollkommen recht, ich bin einfach ein moron, hab noch einen edit.
BlackJack

@Zoja: Wenn es beim einstellen einen Timeout gibt, könnte man versuchen beim Zugriff auf Zimmer-Objekte die keine Koordinaten haben noch mal zu schauen. Oder man legt sich eine Queue mit Zimmern an, die noch keine Koordinaten haben und probiert regelmässig die zu füllen.
Antworten