2013-01-09 57 views
1

存在Perl模块以便与Google Maps API进行交互。代码如下:使用Perl和Google Maps API进行反向地理编码

use Geo::Coder::Google; 
$geocoder = Geo::Coder::Google->new(); 
@location = $geocoder->geocode(location => '1600 Pennsylvania Ave. Washington DC USA'); 

网站来源:http://search.cpan.org/~arcanez/Geo-Coder-Google-0.11/lib/Geo/Coder/Google/V2.pm

不过,我需要从坐标,以解决中去。即使这意味着在PERL中使用不同的方法,那么这又如何呢?请注意,我尝试了OpenMaps API,但它不准确。谷歌地图似乎好多了。

+0

反向地理编码需要一个'latlng'-参数代替'location'参数。您必须按照加入和发送latlng参数的方式修改脚本。 –

回答

0

答:

  1. 和下载CPAN Geo::Coder::Google对象。
  2. 导航您的方式到V3.pm对象。
  3. 将此模块放入代码中。

sub reverseGeocode {my $self = shift;

my %param; 
if (@_ % 2 == 0) { 
    %param = @_; 
} else { 
    $param{location} = shift; 
} 



my $location = $param{location} 
    or Carp::croak("Usage: reverseGeocode(location => \$location)"); 

if (Encode::is_utf8($location)) { 
    $location = Encode::encode_utf8($location); 
} 

my $uri = URI->new("http://$self->{host}/maps/api/geocode/json"); 
my %query_parameters = (latlng => $location); 
$query_parameters{language} = $self->{language} if defined $self->{language}; 
$query_parameters{region} = $self->{region} if defined $self->{region}; 
$query_parameters{oe} = $self->{oe}; 
$query_parameters{sensor} = $self->{sensor} ? 'true' : 'false'; 
$uri->query_form(%query_parameters); 
my $url = $uri->as_string; 

if ($self->{client} and $self->{key}) { 
    $query_parameters{client} = $self->{client}; 
    $uri->query_form(%query_parameters); 

    my $signature = $self->make_signature($uri); 
    # signature must be last parameter in query string or you get 403's 
    $url = $uri->as_string; 
    $url .= '&signature='.$signature if $signature; 
} 

就用这样的:

my $location = $geocoder->reverseGeocode(location => '40.7837366863403,-73.9882784482727'); 

然后你就可以访问返回的对象,像这样:

print $location->{formatted_address}; 

要查看的详细部分地址请参考以下链接作为指导: https://developers.google.com/maps/documentation/geocoding/

1

答案是,Geo :: Coder :: Google没有实现latlng参数进行反向查找。所以你不能用它。

但是,添加反向查找功能会非常简单。

3

Geo :: Coder :: Google的维护人员接受了我的补丁,因此该模块现在支持反向地理编码(从版本0.12开始)。

实施例使用:

use Geo::Coder::Google; 
$geocoder = Geo::Coder::Google->new(apiver => 3); 
$location = $geocoder->reverse_geocode(latlng => '37.778907,-122.39732'); 

参见在文档:http://metacpan.org/pod/Geo::Coder::Google::V3

相关问题