0

这是另一张海报上的。(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。

原帖在这里... 使用 perl 和 Google 的 Geocode API 获取地址的纬度和经度

4

1 回答 1

0

这是一个包含从 Google 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 个地址。您可以在此处阅读更多相关信息。

于 2013-03-31T21:23:19.017 回答