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 から long/lat データを取得し、これら 2 つの値を返すサブルーチンを含むファイルです。ただし、サブルーチンは呼び出されていないため、スクリプトは何もしません。

スクリプトの先頭に次の変更を加えると、コマンド ラインから入力が取得され、データが端末に返されます。

#!/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 に答える