Mostrando entradas con la etiqueta googlemaps. Mostrar todas las entradas
Mostrando entradas con la etiqueta googlemaps. Mostrar todas las entradas

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,

lunes, noviembre 05, 2012

Problema del módulo Geo-Google (PERL)


CPAN es el repositorio de módulos de PERL (entre otras cosas). Ayer quería hacer un programita PERL que interrogue a Google Maps para calcular distancias entre dos ciudades.

Encontré un módulo que precisamente para hacer eso. Se llamaba GEO::GOOGLE

El caso es que para "coger destreza" en el desempaquetado (gunzip y tar), y el compilado de módulos:

perl Makefile.PL
make
make test
make install

Y sobre todo para saber identificar los errores y warnings que surgen a lo largo del proceso, decidí instalar cada dependencia a mano. En total instalé 23 módulos:

[root@xekun perl]# ls -la
total 100
drwxr-xr-x. 25 root  root  4096 Nov  5 09:04 .
drwxr-xr-x.  3 aitor aitor 4096 Nov  5 00:31 ..
drwxr-xr-x.  8 aitor aitor 4096 Nov  5 00:15 Compress-Raw-Bzip2-2.055
drwxr-xr-x.  9 aitor aitor 4096 Nov  5 00:06 Compress-Raw-Zlib-2.056
drwxr-xr-x.  5   501 games 4096 Nov  4 22:15 Digest-MD5-2.52
drwxr-xr-x.  5   501 games 4096 Nov  4 23:48 Encode-Locale-1.03
drwxr-xr-x.  5   501 games 4096 Nov  4 23:46 File-Listing-6.04
drwxr-xr-x.  5 root  root  4096 Nov  5 00:39 Geo-Google
drwxr-xr-x.  7   501 games 4096 Nov  5 00:22 HTML-Parser-3.69
drwxr-xr-x.  4   500   500 4096 Nov  4 23:08 HTML-Tagset-3.20
drwxr-xr-x.  5   501 games 4096 Nov  4 23:44 HTTP-Cookies-6.01
drwxr-xr-x.  5   501 games 4096 Nov  4 23:33 HTTP-Daemon-6.01
drwxr-xr-x.  5   501 games 4096 Nov  4 23:09 HTTP-Date-6.02
drwxr-xr-x.  5   501 games 4096 Nov  5 00:18 HTTP-Message-6.06
drwxr-xr-x.  5   501 games 4096 Nov  4 23:45 HTTP-Negotiate-6.01
drwxr-xr-x.  8 aitor aitor 4096 Nov  5 00:17 IO-Compress-2.055
drwxr-xr-x.  5 aitor aitor 4096 Nov  5 00:09 IO-HTML-0.04
drwx------.  5  1006   513 4096 Nov  5 00:27 JSON-1.12
drwxr-xr-x.  6   500   500 4096 Nov  5 00:29 JSON-2.53
drwxr-xr-x.  6   500   500 4096 Nov  5 00:32 JSON-PP-2.27200
drwxr-xr-x.  6   501 games 4096 Nov  4 23:47 libwww-perl-6.04
drwxr-xr-x.  5   501 games 4096 Nov  4 23:35 LWP-MediaTypes-6.02
drwxr-xr-x.  5   501 games 4096 Nov  4 23:46 Net-HTTP-6.03
drwxr-xr-x.  5   501 games 4096 Nov  5 00:19 URI-1.60
drwxr-xr-x.  5   501 games 4096 Nov  4 23:30 WWW-RobotRules-6.02


Bueno, total que quedó todo perfectamente instalado y funcionando, menos el dichoso módulo GEO::GOOGLE

Entonces se me ocurrió mirar los resultados de los testers del módulo y me encontré con esta desagradable sorpresa:



Como se puede ver en el enlace, no funciona prácticamente en ningun S.O. ni versión de PERL.

Lección aprendida: Antes de usar un módulo CPAN comprobar los resultados de los Testers.

Saludos,