WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Problem med Long/Lat uträkningar (https://www.wn.se/forum/showthread.php?t=1974)

lorens 2004-04-05 17:28

Hejsan...

Jag försöker räkna ut avståndet mellan två Long/Lat punkter men får inte fram avstånden som jag bör få fram! Vet inte vad jag gör fel...

Koden är baserad på följande formel: http://jan.ucc.nau.edu/~cvm/latlon_formula.html
(Fungerande avståndsräknare av samma person finns på http://jan.ucc.nau.edu/~cvm/latlongdist.html

Koden jag använder är följande:

Kod:

        // Define variables for the calculation
        $dist = 0;        // Distance between source/destination
        $rad_km = 6378; // Earth Radius in kilometers
        $rad_smi = 3963.1;        // Earth Radius in statue miles
        $rad_nmi = 3443.9;        // Earth Radius in nautical miles

        // CONVERT LAT/LONG TO RADIANS!!!!!!!!!!!!!!!!!!!!!!!!!!!1
/*
Source Latitude: 373700N -- 37.6166666667
Source Longitude: 1222200W -- 122.366666667
Destination Latitude: 484400N -- 48.7333333333
Destination Longitude: 022300E -- 2.38333333333
*/
        $slat_deg = 37;
        $slat_min = 37;
        $slat_sec = 0;
        $slat_ns = "N";
        $slon_deg = 122;
        $slon_min = 22;
        $slon_sec = 0;
        $slon_we = "W";
        $dlat_deg = 48;
        $dlat_min = 44;
        $dlat_sec = 0;
        $dlat_ns = "N";
        $dlon_deg = 2;
        $dlon_min = 23;
        $dlon_sec = 0;
        $dlon_we = "E";

        $slat_dec = $slat_deg + ( ( $slat_min + ( $slat_sec / 60 ) ) / 60 );
        $slon_dec = $slon_deg + ( ( $slon_min + ( $slon_sec / 60 ) ) / 60 );
        $dlat_dec = $dlat_deg + ( ( $dlat_min + ( $dlat_sec / 60 ) ) / 60 );
        $dlon_dec = $dlon_deg + ( ( $dlon_min + ( $dlon_sec / 60 ) ) / 60 );
        if( $slat_ns == "S" OR $slat_ns == "s" ) {
 $slat_dec = $slat_dec * -1;
        }
        if( $dlat_ns == "S" OR $dlat_ns == "s" ) {
 $dlat_dec = $dlat_dec * -1;
        }
        if( $slon_we == "W" OR $slon_we == "w" ) {
 $slon_dec = $slon_dec * -1;
        }
        if( $dlon_we == "W" OR $dlon_we == "w" ) {
 $dlon_dec = $dlon_dec * -1;
        }
        $slat_rad = deg2rad( $slat_dec );
        $slon_rad = deg2rad( $slon_dec );
        $dlat_rad = deg2rad( $dlat_dec );
        $dlon_rad = deg2rad( $dlon_dec );

        echo "<p>slat: $slat_dec, slon: $slon_dec,".
 " dlat: $dlat_dec, dlon: $dlon_dec</p>";
        echo "<p>slat (rad): $slat_rad, slon (rad): $slon_rad,".
 " dlat (rad): $dlat_rad, dlon (rad): $dlon_rad</p>";

        $dist = acos(cos($slat_rad)*cos($dlat_rad)*cos($slon_rad)*cos($dlon_rad) + cos($slat_rad)*sin($dlat_rad)*cos($slon_rad)*sin($dlon_rad) + sin($slat_rad)*sin($slon_rad)) * $rad_km;
        echo "<p>Distance (Rad): $dist</p>";

        //        Arccos[
        // Cos[a1] Cos[b1] Cos[a2] Cos[b2] +
        // Cos[a1] Sin[b1] Cos[a2] Sin[b2] +
        // Sin[a1] Sin[a2]
        //        ] * r
        // Testar ett annat sätt att skriva koden, ingen skillnad såklart!
        $dist2 = acos(
 ( cos( $slat_rad ) * cos( $dlat_rad ) * cos( $slon_rad ) * cos( $dlon_rad ) ) +
 ( cos( $slat_rad ) * sin( $dlat_rad ) * cos( $slon_rad ) * sin( $dlon_rad ) ) +
 ( sin( $slat_rad ) * sin( $slon_rad ) )
 ) * $rad_km;
        echo "<p>Distance 2 (Rad): $dist2</p>";

        // Testar Decimal istället för Radianer (det är fel, jag vet)
        $dist3 = acos(
 ( cos( $slat_dec ) * cos( $dlat_dec ) * cos( $slon_dec ) * cos( $dlon_dec ) ) +
 ( cos( $slat_dec ) * sin( $dlat_dec ) * cos( $slon_dec ) * sin( $dlon_dec ) ) +
 ( sin( $slat_dec ) * sin( $slon_dec ) )
 ) * $rad_km;
        echo "<p>Distance 3 (Dec): $dist3</p>";

Jag får fram följande resultat:
Citat:


Distance (Rad): 16021.2979554

Distance 2 (Rad): 16021.2979554

Distance 3 (Dec): 4920.09586293

Det jag bör få, enligt kalkylatorn på sidan jag nämde ovan är:

Citat:

Distance Calculation Results


Distance between 37 37' 0"N 122 22' 0"W and 48 44' 0"N 2 23' 0"E is
8987.2353 km

This calculation assumes the earth is a perfect sphere
with a radius of 6378.0 km

Någon som kan förklara vad jag gör fel?

Tacksam för svar

Mvh Lorens

Per 2004-04-05 18:55

Jag har inte läst din kod nu, men ett vanligt fel vid den här typen av beräkningar är att man mixar radianer och grader. Dubbelkollat det?

Om jag hinner ska jag försöka kika på koden senare (om du inte lyckas lösa det vill säga).

lorens 2004-04-05 19:08

Tack, jag har skrivit om koden från början och nu fått kod som funkar... Dags att göra den lite finare :)

Jonas 2004-04-07 07:03

Citat:

Originally posted by lorens@Apr 5 2004, 15:08
Tack, jag har skrivit om koden från början och nu fått kod som funkar... Dags att göra den lite finare :)
Kan du inte posta koden färdigkommenterad?
Vad värde gör osv.

Skulle vara intressant att kolla på.

Anders 2004-04-07 13:03

Citat:

Ursprungligen postat av MaStEr_Pr
Citat:

Ursprungligen postat av lorens
Tack, jag har skrivit om koden från början och nu fått kod som funkar... Dags att göra den lite finare :)

Kan du inte posta koden färdigkommenterad?
Vad värde gör osv.

Skulle vara intressant att kolla på.

Du hittar diskussionen i detta forum.

lorens 2004-04-07 16:57

Citat:

Ursprungligen postat av MaStEr_Pr
Citat:

Ursprungligen postat av lorens
Tack, jag har skrivit om koden från början och nu fått kod som funkar... Dags att göra den lite finare :)

Kan du inte posta koden färdigkommenterad?
Vad värde gör osv.

Skulle vara intressant att kolla på.

Om du vill kan jag post'a färdiga funktionen här också?


Alla tider är GMT +2. Klockan är nu 16:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson