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 |
||
![]() |
![]() |
|
|