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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |