Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何后处理坐标、纬度、经度等。。。。在检索数据之后?_Perl_Geocoding_Cpan - Fatal编程技术网

Perl 如何后处理坐标、纬度、经度等。。。。在检索数据之后?

Perl 如何后处理坐标、纬度、经度等。。。。在检索数据之后?,perl,geocoding,cpan,Perl,Geocoding,Cpan,当使用Geo::Coder:Google时,从地址到lat/lon的映射会起作用,反之亦然 但输出不适合直接访问具体字段,尤其是在将lat/lon转换为地址时 根据我的调试日志: loc由lat 48.308472/lon 14.284578——{012地址{012[0]{012 long_名称“Nibelungenbrücke”、{012短名称“B129”、{012类型[#012[0]“route”{012 223}、{012 012 long#名称“lande”,#012短名称“Landst

当使用
Geo::Coder:Google
时,从地址到lat/lon的映射会起作用,反之亦然

但输出不适合直接访问具体字段,尤其是在将lat/lon转换为地址时

根据我的调试日志:

loc由lat 48.308472/lon 14.284578——
{012地址{012[0]{012 long_名称“Nibelungenbrücke”、{012短名称“B129”、{012类型[#012[0]“route”{012 223}、{012 012 long#名称“lande”,#012短名称“Landstraße”,#012类型[#012[0]“邻里”,#012[1]“政治”#012]#012},#012[2]{012长名称“Innenstadt”,#012短名称“Innenstadt”,#012类型[#012亚地方性”,#012[1]“政治性的”#012]#012},#012[3]{012 long#u name“Linz”、#012 short#u name“Linz”、#012类型[#012[0]“地方性的”、#012[1]“政治性的”#012}、#012 012[4]{long#Linz”,#012短#名“Linz”,#012类型[#012[0],#012[1]“政治”#012],#012[5]{#012长#名“上奥地利”,#012短#名“OÖ”,#012类型[#012 0]“行政区”一级,“政治”一级,二级,三级,三级{012长名4020,#012短名4020,#012类型[#012[0]“邮政编码”#012}#012],#012格式的#地址“奥地利林茨4020 Nibelungenbrücke”,#012几何{012

使用子字符串subs会让我发疯。目前,代码:

    sub map_latlon_to_loc($$){ my $lat = shift; my $lon = shift;
          $location = $geocoder_google->reverse_geocode(latlng => $lat.','.$lon);
          dbg("loc by lat ".$lat." / lon ".$lon." --- " . p $location);
    }
哪种具体方式/方法/子方法适合访问
$location
中的属性

顺便说一句,p
指的是打印机模块


没有任何显示,这将起到作用。它不应该只适用于。我的实现必须适应任何国家。

你不说你用什么来显示谷歌返回的数据(什么是
dbg
p
?)但它肯定不是一个字符串:它是一个包含嵌套哈希和数组的复杂哈希。使用它来显示内容,并使其易于访问和操作

该程序使用您自己的子例程的固定版本为格林威治皇家天文台获取信息。然后,它打印
地址组件
数组中每行的
长名称
值。它还使用
数据::转储
转储整个数据结构,以便您可以看到返回的内容

如果愿意,也可以使用。它是Perl 5的核心模块,因此不需要安装,但它生成的文本布局不如
Data::Dump

use strict;
use warnings;

use Geo::Coder::Google;
use Data::Dump;

my $geocoder = Geo::Coder::Google->new(apiver => 3);

my $location = map_latlon_to_loc(51.4768777, 0);

my $address = $location->{address_components};
print $_->{long_name}, "\n" for @$address;
print "\n\n";
dd $location;

sub map_latlon_to_loc {
  my ($lat, $lng) = @_;
  $geocoder->reverse_geocode(latlng => "$lat,$lng");
}
输出

Blackheath Avenue
Greater London
United Kingdom
SE10 8XJ
London


{
  address_components => [
    {
      long_name => "Blackheath Avenue",
      short_name => "Blackheath Ave",
      types => ["route"],
    },
    {
      long_name => "Greater London",
      short_name => "Gt Lon",
      types => ["administrative_area_level_2", "political"],
    },
    {
      long_name => "United Kingdom",
      short_name => "GB",
      types => ["country", "political"],
    },
    {
      long_name => "SE10 8XJ",
      short_name => "SE10 8XJ",
      types => ["postal_code"],
    },
    { long_name => "London", short_name => "London", types => ["postal_town"] },
  ],
  formatted_address => "Blackheath Avenue, London SE10 8XJ, UK",
  geometry => {
    bounds        => {
                       northeast => { lat => 51.4770228, lng => 0.0005404 },
                       southwest => { lat => 51.4762273, lng => -0.0001147 },
                     },
    location      => { lat => 51.4766277, lng => 0.0002212 },
    location_type => "APPROXIMATE",
    viewport      => {
                       northeast => { lat => 51.4779740302915, lng => 0.00156183029150203 },
                       southwest => { lat => 51.4752760697085, lng => -0.00113613029150203 },
                     },
  },
  types => ["route"],
}

你不会说你用什么来显示谷歌返回的数据(什么是
dbg
p
?),但它肯定不是一个字符串:它是一个复杂的散列,包含嵌套的散列和数组。用它来显示内容,并使其易于访问和操作

该程序使用您自己的子例程的固定版本为格林威治皇家天文台获取信息。然后,它打印
地址组件
数组中每行的
长名称
值。它还使用
数据::转储
转储整个数据结构,以便您可以看到返回的内容

如果愿意,也可以使用。它是Perl 5的核心模块,因此不需要安装,但它生成的文本布局不如
Data::Dump

use strict;
use warnings;

use Geo::Coder::Google;
use Data::Dump;

my $geocoder = Geo::Coder::Google->new(apiver => 3);

my $location = map_latlon_to_loc(51.4768777, 0);

my $address = $location->{address_components};
print $_->{long_name}, "\n" for @$address;
print "\n\n";
dd $location;

sub map_latlon_to_loc {
  my ($lat, $lng) = @_;
  $geocoder->reverse_geocode(latlng => "$lat,$lng");
}
输出

Blackheath Avenue
Greater London
United Kingdom
SE10 8XJ
London


{
  address_components => [
    {
      long_name => "Blackheath Avenue",
      short_name => "Blackheath Ave",
      types => ["route"],
    },
    {
      long_name => "Greater London",
      short_name => "Gt Lon",
      types => ["administrative_area_level_2", "political"],
    },
    {
      long_name => "United Kingdom",
      short_name => "GB",
      types => ["country", "political"],
    },
    {
      long_name => "SE10 8XJ",
      short_name => "SE10 8XJ",
      types => ["postal_code"],
    },
    { long_name => "London", short_name => "London", types => ["postal_town"] },
  ],
  formatted_address => "Blackheath Avenue, London SE10 8XJ, UK",
  geometry => {
    bounds        => {
                       northeast => { lat => 51.4770228, lng => 0.0005404 },
                       southwest => { lat => 51.4762273, lng => -0.0001147 },
                     },
    location      => { lat => 51.4766277, lng => 0.0002212 },
    location_type => "APPROXIMATE",
    viewport      => {
                       northeast => { lat => 51.4779740302915, lng => 0.00156183029150203 },
                       southwest => { lat => 51.4752760697085, lng => -0.00113613029150203 },
                     },
  },
  types => ["route"],
}

你不会说你用什么来显示谷歌返回的数据(什么是
dbg
p
?),但它肯定不是一个字符串:它是一个复杂的散列,包含嵌套的散列和数组。用它来显示内容,并使其易于访问和操作

该程序使用您自己的子例程的固定版本为格林威治皇家天文台获取信息。然后,它打印
地址组件
数组中每行的
长名称
值。它还使用
数据::转储
转储整个数据结构,以便您可以看到返回的内容

如果愿意,也可以使用。它是Perl 5的核心模块,因此不需要安装,但它生成的文本布局不如
Data::Dump

use strict;
use warnings;

use Geo::Coder::Google;
use Data::Dump;

my $geocoder = Geo::Coder::Google->new(apiver => 3);

my $location = map_latlon_to_loc(51.4768777, 0);

my $address = $location->{address_components};
print $_->{long_name}, "\n" for @$address;
print "\n\n";
dd $location;

sub map_latlon_to_loc {
  my ($lat, $lng) = @_;
  $geocoder->reverse_geocode(latlng => "$lat,$lng");
}
输出

Blackheath Avenue
Greater London
United Kingdom
SE10 8XJ
London


{
  address_components => [
    {
      long_name => "Blackheath Avenue",
      short_name => "Blackheath Ave",
      types => ["route"],
    },
    {
      long_name => "Greater London",
      short_name => "Gt Lon",
      types => ["administrative_area_level_2", "political"],
    },
    {
      long_name => "United Kingdom",
      short_name => "GB",
      types => ["country", "political"],
    },
    {
      long_name => "SE10 8XJ",
      short_name => "SE10 8XJ",
      types => ["postal_code"],
    },
    { long_name => "London", short_name => "London", types => ["postal_town"] },
  ],
  formatted_address => "Blackheath Avenue, London SE10 8XJ, UK",
  geometry => {
    bounds        => {
                       northeast => { lat => 51.4770228, lng => 0.0005404 },
                       southwest => { lat => 51.4762273, lng => -0.0001147 },
                     },
    location      => { lat => 51.4766277, lng => 0.0002212 },
    location_type => "APPROXIMATE",
    viewport      => {
                       northeast => { lat => 51.4779740302915, lng => 0.00156183029150203 },
                       southwest => { lat => 51.4752760697085, lng => -0.00113613029150203 },
                     },
  },
  types => ["route"],
}

你不会说你用什么来显示谷歌返回的数据(什么是
dbg
p
?),但它肯定不是一个字符串:它是一个复杂的散列,包含嵌套的散列和数组。用它来显示内容,并使其易于访问和操作

该程序使用您自己的子例程的固定版本为格林威治皇家天文台获取信息。然后,它打印
地址组件
数组中每行的
长\u名称
值。它还使用
数据::转储
转储整个数据结构,以便您可以查看