package Geo::Coder::Many::Bing;
use strict;
use warnings;
use base 'Geo::Coder::Many::Generic';
=head1 NAME
Geo::Coder::Many::Bing - Plugin for the Bing geocoder
=head1 VERSION
Version 0.02
=cut
our $VERSION = '0.02';
# Requires Geo::Coder::Bing 0.10 or above
sub _MIN_MODULE_VERSION { return '0.10'; }
=head1 SYNOPSIS
This class wraps Geo::Coder::Bing such that it can be used in
Geo::Coder::Many, by converting the results to a standard form.
Requires Geo::Coder::Bing >= 0.10
=head1 METHODS
=head2 geocode
Takes a location string, geocodes it using Geo::Coder::Bing, and returns the
result in a form understandable to Geo::Coder::Many
=cut
sub geocode {
my $self = shift;
my $location = shift;
my @raw_replies = $self->{GeoCoder}->geocode( location => $location );
my $http_response = $self->{GeoCoder}->response();
my $Response = Geo::Coder::Many::Response->new( { location => $location } );
my %convert = (
'High' => 0.9,
'Medium' => 0.5,
'Low' => 0.1,
'Unknown' => undef,
);
foreach my $raw_reply (@raw_replies) {
my $tmp = {
address => $raw_reply->{address}->{formattedAddress},
country => $raw_reply->{address}->{countryRegion},
latitude => $raw_reply->{point}->{coordinates}->[0],
longitude => $raw_reply->{point}->{coordinates}->[1],
precision => $convert{$raw_reply->{confidence}},
};
$Response->add_response( $tmp, $self->get_name());
}
$Response->set_response_code($http_response->code());
return $Response;
}
=head2 get_name
The short name by which Geo::Coder::Many can refer to this geocoder.
=cut
sub get_name { my $self = shift; return 'bing ' . $self->{GeoCoder}->VERSION; }
1;
__END__