Catalog und Google Maps verknüpfen (z.B. mit dlh_googlemaps)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • nummer19
    Contao-Nutzer
    • 17.08.2010
    • 2

    #1

    Catalog und Google Maps verknüpfen (z.B. mit dlh_googlemaps)

    Hallo,

    ich stehe momentan vor dem Problem, Katalogeinträge in irgendeiner Weise mit Google Maps zu verknüpfen, so dass diese später als "Karte der Katalogobjekte" angezeigt werden können.

    Die Wege dahin sind sicherlich vielfältig - aus Gründen der schnellen Umsetzbarkeit habe ich aber vor dies mit Hilfe von bereits verfügbaren Modulen zu machen. Der Katalog bildet die Datenbasis, und für Google Maps habe ich mal dlh_googlemaps auserkoren, da es mit dem Template für dynamische Icons im Prinzip alles mitbringt.

    Mein konkretes Problem ist nun die beiden Dinge zusammen zu bringen. Zum einen müssten Daten aus dem Katalog idealerweise geocodiert werden (aus Gründen der Usability) zum anderen fehlt mir trotz langer Suche hier im Forum der Hinweis wie ich Daten aus "fremden" Tabellen in einem Template verarbeiten kann...

    Ich geb dazu mal ein Beispiel, als Basis dient das Template für glh_googlemaps, das hier (http://www.contao-community.de/showt...ps-Modul-0.1.4) beschrieben wird. Dort wird übrigens auch der Katalog als mögliche Quelle erwähnt.

    HTML-Code:
    <script type="text/javascript">
    //<![CDATA[
    
    mapdata = new Array();
    mapdata['dlh_googlemap_ID'] = new Array();
    mapdata['dlh_googlemap_ID']['marker'] = new Array();
    
    mapdata['dlh_googlemap_ID']['marker'][0] = new Array();
    mapdata['dlh_googlemap_ID']['marker'][0]['coords'] = '47.2,-2.6';
    mapdata['dlh_googlemap_ID']['marker'][0]['icon'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['icon_position'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['icon_size'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['shadow'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['shadow_size'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['infotext'] = 'Dieser Marker ist<br />dynamisch eingefügt worden!';
    mapdata['dlh_googlemap_ID']['marker'][0]['info_position'] = '';
    mapdata['dlh_googlemap_ID']['marker'][0]['autoinfo'] = false;
    
    mapdata['dlh_googlemap_ID']['marker'][1] = new Array();
    mapdata['dlh_googlemap_ID']['marker'][1]['coords'] = '47.5,-2.6';
    mapdata['dlh_googlemap_ID']['marker'][1]['icon'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['icon_position'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['icon_size'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['shadow'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['shadow_size'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['infotext'] = 'Noch ein freier Text';
    mapdata['dlh_googlemap_ID']['marker'][1]['info_position'] = '';
    mapdata['dlh_googlemap_ID']['marker'][1]['autoinfo'] = false;
    
    //]]>
    </script>
    Ich würde nun im Prinzip gerne die Elemente aus dem Katalog auslesen, diese bei Google Geocodieren lassen und dann als Marker einfügen. Mir fehlt aber einfach das Wissen, ob es z.B. möglich ist auf Katalog-Elemente zuzugreifen (z.B. in der Art $catalog = this->catalog..

    Mich würde es freuen, wenn mir jemand einen Schubser in die richtige Richtung geben könnte - evtl. ist das Ganze ja auch für mehrere Leute hier interessant.

    Merci
    Florian
  • Nils Riel
    Contao-Fan
    • 19.06.2009
    • 730

    #2
    Wäre es für dich akzeptabel die Geo-Daten alle über das googlemaps Modul laufen zu lassen? Wenn ja könntest du jedes Katalog-Item mit einer Map verbinden - etwas ähnliches habe ich hier beschrieben
    http://www.contao-community.de/showt...2038#post82038

    Kommentar

    • nummer19
      Contao-Nutzer
      • 17.08.2010
      • 2

      #3
      Im Prinzip wäre das schon mal ein möglicher Einstieg.
      Es hätte aber zur Folge, dass die Benutzer später zuerst ein Modul anlegen sollen, was wieder mehr (unerwünschte) Komplexität mit sich bringt. Außerdem wäre nach wie vor das Problem der Darstellung auf einer Karte vorhanden. Oder versteh ich das falsch?

      Kommentar

      • cubano
        Contao-Nutzer
        • 10.09.2009
        • 107

        #4
        Ich habe es mit dlh_googlemaps so gelöst:

        1. Im Katalog ein Feld für die GoogleMap-Koordinaten hinzugefügt (diese werden pro Objekt manuell eingefügt).

        2. Modul "Googlemaps" erstellt (mit den Koordinaten für den Kartenauschnitt, Zoom, usw..)

        3. Template catalog_simple ergänzt mit dem Javascript aus dem Template dynicons (mapdata).

        4. Modul Katalogliste mit dem angepassten Template erstellt
        Zuletzt geändert von cubano; 20.08.2010, 18:20.

        Kommentar

        • pandroid
          Contao-Fan
          • 15.08.2009
          • 316

          #5
          Hallo Cubano,

          könntest Du bitte Deine Lösung nochmal etwas konkreter erklären. Ich zähle eher zu den Pixelschubsern und habe ein wenig Probleme damit, das Script richtig in das Template catalog_simple zu integrieren.

          Vielen Dank.

          P.Android
          LG
          PAndroid

          Kommentar

          • cubano
            Contao-Nutzer
            • 10.09.2009
            • 107

            #6
            Hallo pandroid

            Bin auch ein Pixelschubser, konnte es aber nach langer Recherche in den Foren auch lösen ;-)


            Schritt 1. und 2. sollten glaub klar sein..

            Hier das angepasste Template für die Katalogliste:

            PHP-Code:
            <?php if (count($this->entries)): ?>
            
            <?php 
              $mark = 0;
            ?>
            
            <script type="text/javascript">
            <!--//--><![CDATA[//><!--
            
            mapdata = new Array();
            mapdata['dlh_googlemap_20'] = new Array();
            mapdata['dlh_googlemap_20']['marker'] = new Array();
            
            <?php foreach ($this->entries as $entry): ?>
            
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>] = new Array();
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['coords'] = '<?php echo $entry[data]['googlemap']['value']; ?>';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['icon'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['icon_position'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['icon_size'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['shadow'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['shadow_size'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['infotext'] = '<?php echo $entry[data]['title']['value']; ?>';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['info_position'] = '';
            mapdata['dlh_googlemap_20']['marker'][<?php echo $mark; ?>]['autoinfo'] = false;
            
            <?php $mark++; ?>
            <?php endforeach; ?>
            //--><!]]>
            </script>
            
            <?php endif; ?>
            Statt der 20 musst du deine eigene dlh_googlemap ID verwenden.

            Danach erstellst du einen Artikel, fügst zuerst das Modul Katalogliste und darunter das Modul Googlemaps ein. Beim Template dynicons habe ich das auskommentierte Javascript entfernt.

            Gruss cubano

            Kommentar

            • pandroid
              Contao-Fan
              • 15.08.2009
              • 316

              #7
              Hallo cubano,

              vielen Dank für Deine Rückmeldung. Irgendwie will es nicht wirklich bei mir funktionieren, meine Karte bleibt leer, obwohl ich glaube, alles nach Deinen Vorgaben gemacht zu haben.
              1. Katalog um ein Feld "googlemap" (bei mir Textfeld) erweitert, Koordinaten eingetragen
              2. Modul Googlemap angelegt und die allgemeinen Parameter (Größe, Zoom etc.) festgelegt. Als Template googlemaps_dynicon ausgewählt.
              3. Im Template googlemaps_dynicon das auskommentierte Script entfernt.
              4. Das Template catalog_simple mit Deinem Code ersetzt.
              5. Ein Modul Katalogliste angelegt und das angepasste Template catalog_simple ausgewählt
              6. Artikel anlegen und zuerst die Katalogliste, dann Googlemap als Module nacheinander einfügen.


              Laut Quellcode scheint das Script zu arbeiten. Es legt für jede Adresse einen neuen Eintrag an, jedoch fehlen die Koordinaten aus der Datenbank.

              Habe ich irgendwo etwas übersehen oder falsch gemacht?

              Grüße
              PAndroid
              LG
              PAndroid

              Kommentar

              • cubano
                Contao-Nutzer
                • 10.09.2009
                • 107

                #8
                Hallo pandroid

                Falls dein Spaltenname in der Datenbank (wo du die Koordinaten einträgst) nicht "googlemap" lautet, musst du ihn anpassen (['dein_spaltenname'] statt ['googlemap']).

                PHP-Code:
                <?php echo $entry[data]['googlemap']['value']; ?>
                Ist das Feld mit den Koordinaten im Modul Katalogliste auf "sichtbar" gestellt?

                Gruss cubano

                Kommentar

                • pandroid
                  Contao-Fan
                  • 15.08.2009
                  • 316

                  #9
                  Das Feld war nicht sichtbar eingestellt. Jetzt habe ich die Markierungen. Und nachdem ich auch noch "Markierungen in die Karte einfügen" im Googlemap-Modul eingestellt habe, sogar mit Textbox.

                  Prima. Herzlichen Dank für die schnelle Hilfe!

                  PS: Wie hast Du die Standardmarkierung für das Kartenzentrum entfernt?

                  Gruß
                  PAndroid
                  LG
                  PAndroid

                  Kommentar

                  • cubano
                    Contao-Nutzer
                    • 10.09.2009
                    • 107

                    #10
                    Schön dass es geklappt hat ;-)

                    Ohne Kartenzentrum wird die Googlemap wohl nicht funktionieren...?
                    Ich habe den Ausschnitt so gewählt, dass alle Markierungen auf einmal ersichtlich sind...

                    Gruss cubano

                    Kommentar

                    • Gassi
                      Contao-Fan
                      • 18.11.2009
                      • 436

                      #11
                      Hi,
                      ich habe es auch versucht nachzubauen. Funktioniert eigentlich - nur das bei mir nur 1 Punkt immer angezeigt wird, obwohl es 2 sein sollten.
                      mein Quelltext sieht so aus:
                      Code:
                      <script type="text/javascript">
                      <!--//--><![CDATA[//><!--
                      
                      mapdata = new Array();
                      mapdata['dlh_googlemap_33'] = new Array();
                      mapdata['dlh_googlemap_33']['marker'] = new Array();
                      
                      
                      mapdata['dlh_googlemap_33']['marker'][0] = new Array();
                      mapdata['dlh_googlemap_33']['marker'][0]['coords'] = '43.8687324, 11.2529013';
                      mapdata['dlh_googlemap_33']['marker'][0]['icon'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['icon_position'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['icon_size'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['shadow'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['shadow_size'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['infotext'] = '<a href="index.php/fewo-detailasnicht/items/ferienwohnung-1.html" title="Die Details des Eintrags ansehen">Ferienwohnung 1</a>';
                      mapdata['dlh_googlemap_33']['marker'][0]['info_position'] = '';
                      mapdata['dlh_googlemap_33']['marker'][0]['autoinfo'] = false;
                      
                      
                      mapdata['dlh_googlemap_33']['marker'][1] = new Array();
                      mapdata['dlh_googlemap_33']['marker'][1]['coords'] = '44.4942191, 11.3464815';
                      mapdata['dlh_googlemap_33']['marker'][1]['icon'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['icon_position'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['icon_size'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['shadow'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['shadow_size'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['infotext'] = '<a href="index.php/fewo-detailasnicht/items/ferienhaus-1.html" title="Die Details des Eintrags ansehen">Ferienhaus 1</a>';
                      mapdata['dlh_googlemap_33']['marker'][1]['info_position'] = '';
                      mapdata['dlh_googlemap_33']['marker'][1]['autoinfo'] = false;
                      
                      //--><!]]>
                      </script>
                      Und das modul später dann:
                      Code:
                      div class="dlh_googlemap block" id="dlh_googlemap_33" style="width:450px;height:300px;display:block;"></div>
                      <script type="text/javascript">
                      //<![CDATA[
                      if (typeof(mapdata) == 'undefined') {
                      	mapdata = new Array();
                      }
                      if (typeof(mapdata['dlh_googlemap_33']) == 'undefined') {
                      	mapdata['dlh_googlemap_33'] = new Array();
                      }
                      if (typeof(mapdata['dlh_googlemap_33']['marker']) == 'undefined') {
                      	mapdata['dlh_googlemap_33']['marker'] = new Array();
                      }
                      if (typeof(mapdata['dlh_googlemap_33']['zoom']) == 'undefined') {
                      	mapdata['dlh_googlemap_33']['zoom'] = '6';
                      }
                      if (typeof(mapdata['dlh_googlemap_33']['coords']) == 'undefined') {
                      	mapdata['dlh_googlemap_33']['coords'] = '43.7687324, 11.2569013';
                      }
                      //]]>
                      </script>
                      <script src="http://maps.google.com/maps?file=api&v=2&key=&sensor=false&hl=de" type="text/javascript"></script>
                      <script type="text/javascript">
                      //<![CDATA[
                      function loaddlh_googlemap_33() {
                      	if (GBrowserIsCompatible()) {
                      		var dlh_googlemap_33 = new GMap2(document.getElementById("dlh_googlemap_33"));
                      					dlh_googlemap_33.addControl(new GSmallMapControl());
                      							dlh_googlemap_33.addControl(new GMapTypeControl());
                      									dlh_googlemap_33.removeMapType(G_HYBRID_MAP);
                      								dlh_googlemap_33.setMapType(G_NORMAL_MAP);
                      		coords = mapdata['dlh_googlemap_33']['coords'].split(',');
                      		dlh_googlemap_33.setCenter(new GLatLng(coords[0],coords[1]), 1*mapdata['dlh_googlemap_33']['zoom']);
                      Was mache ich falsch?

                      Gruss Gassi

                      Kommentar

                      • cubano
                        Contao-Nutzer
                        • 10.09.2009
                        • 107

                        #12
                        hmmm...keine ahnung...
                        verwendest du denn auch das template mod_dlh_googlemaps_dynicons.tpl?

                        Kommentar

                        • Gassi
                          Contao-Fan
                          • 18.11.2009
                          • 436

                          #13
                          Hi,

                          habe es nun zum laufen bekommen. Das problem war wohl der Titel der Einträge. Diese bestehen bei mir aus links auf das Objekt. Diese waren mit Anführungszeichen - und das hat sich nicht vertragen.

                          Aber nun hab ich das Problem - das ich das Kartenzentrum als icon mittendrin habe - das völlig überflüssig ist.

                          Wie kriegst man das weg? Frage kam ja eh schon - weiss das jemand - das stört voll und verwirrt....

                          Gruss Gassi

                          Kommentar

                          • Nikolas
                            Contao-Fan
                            • 22.08.2009
                            • 493

                            #14
                            Hat denn schon mal jemand versucht aus Adressfeldern (Straße, Hausnummer, PLZ, Ort, Land) die im Katalog eingerichtet sind über das dlh_googlemaps Modul die Koordinaten zubestimmen und diese dann entsprechend in die Google Maps einzupflegen?

                            Ich möchte für jedes Katalog-Item eine eigene Map mit dem entsprechenden Marker ausgeben. Da die Einträge über das Frontend geschehenwäre es schön, wenn direkt aus den angegeben Adressen die Koordinaten ermitteln werden und automatisiert eine entsprechende Map erstellt würde.

                            Hat jemand so etwas schon mal probiert?

                            Gruß
                            Nikolas

                            Kommentar

                            • christian
                              Alter Contao-Hase
                              • 15.06.2009
                              • 1039

                              #15
                              Hi Nikolas,

                              mit der neuen Version des Moduls geht die Einbindung einfacher, da Du im Prinzip nur noch ein verändertes Katalog-Template brauchst, was egal an welcher Stelle ausgegeben wird.

                              Was die Adressermittlung angeht, sehe ich fast schwarz. Grund ist, dass Du über deren API bei Google "nachfragen" musst, wie die Koordinaten sind - was auch nicht immer klappt.

                              Du kannst aber ja ggf. versuchen, die Funktion in der Datei dlh_googlemaps/dca/tl_dlh_googlemaps.php zu nutzen, die das im Modul erledigt.

                              Grüße,

                              Christian
                              Contao-Partner am Niederrhein
                              Templating - Komplettservice - Erweiterungen
                              Infos: http://delahaye.de

                              Kommentar

                              Lädt...