我有纬度和经度的数组。现在我想从中创建点数组。我怎么能在postgresql中做到这一点? 我正在写这样的东西是行不通的。
my $data = {
type => 'Feature',
geometry => {
type => "Point",
coordinates => [@lon[0],@lat[0]]
}
};
任何帮助?
答案 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
中有元素,就会运行此循环。但是,将坐标建模为单独的@lon
和lon
值可能会使数据库中的插入更容易,并且您的数据可以更好地检索:
lat