2013-03-31 66 views
0

这是从另一张海报。 (jpgunter)https://stackoverflow.com/users/1857927/jpgunterPerl得到的位置(经度+纬度),加上邮政编码

use strict; 
use LWP::Simple; # from CPAN 
use JSON qw(decode_json); # from CPAN 

sub getLatLong($){ 
    my ($address) = @_; 

    my $format = "json"; #can also to 'xml' 

    my $geocodeapi = "https://maps.googleapis.com/maps/api/geocode/"; 

    my $url = $geocodeapi . $format . "?sensor=false&address=" . $address; 

    my $json = get($url); 

    my $d_json = decode_json($json); 

    my $lat = $d_json->{results}->[0]->{geometry}->{location}->{lat}; 
    my $lng = $d_json->{results}->[0]->{geometry}->{location}->{lng}; 

    return ($lat, $lng); 
} 

它看起来是在做我想要什么,但是......有没有人能够解释,我把地址给运行它,哪里输出去了?

我必须从另一个文件中跑过大约5000个城市来进行我正在进行的“非学术性”项目,显然手动操作的想法是可怕的。在过去的7年里,我也只做过最小的perl,所以绝对有帮助。 我已经安装了LWP 6.04和JSON 2.53。 如果我可以使用输入文件,旋转它(通过邮编显示它)。 该行将在...“formatted_address”:“吉朗西维多利亚州3218,澳大利亚”, 只是不知道如何获得3218那里。

原帖是在这里... Get the Latitude and Longitude of an address using perl and Google's Geocode API

+1

检查服务条款;我的回忆是,该API只用于显示谷歌地图。无论如何,如果你做了5000个请求,你很可能会在你完成之前被谷歌阻止。 – ysth

+0

https://developers.google.com/maps/documentation/geocoding/#Limits – ysth

+0

谢谢,这实际上是真正有用的知道,因为我没有意识到..仍然查询是相关的,因为我希望能够做到以上。 –

回答

0

这与获得来自谷歌API的经度/纬度数据和返回这两个值的子程序的文件。但是,子程序没有被调用,所以脚本什么都不做。

以下更改到脚本的开头将得到命令行输入和数据返回给终端:

#!/usr/bin/perl 
use strict; 
use warnings; 
use LWP::Simple; # from CPAN 
use JSON qw(decode_json); # from CPAN 

# get command line input 
my $address = $ARGV[0]; 

# get latitude/longitude and output 
my ($lat, $long) = getLatLong($address); 
print "lat: $lat, long: $long\n"; 


sub getLatLong($){ 
    my ($address) = @_; 

    my $format = "json"; #can also to 'xml' 

... 

然后,您可以调用脚本如下:

$ long_lat_script.pl '25 Jackson street, Pretoria, South Africa' 

至于这个API的使用策略的评论,它取决于你想要使用它。使用此API时确实需要显示地图;但是,如果您在网站中需要这种数据,则允许(并由Google推荐)批量收集此类数据,而不是重复询问相同的数据。我曾经以类似的方式使用过这个API大约5000个地址。你可以阅读更多关于这here

相关问题