New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Umkreissuche: Behandlung von ungültigen Postleitzahlen, leeren und Nonsense Suchanfragen #105
Comments
Um die Umkreissuche einzuschränken kannst du weitere Ortseingabe im einem Verstecktem-Feld übergeben. Beim "Freizeitparks" Beispiel auf der Demoseite wird das Land ("Deutschland") zusätzlich zu der Postleitzahl mit übergeben. Damit soll eine ungültige PLZ abgefangen werden. Vor kurzem habe ich ein Bugfix hochgeladen, da wird ein Problem mit dem "Verstecktem-Feld" gelöst. Leere Suchanfrage werden vom Catalog Manager nicht berücksichtigt. Schließlich ist es ein Filter und keine Suche… Eine Option kann ich dennoch implementieren. Nonsense = leere Suchanfrage. Hier wäre eine Validierung ganz sinnvoll, denke ich. |
Hallo Alexander, Ich habe das mit dem versteckten Feld ausprobiert: Das macht keinerlei Unterschied. Der Request String für die API bleibt auch gleich und wie du in meinem Beispiel oben sehen kannst ist "Deutschland" ja auch schon Teil des Request Strings. Was sich allerdings durch einen deiner letzten Commits geändert zu haben scheint:
Okay, der Argumentation kann ich folgen. Eine Option wäre natürlich super. Ich habe versucht eine Validierung für das Feld zu aktivieren, aber das funktioniert nicht. Vielen Dank erstmal! |
Ich fände es gut, wenn bei ungültigen Postleitzahlen oder im Falle, dass kein Filterergebnis vorhanden ist, eine (frei definierbare) Meldung ausgegeben wird und der Focus der Karte stehen bleibt und nicht auf den Deutschland-Mittelpunkt gesetzt wird. |
So ganz funktioniert die Google API nicht. Wenn du "0000 Deutschland" abfragst, sagt Google: Um Postleitzahlen nach Gültigkeit zu prüfen ist die Google Api nicht geeignet. Hierfür benötigen wir einen anderen Service bzw. Datenbank mit allen möglichen Postleitzahlen. @Schmidty2 Die Meldung gibt es ja bereits. Nur es kommen immer irgendwelche Ergebnisse, da Google in den meisten Fällen Koordinaten zurück gibt. |
Ich hatte jetzt noch mal Zeit mir die Responses der Google API nach deinen Änderungen anzusehen. Ich bekomme bei der Suche nach "11111" manchmal keine Ergebnisse und manchmal eben doch noch "Eisenach". Das liegt daran, dass die Response leider bei gleicher Suchabfrage nicht immer identisch ist. {
"results" : [
{
"address_components" : [
{
"long_name" : "11111",
"short_name" : "11111",
"types" : [ "street_number" ]
},
{
"long_name" : "Germany Road",
"short_name" : "Germany Rd",
"types" : [ "route" ]
},
{
"long_name" : "Fenton",
"short_name" : "Fenton",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Tyrone Township",
"short_name" : "Tyrone Township",
"types" : [ "administrative_area_level_3", "political" ]
},
{
"long_name" : "Livingston County",
"short_name" : "Livingston County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Michigan",
"short_name" : "MI",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "48430",
"short_name" : "48430",
"types" : [ "postal_code" ]
},
{
"long_name" : "9467",
"short_name" : "9467",
"types" : [ "postal_code_suffix" ]
}
],
"formatted_address" : "11111 Germany Rd, Fenton, MI 48430, USA",
"geometry" : {
"location" : {
"lat" : 42.7156133,
"lng" : -83.7411554
},
"location_type" : "RANGE_INTERPOLATED",
"viewport" : {
"northeast" : {
"lat" : 42.7169622802915,
"lng" : -83.73980641970849
},
"southwest" : {
"lat" : 42.71426431970851,
"lng" : -83.74250438029151
}
}
},
"partial_match" : true,
"place_id" : "EicxMTExMSBHZXJtYW55IFJkLCBGZW50b24sIE1JIDQ4NDMwLCBVU0E",
"types" : [ "street_address" ]
}
],
"status" : "OK"
} {
"results" : [
{
"address_components" : [
{
"long_name" : "Germany",
"short_name" : "DE",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Germany",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 55.0815,
"lng" : 15.0418962
},
"southwest" : {
"lat" : 47.2701115,
"lng" : 5.8663425
}
},
"location" : {
"lat" : 51.165691,
"lng" : 10.451526
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 55.0815,
"lng" : 15.0418962
},
"southwest" : {
"lat" : 47.2701115,
"lng" : 5.8663425
}
}
},
"place_id" : "ChIJa76xwh5ymkcRW-WRjmtd6HU",
"types" : [ "country", "political" ]
}
],
"status" : "OK"
} Bei der ersten Response wird dann kein Ergebnis angezeigt, was aber nur daran liegt, dass die API da ein Ergebnis aus den USA zurück liefert und bei einem Umkreis von 25km dann natürlich nichts gefunden wird. Bei der zweiten Response wird dann wieder Deutschland richtig erkannt und entsprechend bei nicht valider Postleitzahl auf die geografische Mitte gemappt. Was ich nicht verstehe: Wie können überhaupt Suchergebnisse von der API zurück geliefert werden, wenn als Land fest "Deutschland" angegeben ist? |
Ich denke, google hat sich was dabei gedacht :) |
Ich habe mir jetzt noch mal die API Dokumentation bei Google angesehen (https://developers.google.com/maps/documentation/geocoding/intro?hl=de#ComponentFiltering) und dort ist mir aufgefallen, dass man den Parameter
Ich habe mir auch noch mal die Konfigurationsmöglichkeiten im Catalog Manager angesehen und in den Einstellungen meines Moduls vom Typ "Catalog Listenansicht" kann ich ja im Feld "Land" in der Legende "Umkreissuche-Einstellungen" eindeutig ein Land festlegen in dem von der Umkreissuche gesucht werden soll. In der aktuellen Fassung deiner Klasse Mein Vorschlag wäre also, dass WENN das Feld tl_module.catalogRadioSearchCountry gesetzt ist bzw. |
Vielen Dank für deine Mühe, dass werde ich nochmals prüfen und gegebenenfalls implementieren. |
Hallo Alexander,
wir sind beim durchtesten unserer Umkreissuche gerade auf ein paar Phänomene gestoßen.
Und zwar haben wir einfach mal eine Postleitzahl in das Suchfeld eingegeben von der wir wussten, dass sie tatsächlich nicht existiert. Also z.B. 74567.
Da würde man ja erwarten, dass man entsprechend entweder eine Fehlermeldung oder eben keine Ergebnisse angezeigt bekommt.
Dem ist aber nicht so: In unserem Fall bekommen wir einen Treffer zurück und zwar ein Ergebnis aus der Stadt Eisenach in Thüringen. Ich habe mir daraufhin mal die Request-Strings und deren Rückmeldung angeschaut, die an Google geschickt werden.
Hier mal zwei Beispiele, eins mit gültiger eins mit ungültiger Postleitzahl.
Ungültig:
https://maps.googleapis.com/maps/api/geocode/json?address=74567%2CDeutschland&key=AIzaSyCP87Cdoi4utRpu3AhY2l-zEF_PNBAEQEA&language=en®ion=2
Antwort:
Gültig:
https://maps.googleapis.com/maps/api/geocode/json?address=22767%2CDeutschland&key=AIzaSyCP87Cdoi4utRpu3AhY2l-zEF_PNBAEQEA&language=en®ion=2
Antwort:
In beiden Fällen werden ja Geo-Koordinaten von der Google API zurück geliefert, die dann vom Catalog Manager verarbeitet werden. Was die API nämlich offensichtlich macht ist, dass sie bei einer ungültigen Postleitzahl einfach den ungefähren Landesmittelpunkt (Land kennt sie ja) zurück liefert. Eisenach liegt nämlich echt ziemlich genau in der Mitte von Deutschland (wie ich gerade gelernt habe).
Ich frage mich, ob du es für möglich und sinnvoll hältst, diese Art von Ergebnissen abzufangen. Wenn man sich z.B. in den json Ergebnissen mal den Wert für den "types" Key ansieht, könnte man den u.U. abfragen und nur "postal_code" (für Postleitzahlen) und "locality" (für Ortsnamen) als gültig akzeptieren. Oder man schließt "country" aus?
Ich bin jetzt auch noch nicht so tief in das Thema eingestiegen. Mich interessiert natürlich auch deine Meinung dazu, kann ja sein, dass du an anderer Stelle auch schon mal mit dem Phänomen zu tun hattest.
Dazu kommen noch zwei weitere Fälle:
Leere Suchanfragen
Schickt man das Suchformular für die Umkreissuche leer ab, werden alle möglichen Ergebnisse zurückgeliefert. Dieses Verhalten würde ich eher nicht erwarten, sondern, dass dann keine Suchergebnisse zurückgeliefert werden. Ich habe das in der Funktion
getCords
nachverfolgt und festgestellt, dass in einem solchen Fall wohl auch gar kein Request an die Google API ausgeführt wird.Das sollte sich dann doch entsprechend auch in den Suchergebnissen mit einem leeren Ergebnis niederschlagen, oder?
Nonsense Suchanfragen
Schickt man z.B. einen Suchanfrage mit dem Begriff "ölkasdölkasd" ab, dann liefert die Google API folgendes JSON zurück:
Der Catalog Manager zeigt aber wieder alle Einträge an. Auch hier würde ich von einer leeren Ergebnisliste ausgehen.
Viele Grüße
Arno
The text was updated successfully, but these errors were encountered: