2011-03-04 8 views
4

CPAN(http://metacpan.org/pod/Geo::Google v0.05)を使ってGeo :: Googleをインストールしようとしましたが、ほぼすべてのテストに失敗しました。私はここでhttp://matrix.cpantesters.org/?dist=Geo-Google+0.05をチェックし、このモジュールはがすべて失敗したことを確認しますGeo :: Googleが死んでいると思われ、テストに失敗しました。

これは放棄されたモジュールだと思われますが、私は私のPerlプログラムから2つのアドレス間の走行距離を計算する必要があります。何かアドバイス?

答えて

10

私は、不十分なモジュール(ゾイドベルグ)を回復しようとしています。あなたができることは、CPANtesterの結果を掘り下げて、何が間違っていたのかを調べることです。

Googleマップに公開されているAPIはありますが、simple web interfaceのものもあります。私はあなたの模範を模索しようとしますが、自分自身を始めるにはLWP::UserAgentまたはWWW::Mechanizeでいくつかのリクエストをしてから、答えを見つけるために結果を解析してみてください。

編集:ここでは例です。終わり近くで$dataは、上記のリンクで説明したJSON応答に含まれるデータのハッシュリファレンスです。私はまた、(最初の)ルートの合計距離を計算しました。

#!/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)[email protected];$m+=$_->{distance}{value}[email protected]{(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システムへの1つのライナーのポート:

perl -Mojo -E '$m+=$_->{distance}{value}[email protected]{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 
+0

おい、あなたは最高です! – JoelFan

+0

@Slurpie、一日の仕事のすべて:-P、実際には少し楽しいでした –

+0

これは素晴らしい、ありがとう!まさに私が探していたもの。メトリックを求めている人は、$ m * 0.6213e-3から* 0.6213e-3を削除してください。 APIはメトリック対帝国をサポートしているようです:https://developers.google.com/maps/documentation/distancematrix/#unit_systems – Nathan

関連する問題