Perl模块的存在是为了与谷歌地图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.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
答案是,地理编码器:: ::谷歌并未实施反向查找的经纬度参数。 所以你不能用它这一点。
然而,这将是非常简单的添加反向查找功能。
回答:
- 下载CPAN
Geo::Coder::Google
的对象。 - 导航你的方式来V3.pm对象。
- 放弃这一模块插入代码。
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/