0

我有 latitude 和 longitude 数组。现在我想从中创建点数组。我怎样才能在 postgresql 中做到这一点?我正在写这样的东西,但它不起作用。

my $data = { 
  type => 'Feature',
  geometry => {
    type => "Point",
    coordinates => [@lon[0],@lat[0]]
  }
};

有什么帮助吗?

4

1 回答 1

1

在 Perl 5 中,符号($@%&*在变量名前面)表示的不是您正在使用的变量的类型,而是您期望的值访问结果的类型。这很重要,因为 Perl 中的一个相同语句可以根据列表与标量上下文评估不同的值。

即如果我们有一个数组@a = (1, 2, 3, 4, 5)并且第一个元素是标量 1,那么我们将访问它作为$a[0]

但是,您可以一次访问多个元素:@a[0 .. 2, -1]将返回一个list (1, 2, 3, 5),因此这是我们使用sigil访问数组元素的唯一情况。@

因此,在使用 Perl 时编写@lat[0]@lon[0]有时可能是可行的no strict,但这种风格有点糟糕,应该始终写成$lon[0]and $lat[0]

如果您$data在循环内部构造并且不需要@latand@lon之后,您可以shift从数组中获取第一个元素。

while (@lat and @lon) { # a condition is a scalar context — evaluates to array *length*
  my $data = {
    type     => 'Feature',
    geometry => {
      type        => 'Point',
      coordinates => [shift @lon, shift @lat],
    },
  };
  # insert data point
}

只要 和 中有元素,这个循环就会@lat 运行 @lon。但是,将坐标建模为单独的lonlat可能会使插入数据库更容易,并且可以更好地检索数据:

   geometry => {
      type => 'Point',
      lon  => (shift @lon),
      lat  => (shift @lat),
   },
于 2012-09-14T08:06:04.680 回答