代码之家  ›  专栏  ›  技术社区  ›  Matt Williams

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

  •  0
  • Matt Williams  · 技术社区  · 11 年前

    这是另一张海报上的。(杰贡特) 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”上:“吉隆西部VIC 3218,澳大利亚”, 只是不知道如何把3218送到那里。

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mauritz Hansen    11 年前

    这是一个带有子例程的文件,该子例程从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时确实需要显示地图;然而,如果你在网站上需要这些数据,可以(谷歌也建议)批量收集这些数据,而不是重复要求相同的数据。我曾经以类似的方式将此API用于大约5000个地址。你可以阅读更多关于这方面的内容 here .