加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl:perl获取GPS对应的百度经纬度及两点间距离计算

发布时间:2020-12-15 23:57:52 所属栏目:大数据 来源:网络整理
导读:package GPS;use LWP::Simple;use MIME::Base64;use Math::Trig qw(great_circle_distance deg2rad);require Exporter;our @ISA = qw(Exporter);our @EXPORT=qw(getBaiduPosXY getDistance);#our @EXPORT_OK=qw(getDistance);########################### 获
package GPS;

use LWP::Simple;
use MIME::Base64;
use Math::Trig qw(great_circle_distance deg2rad);

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT=qw(getBaiduPosXY getDistance);
#our @EXPORT_OK=qw(getDistance);


########################### 获取GPS转化百度经纬度 ############################
#	gps坐标的type=0
#	google坐标的type=2
#	baidu坐标的type=4
#	http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=经度&y=纬度&callback=BMap.Convertor.cbk_7594
sub getBaiduPosXY {
	my ($x,$y) = @_;
	my ($url,$content,$lat,$lon,@res);	
	
	$url = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4";
	$url .= "&x=$x&y=$y";
	$url .= "&callback=BMap.Convertor.cbk_7594";
	
	$content = get($url);
	($lat,$lon) = (decode_base64($1),decode_base64($2)) if($content=~m#x":"(.*?)","y":"(.*?)"#);
	@res = ($lat,$lon);
	return @res;
}

######################## 计算百度goole地图距离 ###############################
#   http://hi.baidu.com/shooke1/item/77570cffb3b52510d7ff8cb9	
#	球面距离公式
#	R*arccos(cos(lat1*pi()/180 )*cos(lat2*pi()/180)*cos(lng1*pi()/180 -lng2*pi()/180)+
#	sin(lat1*pi()/180 )*sin(lat2*pi()/180))
#	其中,R=6370996.81;//地球半径,pi()为圆周率π,(lng1,lat1),(lng2,lat2)分别是百度地图的两个经纬度,带入数值计算即可
#	$lat,$lon 是当前坐标
#	$_lat,$_lon 是目标坐标
sub getDistance {
	my ($lon,$_lon,$_lat) = @_;
	my $R = 6371.012;
	sub NESW { 
		deg2rad($_[0]),deg2rad(90 - $_[1]) 
	}
	my @L = NESW($lon,$lat);
	my @T = NESW($_lon,$_lat);
	
	my $distance = great_circle_distance(@L,@T,$R);
#	= 6371.012 * acos(
#			cos(acos(-1) / 180 * $lat) *
#            cos(acos(-1) / 180 * $_lat) *
#            cos(acos(-1) / 180 * $lon - acos(-1) / 180 * $_lon) +
#            sin(acos(-1) / 180 * $lat) *
#            sin(acos(-1) / 180 * $_lat))*1;
    return $distance;
}

1;

__END__
=pod

=head1 NAME

GPS Custom Module Map function
import: use lib "./";

=head1 getBaiduPosXY
	use GPS;
	my @pos=getBaiduPosXY(121.398189,31.23103447);
	
=head1 getDistance 
	use GPS;	
	my $distance = getDistance(121.398189,31.23103447,121.474797,31.223954);
	print $distance;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读