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
|