Weltkarte erstellen (dauert ewig)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #31
    Ich habe ein Bild als Hintergund in einem Formular Imagebutton gehabt.
    Durch klick habe ich mir die x y Koordinaten in die DB gespeichern.


    Beim auslesen habe ich einfach das Bild als Hintergrund in einem DIV gepackt und mittels CSS die Links rübergepackt.
    Das war aber nur zum kennzeichnen einzelner Orte auf einer Karte und es waren nicht tausend.

    Und falls du perfomance Probleme hast, dann würde ich den berechnetet Quelltext in der DB zwischenspeichern. ^^
    Denn braucht er eine große schleife nicht jedes mal durchlaufen.
    Gut geraten ist halb gewußt.

    Kommentar


    • #32
      Zitat von Kropff Beitrag anzeigen
      wie sieht es eigentlich mit deinem hosting aus? ist das so ein billig-paket, wo zig tausend auftritte auf einem server liegen? oder arbeitest du derzeit noch lokal? wie wäre es mit einem preloader per javascript? einmal alle bilder laden (auch wenn es dauert) und dann sind sie im browsercache.

      peter
      um das nochmal aufzugreifen.
      gibs denn bei so nem "billig-hoster" dann eher die performance-probleme das es ewig lädt - aber nich am script liegt sondern halt am server?
      Mess with the Besth, die like the rest!

      Kommentar


      • #33
        Zeig doch mal den Code, der die Daten aus der DB holt und dann daraus das notwendige Markup generiert. Dann kann man mehr dazu sagen.
        Generell sehe ich das Performanceproblem eher clientseitig. Sofern die Daten schon gut vorbereitet gespeichert sind, so dass serverseitig nicht jedes Mal aufwendig gerechnet werden muss, sollte das auch bei jedem Billighoster flutschen.

        Kommentar


        • #34
          Bisher hab ichs so gemacht:

          in meiner db gibs ne tabelle "map" in der gibts für jede koordinate nen eintrag: x
          y
          art
          und ne 2. tabelle map_cfg in der dann die arten definiert sind mit ner farbe auf ner weltkarte (und noch mehr)

          PHP-Code:
                $im imagecreatetruecolor(MAP_X*WORLDMAP_GROESSEMAP_Y*WORLDMAP_GROESSE);
                
          imagefill ($im"0""0"imagecolorallocate($im,0,153,0)); // hintergrund gruen

                
          for ($x=1;$x<=MAP_X;$x++) {
                  for (
          $y=1;$y<=MAP_Y;$y++) {
                    
          $sql2 "SELECT art FROM map WHERE x = ".$x." AND y = ".$y.";";
                    
          $result2 mysql_query($sql2) OR die("Query: <pre>".$sql2."</pre>\n"."Antwort: ".mysql_error());
                    while(
          $row2 mysql_fetch_assoc($result2)) {
                      
          $sql3 "SELECT * FROM map_cfg WHERE art = '".$row2['art']."';";
                      
          $result3 mysql_query($sql3) OR die("Query: <pre>".$sql3."</pre>\n"."Antwort: ".mysql_error());
                      while(
          $row3 mysql_fetch_assoc($result3)) {
                          
          imagefilledrectangle($im, ($x-1)*WORLDMAP_GROESSE, ($y-1)*WORLDMAP_GROESSE, ($x-1)*WORLDMAP_GROESSE+WORLDMAP_GROESSE, ($y-1)*WORLDMAP_GROESSE+WORLDMAP_GROESSEfarbe($row3['weltkarte'], $im));
                      }
                    }
                  }
                }

                
          imagepng($imMAP_BILDPFAD."worldmap.png");
                
          imagedestroy($im);

                echo 
          "<img src=".MAP_BILDPFAD."worldmap.png?".date("U").">"
          ach und die funktion farbe:
          PHP-Code:
            function farbe($var "000000"$im) {
              
          $r hexdec(substr($var02));
              
          $g hexdec(substr($var22));
              
          $b hexdec(substr($var42));
              
          $farbe imagecolorallocate($im$r$g$b);
              return 
          $farbe;
            } 
          Mess with the Besth, die like the rest!

          Kommentar


          • #35
            Oweia! Mach dich mal zum Thema JOIN schlau!

            Kommentar


            • #36
              ja gut daran liegts doch aber nicht mit der performance...

              hier mit join:

              PHP-Code:
              $sql2 "SELECT * FROM map INNER JOIN map_art ON map.art = map_art.art WHERE map.x = ".$x." AND map.y = ".$y.";"
              wie gesagt bei 50x50 gehts schneller - bei 200x200 dauerts eig schon ewig.
              das doch alles mist



              edit: hier nochma komplett zur übersicht:
              PHP-Code:
              for ($x=1;$x<=MAP_X;$x++) {
                for (
              $y=1;$y<=MAP_Y;$y++) {

                  
              $sql2 "SELECT * FROM map INNER JOIN map_art ON map.art = map_art.art WHERE map.x = ".$x." AND map.y = ".$y.";";
                  
              $result2 mysql_query($sql2) OR die("Query: <pre>".$sql2."</pre>\n"."Antwort: ".mysql_error());
                  while(
              $row2 mysql_fetch_assoc($result2)) {
                    
              imagefilledrectangle($im, ($x-1)*WORLDMAP_GROESSE, ($y-1)*WORLDMAP_GROESSE, ($x-1)*WORLDMAP_GROESSE+WORLDMAP_GROESSE, ($y-1)*WORLDMAP_GROESSE+WORLDMAP_GROESSEfarbe($row2['weltkarte'], $im));
                  }
                }

              Zuletzt geändert von Besth; 08.06.2009, 23:27.
              Mess with the Besth, die like the rest!

              Kommentar


              • #37
                guck zum beispiel mal hier:
                Worldmap (zoom auf 5 stellen)
                wie hat der das gemacht das das so schnell geht?
                Mess with the Besth, die like the rest!

                Kommentar


                • #38
                  Zitat von Besth Beitrag anzeigen
                  ja gut daran liegts doch aber nicht mit der performance...
                  Doch, daran liegt es! Die Anzahl der DB-Abfragen hängt bei dir von der Dimension des Bildes ab. Das ist Unsinn.
                  Hole dir alle Daten mit einem JOIN vor der Schleife!

                  Merke: Niemals DB-Abfragen in Schleifen; das bringt dich um!

                  Kommentar


                  • #39
                    achsoooo
                    ohne schleife
                    kopf -> tisch

                    ja ok jetzt ist das problem weg ^^ *lol*
                    hab jetzt nur noch ne sql und keine for's mehr
                    klappt tausend mal schneller. das bild ist eigentlich sofort da.
                    danke ^^
                    Mess with the Besth, die like the rest!

                    Kommentar


                    • #40
                      Verwende übrigens kein SELECT *, sondern selektiere genau die Spalten, die du haben willst.

                      Kommentar


                      • #41
                        weil?
                        ist das auch noch nen ticken schneller oder wie?
                        Mess with the Besth, die like the rest!

                        Kommentar


                        • #42
                          Zitat von Besth Beitrag anzeigen
                          weil?
                          ist das auch noch nen ticken schneller oder wie?
                          jepp!

                          peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar


                          • #43
                            Naja; Sollte die Frage nicht eher sein, wie's DB-Seitig aussieht!?

                            Welche DB-Abfragen verwendest du!? Miss mal die Microtime und verrat' uns wie lange die DB-Geschichte dauert....
                            WHILE (!$asleep) { $sheep++; }

                            Kommentar

                            Lädt...
                            X