2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 23:06:37 +00:00

UConv: use great_circle_distance()

git-svn-id: https://svn.fhem.de/fhem/trunk@19686 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2019-06-22 18:24:56 +00:00
parent ddbf4d33d2
commit c89552d55f

View File

@ -12,15 +12,15 @@ use POSIX;
use utf8; use utf8;
use Math::Trig; use Math::Trig;
use Math::Trig ':pi';
use Math::Trig ':radial';
use Math::Trig ':great_circle';
use Scalar::Util qw(looks_like_number); use Scalar::Util qw(looks_like_number);
use Time::HiRes qw(gettimeofday); use Time::HiRes qw(gettimeofday);
use Time::Local; use Time::Local;
#use Data::Dumper; #use Data::Dumper;
my $DEG = pi / 180.0;
my $RAD = 180. / pi;
sub GetSeason (;$$$); sub GetSeason (;$$$);
sub _GetSeasonPheno ($$;$$); sub _GetSeasonPheno ($$;$$);
sub _ReplaceStringByHashKey($$;$); sub _ReplaceStringByHashKey($$;$);
@ -800,7 +800,7 @@ sub mi2km($;$) {
} }
################################# #################################
### Angular conversions ### Plane angle conversions
### ###
# convert direction in degree to point of the compass # convert direction in degree to point of the compass
@ -993,19 +993,8 @@ sub distance($$$$;$$) {
if ( $lat1 eq $lat2 && $lng1 eq $lng2 ); if ( $lat1 eq $lat2 && $lng1 eq $lng2 );
my $aearth = 6378.137; # GRS80/WGS84 semi major axis of earth ellipsoid my $aearth = 6378.137; # GRS80/WGS84 semi major axis of earth ellipsoid
my $km = great_circle_distance( deg2rad($lat1), pi/2. - deg2rad($lng1),
$lat1 *= $DEG; deg2rad($lat2), pi/2. - deg2rad($lng2), $aearth );
$lng1 *= $DEG;
$lat2 *= $DEG;
$lng2 *= $DEG;
my $dlat = $lat2 - $lat1;
my $dlng = $lng2 - $lng1;
my $a =
sin( $dlat / 2. ) * sin( $dlat / 2. ) +
cos($lat1) * cos($lat2) * sin( $dlng / 2. ) * sin( $dlng / 2. );
my $c = 2. * atan2( sqrt($a), sqrt( 1. - $a ) );
my $km = $aearth * $c;
return _round( return _round(
( (