Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie funktioniert die Umkreissuche?

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie funktioniert die Umkreissuche?

    Hallo zusammen,

    da ich leider im Forum keine vernünftige Anleitung gefunden habe und die zugänglichen Demos (inkl. Backend-Zugang) keine Umkreissuche implementiert haben, stelle ich hier mal die Frage: Was benötigt man, um nach Eingabe von PLZ oder Ort eine TOP 10 Trefferliste zu erhalten. Der Radius ist egal, da wir immer 10 Stück anzeigen, sortiert nach Entfernung zur eingegebenen PLZ oder dem Ort.
    Ich konnte nach 2 Tagen Suche, keinen Beitrag entdecken der auch nur im Ansatz erklärt, wie man so etwas umsetzt.
    Klar benötigt man das Attribut "Geografische Daten". Aber wie verwende ich das?
    An einigen Stellen wird gesagt, es muss "adresse" heißen. In so manchem Codebeispielen heißt es aber "address".
    Muss ich die zusätzlichen Felder Land. Stadt, PLZ, etc benutzen, oder kann ich dafür auch eigene Attribute verwenden.
    Wie muss der Filter aussehen, wenn ich PLZ oder Ort abfragen möchte, aber keine Land. Ich weiß dass es hierfür eine skriptseitige Ergänzug geben muss, wo ich Deutschland dazu packe.

    Fragen über Fragen.
    Da unsere Adressdaten importiert sind, kann ich nicht einfach wild rumprobieren. Wenn sich an der Struktur etwas ändern muss, dann muss ich das genau wissen.

    Ich bin leider auch nicht sehr entspannt, da der Livegang nächste Woche ist und ich meine Zeit nicht mit rumprobieren verschleudern kann.


    Gruß Andy
    Zuletzt geändert von Ynda; 15.02.2018, 08:00.

  • #2
    0. Den Grund-CC entsprechend der Dokumentation anlegen.
    1. Ein Attribut vom Typ "Geografische Daten" anlegen und je nach Wunsch die optionalen Felder dazu wie Straße etc. -> benötigt werden allerdings nur das Standardfeld für die reale Koordinaten.
    2. Neue Einträge anlegen mit Koordinaten befüllen
    3. Einen Filter vom Typ "Umkreissuche" anlegen und einen min. und max. Wert für die Umkreisspanne angeben. Den Filter auf das in Punkt 1 angelegte Attribut zeigen lassen. Die Angabe eines Zentrums ist optional bzw. der 2. Modus des Filters. In diesem Fall wird keine Adresseingabe benötigt, sondern es wird immer im Umkreis des gesetzten Zentrums gesucht (vergleichbar mit Ebay-Kleinanzeigen und dem Standord des Benutzers)
    (entsprechend dem Backend-Hinweis das customcatalog_filter_geosearch Template auswählen)
    4. Liste-Modul mit entsprechendem Filterset anlegen
    5. Filter-Modul mit entsprechendem Filterset anlegen
    ---
    Eine Filterung nur mit Eingabe der PLZ oder nur Stadt benötigt immer ein Land!
    Das dt. PLZ-System ist identisch mit dem US-amerikanischen. Google wird dies bevorzugen, wenn kein Land mitgeteilt wird.
    Gleiches gilt für nur die Stadt. Es gibt z.B. auch ein Berlin in den USA.
    http://forum.premium-contao-themes.c...t-postleitzahl

    Alternativ schreibt man " Deutschland" direkt mit ins Template oder setzt es via JS ein.
    ---
    Einen fixen Radius kann man ebenfalls hardcodiert im Filter-Template hinterlegen. Das macht den Schieberegler obsolete.
    Das Template aus simplen <input> Feldern. Vergleichbar mit Contao bzw. allgemeinen HTML-Formularfeldern.
    Zuletzt geändert von Tim; 14.02.2018, 16:12.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Hi Tim,
      vielen Dank für Deinen Beitrag. Es ist schön, dass dieses Thema einmal zusammenhängend dokumentiert wurde. Im Detail fehlen natürlich noch ein paar Dinge, aber das bekommen wir sicher auch noch hin.
      Im wesentlichen habe ich genau das alles schon gemacht, aber ich bekomme immer noch keine Treffer.

      Wie muss denn zum Beispiel das Textfeld des Filters konfiguriert werden, in den man PLZ/Ort und Land einträgt?
      Die Maßeinheit des Schiebereglers sind km, oder?
      Kann ich außer PLZ, Ort und Land noch weitere Attribute in die Suche mit aufnehmen. Z.Bsp. nur ausgewiesene Fachbetriebe anzeigen oder ähnliches?

      Gruß Andy
      Zuletzt geändert von Ynda; 15.02.2018, 09:51.

      Kommentar


      • #4
        Die Umkreissuche arbeitet standardmäßig in KM.

        Das Filter-Template besteht aus simplen <input> Felder, durch die die Werte in das Formular übergeben werden. Der Radius ist ein input hidden Feld mit dem url-parameter (Namen) des Filters, standardmäßig durch den Regler befüllt.

        Kann ich außer PLZ, Ort und Land noch weitere Attribute in die Suche mit aufnehmen. Z.Bsp. nur ausgewiesene Fachbetriebe anzeigen oder ähnliches?
        Das hat für die Umkreissuche selbst keine Relevanz. Dies wären weitere autarke Filter.
        ---
        Die Browserconsole gibt Auskunft über die gefundenen Koordinaten. Google hat ein sehr starkes Limit für die freie Nutzung der Maps API.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Die Browserconsole hat mir für den Eintrag "70190 Stuttgart Deutschland" Geolocation: Center (-1,-1) Radius: 1000 ausgespuckt und keine Ergebnisliste.
          Wir haben ca. 650 Einträge mit nachweislich enthaltenen GEO-Koordinaten. Der Feldname für die Geokoordinaten heißt aktuell address und enthält noch ein Länderfeld address_country. Dort stehen DE, CH und AT drin.
          Das input Feld für die Eingabe von PLZ, Ort und Land heißt ort und ist vom Typ Textsuche. Bei den Filter-Einstellungen habe ich address, Ort (city) und Postleitzahl (zipcode) ausgewählt.

          B.t.w. Wo kann ich einen eigenen API-Key eintragen?

          Gruß Andy

          Kommentar


          • #6
            -1 -1 bedeudet der Google-Geocoder konnte die Adresse nicht dekodieren. Wahrscheinlich durch ein QUERY_LIMIT (siehe Log).
            Die Feldlogik sollte einmal korrekt aus dem Standard-Template abgeschaut werden. Sie richtet sich nach dem url-parameter bzw. Feldnamen.

            Angenommen das Feld hat den Alias: geodaten
            Dann wird im Filter standardmäßig darauf: geodaten=1000&geodaten_address=MeineAdresse

            Ja, google ist super strikt geworden in den letzten Wochen mit der kostenfreien Nutzung. Ich habe soeben eine neue CC Version in den Download gegeben, wo die Geocoder Url freidefiniert werden kann. Dort kann dann auch ein commercial bzw. api-key hinterlegt werden.
            http://forum.premium-contao-themes.c...0439#post10439
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Mein Fehler war, anzunehmen, dass es für die Eingabe von PLZ, Ort und Land ein eigenes Feld benötigt. Das steht ja schon hart codiert im Template drin. Wir benutzen das Standardtemplate.
              Jetzt bekomme ich immerhin schon mal eine Liste mit Treffern angezeigt.
              Problem ist jetzt aber, dass bei einem fixen Radius von 1000 km Treffer dabei sind, die nicht in der Nähe sind. Hier wäre eine aufsteigende Sortierung nach Entfernung notwendig.
              Kann ich die Entfernung auch ausgeben?

              Selbst bei einem Radius von 50 Km, bekomme ich eine wirre Liste mit keinerlei geografischen Ordnung. Dafür wird es wohl etwas geben.

              Gruß Andy
              Zuletzt geändert von Ynda; 15.02.2018, 12:16.

              Kommentar


              • #8
                Auf Antwort wartend habe ich mich mal der Kartendarstellung gewidmet und soweit auch hinbekommen. Leider ist das Handling mit starren Parametern etwas unbefriedigend.
                Als Kartenzentrum sind natürlich die eingegebenen Standortdaten (in GEO-Koordinaten umgerechnet natürlich) zu verwenden.
                Wie komme ich im Template an diese Standort-Informationen heran, bzw, gibt es da schon eine JS-Variable wo diese Information enthalten ist.
                Wird ja immerhin auf der JS-Konsole ausgegeben.

                Desweiteren und dafür gibt es im Forum ja schon einen Post, sollte der Kartenausschnitt an den gesetzten Radius angepasst werden. Sobald ich das neue Kartenzentrum auslesen kann, sollte das dann auch kein Problem sein.

                Gruß Andy

                Kommentar


                • #9
                  Ich möchte jetzt doch gerne wissen, wie ich im HTML-Template customcatalog_liste_googlemap_markers.html5 an die berechneten Längen und Breitengrade, sowie den gewählten Radius komme? Die Informationen sind grundsätzlich vorhanden, ich komme nur nicht an sie heran.

                  Die Informationen in der Session sind leider immer einen Aufruf zu spät, sprich ich bekomme keine aktuellen Infos.
                  Auch die Informationen zur geografischen Nähe zu meinem Standort fehlen mir noch, damit ich die Umkreissuche sinnvoll einsetzen kann.


                  Gruß Andy
                  Zuletzt geändert von Ynda; 15.02.2018, 16:45.

                  Kommentar


                  • #10
                    Nutze die findCoordinates Methode des Geodaten Attributes oder lade die Seite einmal neu, dann hast du eine aktuelle Session. Dafür kann man sich das ganze im CC Kern einmal anschauen, das ist alles frei einsehbar. Ein guter php Debugger zeigt einem auch Methoden von Objekten.

                    An das Attribut-Objekt je Feld im Liste-Template kommt man mit der attribute() Methode. Siehe: http://forum.premium-contao-themes.c...late-variablen

                    Die findCoordinates ist eine öffentliche Methode.
                    $arrGeo = $objGeoAttr->findCoordinates($strAddress); // Adresse z.B. aus GET Parameter vom Filter

                    ---
                    Eine Sortierung kann manuell im Liste-Template erfolgen oder besser, weil Paginations-sicher etc. mit einem richtigen Hook. Ich würde den prepareCatalog Hook empfehlen. Es wird die gesamte SQL Grundlage übergeben und kann frei manipuliert werden und eine Sortierung übergeben werden. (Vergleichbar mit Contao Models-Arrays)
                    $GLOBALS['CUSTOMCATALOG_HOOKS']['prepareCatalog']
                    ---
                    Seit 2.13.0 (siehe changelog) steht die findDistanceByCoords methode Bereit im Attribut. Diese berechnet die Distanz zweier Koordinaten via php. Was deutlich performanter ist als eine API Abfrage auf Google. Die Methode wurde im Laufe eines Auftrags ergänzt und wurde dort von mir für die Sortierung genutzt - war für User panroid aus dem oben von dir verlinkten Thread.
                    Zuletzt geändert von Tim; 16.02.2018, 07:53.
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Hi Tim,
                      danke für Deinen Post. Leider bin ich da nicht so Deiner Meinung. Die umgerechneten Geokoordinaten sind doch schon berechnet, da bemühe ich doch nicht noch einmal Google um mir dasselbe noch einmal zu berechnen. Das ist leider kein guter Programmier-Stil.
                      Einen Reload anstoßen, um die aktuelle Session zu bekommen?? Da passiert doch genau das gleiche. Die Geodatenabfrage wird vermutlich ein weiteres mal bei Google-Maps angestoßen, oder werden die Anfragen etwa gecached . Konnte ich soweit nicht erkennen.

                      Klar kann ich wegen jeder Frage, die ich mangels Dokumentation habe, im Quellcode nachschauen, aber ich kaufe doch eine Software um Zeit zu sparen und beim "jetzt kaufen" wird nicht darauf hingewiesen, dass ich Programmierer sein muss, um das Tool vernünftig zu verwenden.
                      Eine Umkreissuche kann eigentlich nicht ohne eine Distanzsortierung daherkommen. Wenn ich in einem Umkreis nach etwas suche, möchte ich doch wissen was am nächsten dran ist. Das würde ich eigentlich als Auswahlkriterium im Backend erwarten und jetzt bekomme ich eine Bastelanleitung von Dir.
                      Da sehe ich noch ne Menge Luft nach oben, mein Freund.

                      Gruß Andy

                      Kommentar


                      • #12
                        Ich lese hier heraus, dass du dich mit meinem Post überhaupt nicht auseinander gesetzt hast und auch nicht einmal in die Daten geschaut hast. Dann würde solche Fragen nicht auftauchen. Leider reicht es nicht Photoshop zu kaufen, um damit tolle Bilder zu machen.
                        Ich klinke mich hier aus - du kannst das alles viel besser als ich. Ich kann Dir nichts mehr beibringen.

                        http://www.premium-contao-themes.com

                        Kommentar

                        Lädt...
                        X