martes, noviembre 13, 2012

Calcular distancia entre dos ciudades con PERL

Como decía el otro día, necesito un programa que calcule distancias entre ciudades. No puedo ir a GOOGLE MAPS y hacerlo a mano porque hablamos de una tabla completa.

Hoy vamos a utilizar PERL.

Necesitamos descargar e instalar el módulo JSON. El sitio de descarga éste. Descargamos el fichero JSON-2.53.tar.gz. Con gunzip fichero.gz obtenemos el fichero JSON-2.53.tar. Luego con tar -xvf fichero.tar obtenemos el directorio que contiene los ficheros del módulo.

Luego compilamos el módulo:
  1. perl Makefile.PL
  2. make
  3. make test
  4. make install
 Y ahora podemos utilizarlo de la siguiente forma para acceder al API de GOOGLE MAPS:

#!/usr/bin/perl

use strict;
use warnings;

use JSON;

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

my $origin = "Vitoria-Gasteiz";
my $destination = "Bilbao";

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;
print $distance_kilometers . " kilometros\n";

El resultado de la ejecución:

perl distancia.pl
65.311 kilometros



Código fuente descargado de aquí, aunque se han hecho un par de modificaciones.

Más información y ejemplos en la documentación de Google aquí.

Saludos,

No hay comentarios: