2010-10-02 4 views
5

J'utilise le module Geo :: Coder :: Many perl & pour obtenir des résultats étranges. Lorsque je définis Google comme fournisseur, les résultats s'affichent correctement. Toutefois, la définition du fournisseur sur Bing inverse les valeurs de longitude &. Par exemple:Géocodage .... ai-je fait quelque chose de mal?

use Geo::Coder::Google; 
use Geo::Coder::Bing; 
use Geo::Coder::Many; 
use Geo::Coder::Many::Util qw(country_filter); 

# Create the Geo::Coder::Many object, telling it to use a 'weighted random' 
# scheduling method 
my $options = { 
    scheduler_type => 'WRR', 
}; 
my $geocoder_many = Geo::Coder::Many->new($options); 


# Create and add a geocoder 
my $Locatorize = Geo::Coder::Google->new(apikey => 'yur Key'); 
my $Locatorize_options = { 
    geocoder => $Locatorize, 
    daily_limit => 2500, #google has a 2,500 limit/day 
}; 
$geocoder_many->add_geocoder($Locatorize_options); 


my $result = $geocoder_many->geocode( 
    { 
     location => '1600 Amphitheatre Parkway Mountain View, CA 94043' 
    } 
); 

if (defined $result) { 
    print "Longitude: ",  $result->{longitude},  "\n"; 
    print "Latitude: ",  $result->{latitude},  "\n"; 
} 
else { 
    print "Failed to geocode!\n"; 
} 

Cela renverra (correctement):

Longitude: -122,085099 Latitude: 37,422782

Quand je change le fournisseur de Bing, les choses vont mal tourné:

my $WhereIzIt = Geo::Coder::Bing->new(key => 'Yur key'); 
my $WhereIzIt_options = { 
    geocoder => $WhereIzIt, 
    daily_limit => 4000, 
}; 
$geocoder_many->add_geocoder($WhereIzIt_options); 

Renvoie

Longitude: 37.42317 6 Latitude: -122.085962

Bing renvoie systématiquement les résultats à l'envers? Comment pourrais-je changer cela dans le module?

+0

J'ai informé l'auteur du module par e-mail, mais comment puis-je faire le correctif moi-même? – kristen

Répondre

10

En Geo/Coder/Many/Bing.pm, trouver les lignes:

longitude => $raw_reply->{point}->{coordinates}->[0], 
latitude => $raw_reply->{point}->{coordinates}->[1], 

et échanger 0 et 1:

longitude => $raw_reply->{point}->{coordinates}->[1], 
latitude => $raw_reply->{point}->{coordinates}->[0], 

Ce bogue dans Geo-Coder-Many, pas Geo :: Coder :: Bing. Assurez-vous que vous avez signalé le bogue et cette correction au right author.

+0

+1: c'est juste excellent, vous avez trouvé que ... – dawg

+0

Ce bug est corrigé dans [Geo-Coder-Many] (http://search.cpan.org/dist/Geo-Coder-Many/) 0.14, qui a été libéré hier. – cjm

Questions connexes