FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Nykomling
|
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>"; Citat:
Citat:
Tacksam för svar Mvh Lorens |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Supermoderator
|
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).
__________________
www.ip2nation.com (ip till land) |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Tack, jag har skrivit om koden från början och nu fått kod som funkar... Dags att göra den lite finare
![]() |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Vad värde gör osv. Skulle vara intressant att kolla på. |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Supermoderator
|
Citat:
|
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Nykomling
|
Citat:
|
||
![]() |
![]() |
Svara |
|
|