Geo :: Google似乎死了,测试失败了,现在怎么样?

时间:2011-03-04 13:57:48

标签: perl google-maps cpan

我尝试使用CPAN(http://metacpan.org/pod/Geo::Google v0.05)安装Geo :: Google,几乎所有测试都失败了。我在这里查看http://matrix.cpantesters.org/?dist=Geo-Google+0.05并确认此模块未通过所有内容

它似乎是一个废弃的模块,但我需要计算我的Perl程序中2个地址之间的行车距离。有什么建议吗?

1 个答案:

答案 0 :(得分:10)

我正在尝试恢复一个维护不足的模块(Zoidberg),你可以做的最好的事情是挖掘CPANtesters的结果,看看出了什么问题才能尝试修复它。

那说谷歌地图有一个公共API,甚至一个simple web interface。我会尝试嘲笑你一个例子,但为了让自己开始尝试用LWP::UserAgentWWW::Mechanize做一些请求,然后解析结果以找到你的答案。

编辑:好的,这是一个例子。接近结尾$data是上面链接中描述的JSON响应中包含的数据的hashref。我还计算了(第一条)路线的总距离。

#!/usr/bin/perl

use strict;
use warnings;

use JSON;

use LWP::UserAgent;
my $ua = LWP::UserAgent->new();

my $origin = "60607";
my $destination = "60067";

my $site = 'http://maps.googleapis.com/maps/api/directions/';
my $mode = 'json';

my $page = $site . $mode . '?origin="' . $origin . '"&destination="' . $destination . '"&sensor=false';

my $response = $ua->get( $page );
my $json = $response->content();

my $data = decode_json $json;

my @legs = @{ $data->{'routes'}[0]{'legs'} };
my $distance_meters = 0;
foreach my $leg (@legs) {
    $distance_meters += $leg->{'distance'}{'value'};
}

my $distance_kilometers = $distance_meters / 1000;
my $distance_miles = $distance_kilometers * 0.62137119;
print $distance_miles . " Miles\n";

编辑:现在,因为我在周日下午感到无聊:

perl -e 'use JSON;use LWP::Simple;($s,$e)=@ARGV;$m+=$_->{distance}{value}for@{(decode_json get qq<http://maps.googleapis.com/maps/api/directions/json?origin="$s"&destination="$e"&sensor=false>)->{routes}[0]{legs}};printf"%.2f Miles\n",$m*0.6213e-3' 60607 60067

编辑:现在,一个班轮的一个端口到Mojolicious系统:

perl -Mojo -E '$m+=$_->{distance}{value}for@{g("http://maps.googleapis.com/maps/api/directions/json",form=>{origin=>shift,destination=>shift,sensor=>"false"})->json("/routes/0/legs")};printf"%.2f Miles\n",$m*0.6213e-3' 60607 60067