Perl获取位置(经度+纬度),加上邮政编码

时间:2013-03-31 15:33:18

标签: perl geolocation latitude-longitude postal-code

另一张海报有这个。 (jpgunter)https://stackoverflow.com/users/1857927/jpgunter

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”:“Geelong West VIC 3218,Australia”, 只是不确定如何在那里获得3218。

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

1 个答案:

答案 0 :(得分:0)

这是一个包含子程序的文件,该子程序从Google API获取long / lat数据并返回这两个值。但是,子程序没有被调用,所以脚本什么都不做。

对脚本开头的以下更改将从命令行获取输入并将数据返回到终端:

#!/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的更多信息。