如何在lan和lat点阵列中创建postgres中的点

时间:2012-09-14 06:54:14

标签: perl postgresql

我有纬度和经度的数组。现在我想从中创建点数组。我怎么能在postgresql中做到这一点? 我正在写这样的东西是行不通的。

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

任何帮助?

1 个答案:

答案 0 :(得分:1)

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

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

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

因此,在将Perl与@lat[0]一起使用时,有时可以编写@lon[0]no strict,这有点糟糕,应该始终写为$lon[0]和{{1 }}

如果您在循环中构建$lat[0]并且之后不需要$data@lat,则可以@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中有元素,就会运行此循环。但是,将坐标建模为单独的@lonlon值可能会使数据库中的插入更容易,并且您的数据可以更好地检索:

lat