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

Posted

技术标签:

【中文标题】Perl 获取位置(经度+纬度),加上邮政编码【英文标题】:Perl to get location (longitude+latitude), plus post codes 【发布时间】:2013-03-31 15:33:18 【问题描述】:

这是来自另一张海报。 (jpgunter)https://***.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

【问题讨论】:

查看服务条款;我的回忆是该 api 仅用于显示谷歌地图。无论如何,如果你做了 5000 次请求,你很可能在完成之前就被谷歌屏蔽了。 developers.google.com/maps/documentation/geocoding/#Limits 谢谢,这实际上非常有用,因为我还没有意识到这一点.. 查询仍然是相关的,因为我希望能够执行上述操作。 【参考方案1】:

这是一个带有子例程的文件,它从 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 的使用政策的 cmets,这取决于你想用它来做什么。使用此 API 时确实需要显示地图;但是,如果您在站点中需要此类数据,则允许(并由 Google 推荐)批量收集此类数据,而不是重复要求相同的数据。我曾经以类似的方式将这个 API 用于大约 5000 个地址。你可以阅读更多关于这个here的信息。

【讨论】:

以上是关于Perl 获取位置(经度+纬度),加上邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOs 中使用 CLGeoCoder 使用邮政编码/邮政编码获取纬度经度?

GeoCoder 使用地址获取经度和纬度

使用 iPhone 的纬度和经度进行反向地理编码

从纬度,经度获取邮政编码

从地理编码纬度和经度获取地址

如何使用谷歌地图 api 将邮政编码转换为地理位置(纬度和经度)?