tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
516
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Primus852 Primus852 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    51
    Hallo,

    ich glaube das ist etwas tricky, ich versuche das mal so einfach wie möglich zu erklären.
    Im Internet habe ich diesen Code gefunden:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    
    function facesLoadMarkers(showNew) {
     
      // Show loading image.
      //Popups.addOverlay();
      Popups.addLoading();
     
      var countArgument = showNew ? "/1" : "";
      // Load map markers.
      $.getJSON("faces_map/list" +  countArgument, function(data) {
     
      
        var marker;
        var lastKey;
        var markers = []; // This array is sent to the clusterer.
        var markerIcon;
     
        // var start = (new Date).getTime(); /// benchmarking
     
        // Loop through each marker.
        $.each(data, function (key, item) {
     
          // Save marker info to central map data.
          faces.markerInfo[key] = item;
     
          // Check node type and taxonomy term and choose marker icon.
          markerIcon = faces.icons.defaultIcon; // By default.
          if (item.type == 'measure_post') {
            switch (item.tid) {
              case 1:
                markerIcon = faces.icons.measureIcon1;
                break;
              case 2:
                markerIcon = faces.icons.measureIcon2;
                break;
              case 3:
                markerIcon = faces.icons.measureIcon3;
                break;
              case 4:
                markerIcon = faces.icons.measureIcon4;
                break;
              default:
                markerIcon = faces.icons.defaultIcon;
            }
          }
    //      elseif () {
    //        // Node type specific icons here.
    //      }
     
          // Create this marker.
          marker = new GMarker(new GLatLng(item.lat, item.lng), {title:item.title, icon:markerIcon});
          markers.push(marker);
     
          lastKey = key;
     
          // Listen for click event.
          GEvent.addListener(marker, 'click', function() {
            facesDisplayMarker(key, this);
          });
     
        });
        // var diff = (new Date).getTime() - start; /// benchmarking
        // alert(diff); /// benchmarking
     
        // Add markers to the map.
        // start = (new Date).getTime(); /// benchmarking
        faces.mc.addMarkers(markers);
        // diff = (new Date).getTime() - start; /// benchmarking
        // alert(diff); /// benchmarking
     
        // If requested, show the new marker.
        if (showNew) {
          facesDisplayMarker(lastKey, marker, true);
        }
     
        // Remove loading image.
        //Popups.removeOverlay();
        Popups.removeLoading();
     
        // Set the marker counter.
        faces.markerCount += markers.length;
        var count = facesFormatCounter(faces.markerCount);
        $("#sidebar-right .counter").each(function() {
          $(this).children(".counter-1").addClass("counter-num-" + count.a).children("span").text(count.a);
          $(this).children(".counter-2").addClass("counter-num-" + count.b).children("span").text(count.b);
          $(this).children(".counter-3").addClass("counter-num-" + count.c).children("span").text(count.c);
          $(this).children(".counter-4").addClass("counter-num-" + count.d).children("span").text(count.d);
        });
     
      });
     
    }

    Dieser dient dazu, verschiedene Marker auf einer GoogleMap zu setzen und diese ggf. zusammenzuführen.
    Das eigentliche Problem ist, das es keinen Support mehr für das Script gibt und ich nicht weis, wo die Details für die Marker herkommen, sprich das hier:

    Code :
    1
    2
    3
    
    var countArgument = showNew ? "/1" : "";
      // Load map markers.
      $.getJSON("faces_map/list" +  countArgument, function(data) {

    Ich bin was Javascript und gerade JSON betrifft absoluter Anfänger. Könnt ihr, nur anhand dessen was das Script braucht, mir sagen, welche Daten ich in meiner DB haben muss?
    Ich habe theoretisch eine mySQL DB mit LAT und LNG, doch wie bekomme ich die in dieses Script?
    Soweit ich das verstanden habe, dient JSON ja dafür, die Marker nach und nach zu laden, nicht alle x-Tausend auf einmal, sprich nur bei 'click'.

    Ist das verständlich was ich meine, wie gesagt, da ich keine Ahnung in diesem Bereich habe, kann ich vermutlich nichtmal vernünftig erklären was ich möchte.

    Ich hoffe ihr könnt mir trotzdem helfen.

    Danke

    PrimuS

    //EDIT Ich habe eine Seite gefunden, die das Script nutzt, wenn ich aber "http://www.mittmatt.nu/karta/sites/default/modules/mittmatt_map/list" anstatt "faces_map/list" benutze kommt ein "permission denied", liegt das an meinem Hoster, an seinem oder am Browser, FF zeigt kein Fehler aber auch keine Marker...
    Geändert von Primus852 (21.11.10 um 04:35 Uhr) Grund: Ergänzung
     

  2. #2
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.960
    Wenn du den Pfad von http://www.mittmatt.nu/karta/sites/d...tmatt_map/list zu faces_map/list änderst, dann heißt das letztendlich auch, dass du die verarbeitende Datei auf deinem eigenen Server haben muss. Dementsprechend dient das "Permission denied" eher als Signal dafür, dass die Datei nicht existiert, als wirkliches Zugriffsverweigern.

    Ich weiß auch nicht, wie weit dein Verständnis für JSON ist, aber du brauchst definitiv noch eine Datei, beispielsweise PHP, welche die Daten aus der Datenbank ausliest, sie serverseitig in JSON umwandeln und die Daten dann ausgibt, damit du dann in deinem JavaScript-Skript auf diese Datei verweisen kannst.

    Was muss in deiner Datenbank existieren?
    Folgende Spalten werden verwendet:
    • type => item.type
    • lat => item.lat
    • lng => item.lng
    • title => item.title
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  3. #3
    Primus852 Primus852 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    51
    Danke schonmal für deine Antwort,
    2 Fragen abe ich noch:
    Wie sieht die Umwandlung in JSON denn aus?
    PHP-Code:
    $sql mysql_query("SELECT title, type, lat, lng FROM my_db");

        while (
    $row mysql_fetch_array($sql)) {
              
               
    // Umwandlung in JSON
            

    und welche Datei wird denn in "faces_map/list" ausgeführt und was macht das hier:
    Code :
    1
    
    var countArgument = showNew ? "/1" : "";

    Vielen Dank

    LG

    PrimuS
     

  4. #4
    CPoly CPoly ist gerade online Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    1. http://php.net/manual/en/function.json-encode.php
    Darf man auch benutzen, wenn man JSON nicht kennt

    2. Könnte man auch so umschreiben
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    
    var countArgument;
    if(showNew) {
        countArgument = "/1";
    }
    else {
        countArgument = "";
    }

    Was allerdings semantisch dahinter steckt, kann ich dir nicht sagen, da ich nicht weiß, wie diese veränderte URL serverseitig ausgewertet wird. Vermutlich irgendein Ja/Nein Flag. Es würde vielleicht helfen zu sehen, wer "facesLoadMarkers()" aufruft und vor allem mit welchem Parameter.
     

  5. #5
    Primus852 Primus852 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    51
    Also es gibt zwei verschiedene Aufrufe einen mit facesLoadMarkers() ohne Parameter, einen mit facesLoadMarkers(true), dieser liegt aber in einem anderen Script in Zusammenhang mit den Popups auf der Map, damit setze ich mich auseinander wenn ich Marker habe

    Ich wusste nicht das es dafür sogar eine PHP-Funktion gibt, wenn ich die Doku richtig verstehe, dann muss das so aussehen:
    PHP-Code:
    $sql mysql_query("SELECT title, type, lat, lng FROM my_db");

        while (
    $row mysql_fetch_array($sql)) {
              
            echo           
    json_encode($row);
         } 
    Ich kann das gerade nicht testen, kein Zugang von hier, aber das Prinzip stimmt?

    Und im "list" Ordner liegt dann die PHP mit diesem Code, speichere ich das Ergebnis ab oder reicht der Aufruf der PHP? Wie gesagt JSON ist absolutes Neuland. Warum ist der Aufruf aber nicht "faces_map/list/abfrage.php" ?
     

  6. #6
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.960
    So wie das Skript aussieht, müsste es wohl eher so aussehen:
    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    
    $result = mysql_query('SELECT title, type, lat, lng FROM my_db');
    $data = array();
     
    while($row = mysql_fetch_array($result)) {
      $data[] = $row;
    }
    echo json_encode($data);

    Nun zu deiner zweiten Frage: vermutlich ist die URL faces_map/list, weil in dem Verzeichnis eine Datei namens index.php liegt oder weil die URL mit mod_rewrite verändert wurde.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  7. #7
    Primus852 Primus852 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    51
    Wow, vielen Dank, das klappt hervorragend, JSON ist was tolles

    Könnte sich das hier:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    function facesDisplayMarker(nid, marker, zoomIn) {
     
      // Display the info window if the data is already loaded.
      if (faces.markerInfo[nid].created) {
        facesShowInfoWindow(nid, marker);
      }
      else {
        // Load marker data.
        $.getJSON("js/faces_map/load/json.php" + nid, function(data) {
          $.each(data, function (key, item) {
            // Combine this items's properties with existing marker info.
            $.each(item, function(propKey, property) {
              faces.markerInfo[key][propKey] = property;
            })
            // Create measure name from term ID.
            var tid = faces.markerInfo[key].tid;
            if (tid) {
              faces.markerInfo[key].measure = faces.measures[tid];
            }
            else {
              faces.markerInfo[key].measure = "";
            }
            var branch = faces.markerInfo[key].branch;
            if (!branch) {
              faces.markerInfo[key].branch = "";
            }
            
            if (key == nid) {
              if (zoomIn) {
                // Move to marker and set a zoom level where the marker will not be clustered.
                faces.map.setCenter(marker.getLatLng(), 11);
              }
              facesShowInfoWindow(nid, marker);
            }
          });
        });
      }
    }

    nochmal jemand anschauen und mir sagen, was für Items aus der DB ich da brauche? Das ist das InfoFenster wenn ich auf einen Marker klicke (oder?) Brauche ich da eine 2. Tabelle (mit welchen Infos) oder kann ich die Tabelle mit den Koords einfach um die gewünschten Teile erweitern? ZoomIn klappt übrigens, was nicht geht ist
    Code :
    1
    
    facesShowInfoWindow(nid, marker);

    Danke auf jeden Fall schonmal bis hier her!
     

  8. #8
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.960
    Man müsste wissen, was in der Funktion drin steckt, denn so pauschal kann man das nicht sagen, weshalb die Funktion nicht ihrem Zweck entsprechend funktioniert.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  9. #9
    Primus852 Primus852 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    51
    Hallo,

    beser spät als nie, habe an dem Script gearbeitet und eine eigene Lösung für's Load gefunden.
    Vielen Dank für eure Hilfe

    cheers

    PrimuS
     

Ähnliche Themen

  1. Google Maps "ReverseGeocoding"-Bsp. auf mehrere Maps anwenden
    Von jbender im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 30.03.10, 21:06
  2. Google Maps api
    Von Aurora-One im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 01.02.10, 21:15
  3. Google Maps API
    Von walle_89 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 08.09.09, 10:15
  4. Antworten: 8
    Letzter Beitrag: 17.08.09, 17:01
  5. Google Maps
    Von weissi im Forum PHP
    Antworten: 12
    Letzter Beitrag: 03.02.09, 08:07