NaN bei Berechnung nach Serverumzug?

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

  • NaN bei Berechnung nach Serverumzug?

    Hallöchen,

    ich stehe vor einem Problem, bei dem mir irgendwie die Logik fehlt.

    Ich bin kürzlich von einem bekannten Hoster aus Berlin zu einem anderen bekannten Hoster nach Montabaur umgezogen.

    Bei den Berliner Jungs funktionierte ein Script tadellos.
    Koordinaten werden aus einer DB geholt, und mittels der GetDistance Funktion aus der gmapper Klasse zu einer Entfernung zusammengerechnet.

    Nachdem ich aber umgezogen bin, macht das Script auf einmal Probleme, handelt es sich um kleine Distanzen bzw. wenige Koordinaten, funktioniert die Entfernungsberechnung. Handelt es sich aber um mehrere Koordinaten (~ 1000), sagt er mir als Ergebnis NaN.

    Bevor ich nun Code poste wollte ich fragen - nachdem mich google usw. nicht weiter gebracht hat, was das für grundlegende Ursachen haben kann.

    Vielen Dank im Voraus für Denkansätze,

    Boris

  • #2
    Ist die PHP-Version unterschiedlich?

    Ist der Prozessor im Server ein anderer (32bit/64bit)?

    Kommentar


    • #3
      Montabaur: PHP Version 4.4.9 (neu)
      Berlin: PHP Version 5.2.12 (alt)

      Zur CPU kann ich leider nichts sagen, der Begriff Serverumzug war meinerseits vielleicht auch etwas blöd gewählt, Providerwechsel hätte es besser getroffen, es handelt sich nämlich nur um ein Webhosting Paket.

      Kommentar


      • #4
        Zitat von Ghostrider28 Beitrag anzeigen
        Montabaur: PHP Version 4.4.9 (neu)
        neu??? PHP 4 ist seit 2 Jahren offiziell tot! Bitte vergiss PHP 4 und steig so schnell wie möglich auf PHP 5 um. Schon allein wegen der Sicherheit.

        Kommentar


        • #5
          .htaccess
          für 1und1

          Code:
          AddType x-mapp-php5 .php
          AddHandler x-mapp-php5 .php
          einfach ins root und fertig
          Bitte Beachten.
          Foren-Regeln
          Danke

          Kommentar


          • #6
            Bei der ****** Medien AG in Berlin konnte ich zwischen 4 und 5 switchen, bei *** Internet AG kann ich das scheinbar nicht.
            Daher habe ich mal eben die htaccess erweitert.

            Der Fehler mit der Berechnung = NaN erscheint aber weiterhin.

            Kann das andere Ursachen haben als die PHP version?

            Hier mal ein wenig Code.
            Wie gesagt, funktionierte vorher.

            Code:
                while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ) 
                {
                    $ser_time[] = $row['servertime'];
                    $c[] = $row['field_3']; 
                    $d[] = $row['field_4']; 
                    
                }
                    
                    for($i=1;$i<$counter-1;$i++)
                    
                         {
                               $x =  $c[$i];
                                $y =  $d[$i];
                               $punkte[]=array($x,$y);
                    
                         } 
                        
            $dist = $karte->getDistance($punkte);
            $dist = $dist/1000;

            Kommentar


            • #7
              Das Interessante wäre, was in der Methode getDistance() passiert.

              Kommentar


              • #8
                jop - die Vermutung liegt nahe, dass die Berechnung in Metern irgendwann oberhalb 1000 Orte einen Integer-überlauf (32 bit mit Vorzeichen, also max 2.14 milliarden) erzeugt ....

                also zeig mal getDistance

                und in welchem Format liegen die X- und Y-Koordinate in der Datenbank ?
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Kommentar


                • #9
                  Die Koordinaten kommen in folgender Form aus der Datenbank:

                  53.52175
                  8.10157

                  Die Funktion getDistance():

                  PHP-Code:
                  function getDistance($koord)
                      {
                          if (!
                  is_array($koord))
                          {
                              return 
                  false;
                          }

                          
                  $ent 0;
                          
                  $welt 6378.137// Erdradius, ca. Angabe

                          
                  foreach($koord as $key => $fetch)
                          {
                              if (isset(
                  $koord[$key 1]))
                              {
                                  
                  $erste_breite $koord[$key][0]; // lat
                                  
                  $erste_laenge $koord[$key][1]; // lon
                                  
                  $erste_breite_rad deg2rad($erste_breite);
                                  
                  $erste_laenge_rad deg2rad($erste_laenge);

                                  
                  $zweite_breite $koord[$key 1][0]; // lat
                                  
                  $zweite_laenge $koord[$key 1][1]; // lon
                                  
                  $zweite_breite_rad deg2rad($zweite_breite);
                                  
                  $zweite_laenge_rad deg2rad($zweite_laenge);

                                  
                  $dis acos(
                                      (
                  sin($erste_breite_rad) * sin($zweite_breite_rad)) +
                                      (
                  cos($erste_breite_rad) * cos($zweite_breite_rad) *
                                          
                  cos($zweite_laenge_rad $erste_laenge_rad))) * $welt;

                                  
                  $ent $ent $dis;
                              }
                          }
                          
                  $entfernung $ent 1000;
                          return 
                  round($entfernung5);
                      } 

                  Kommentar


                  • #10
                    ich fürchte fast die letzte Anweisung
                    [COLOR=#000000][COLOR=#006600][/COLOR][COLOR=#0000CC]$entfernung [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000CC]$ent [/COLOR][COLOR=#006600]* [/COLOR][COLOR=#0000CC]1000[/COLOR][COLOR=#006600];
                    wenn du im aufrufenden Programm sowieso wieder durch 1000 teilst, kannst du die auch rauslassen
                    [/COLOR][/COLOR]
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      Hm, dann verschwindet zwar das NaN, aber es kommt 0 heraus, wo eigentlich etwa 200 (km) herauskommen sollte.

                      Kommentar


                      • #12
                        kannst du deine getDistance-Funktion mal mit ein paar "echos" verschönern ...

                        damit du siehst, dass dein Array mit den Koords richtig abgearbeitet wird . und natürlich zur laufenden Berechnung der Entfernung nach jedem Rechenschritt...

                        außerdem - warum nimmst du nicht $fetch sondern rechnest wieder direkt mit dem urspünglichen Array (innerhalb des Foreach)
                        [font=Verdana]
                        Wer LESEN kann, ist klar im Vorteil!
                        [/font]

                        Kommentar


                        • #13
                          Kleine Info, bei der Funktion handelt es sich um eine fertige Funktion einer Klasse, die man im Internet herunterladen kann. Da sie bis zum Umzug funktionierte, habe ich auch dort nicht herumgepfuscht.

                          Nach der "Verschönerung" durch echo kam heraus:

                          Key:1204 Wert: 117.56026770155<br>
                          Key:1205 Wert: 117.56026770155<br>
                          Key:1206 Wert: 117.56026770155<br>
                          Key:1207 Wert: 117.56026770155<br>
                          Key:1208 Wert: 117.56026770155<br>
                          Key:1209 Wert: 117.56026770155<br>
                          Key:1210 Wert: 117.56026770155<br>
                          Key:1211 Wert: 117.68682378333<br>
                          Key:1212 Wert: 117.90697979517<br>
                          Key:1213 Wert: 117.97735465366<br>
                          Key:1214 Wert: 118.08191921342<br>
                          Key:1215 Wert: 118.08191921342<br>
                          Key:1216 Wert: 118.16759624081<br>
                          Key:1217 Wert: 118.32437878168<br>
                          Key:1218 Wert: NAN<br>
                          Key:1219 Wert: NAN<br>
                          Key:1220 Wert: NAN<br>
                          Key:1221 Wert: NAN<br>

                          Kommentar


                          • #14
                            Die Koordinaten müsste man auch noch wissen.

                            Kommentar


                            • #15
                              nun .. zu groß scheint der Wert tatsächlich nicht zu sein .. 118 km (und ein paar bruchstücke ) sind ja kaum der Rede wert ....

                              wie sehen denn ab Key 1218 die Bestandteile des Koords - Feldes aus ...

                              kann es sein, dass einer der Werte aus der Datenbank "müll" liefert?
                              [font=Verdana]
                              Wer LESEN kann, ist klar im Vorteil!
                              [/font]

                              Kommentar

                              Lädt...
                              X