| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

03-09-2010, 10:02
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
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
|

03-09-2010, 10:55
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.212
|
|
Ist die PHP-Version unterschiedlich?
Ist der Prozessor im Server ein anderer (32bit/64bit)?
|

03-09-2010, 11:24
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
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.
|

03-09-2010, 11:26
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.212
|
|
Zitat:
Zitat von Ghostrider28
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.
|

03-09-2010, 11:27
|
|
Wyveres
Registrierter Benutzer
|
|
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
|
|
.htaccess
für 1und1
Code:
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
einfach ins root und fertig
|

03-09-2010, 11:39
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
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;
|

03-09-2010, 12:43
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.212
|
|
Das Interessante wäre, was in der Methode getDistance() passiert.
|

03-09-2010, 12:46
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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 ?
__________________
Wer LESEN kann, ist klar im Vorteil!
|

03-09-2010, 13:14
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
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($entfernung, 5); }
|

03-09-2010, 13:21
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
ich fürchte fast die letzte Anweisung
$entfernung = $ent * 1000;
wenn du im aufrufenden Programm sowieso wieder durch 1000 teilst, kannst du die auch rauslassen
__________________
Wer LESEN kann, ist klar im Vorteil!
|

03-09-2010, 13:25
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
Hm, dann verschwindet zwar das NaN, aber es kommt 0 heraus, wo eigentlich etwa 200 (km) herauskommen sollte.
|

03-09-2010, 13:27
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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)
__________________
Wer LESEN kann, ist klar im Vorteil!
|

03-09-2010, 13:39
|
|
Ghostrider28
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 65
|
|
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>
|

03-09-2010, 13:43
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.212
|
|
Die Koordinaten müsste man auch noch wissen.
|

03-09-2010, 13:44
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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?
__________________
Wer LESEN kann, ist klar im Vorteil!
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|