您的位置:首页 > 其它

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

2014-05-21 15:44 330 查看
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,$lat,$_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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: