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 获取位置(经度+纬度),加上邮政编码的主要内容,如果未能解决你的问题,请参考以下文章