我有 latitude 和 longitude 数组。现在我想从中创建点数组。我怎样才能在 postgresql 中做到这一点?我正在写这样的东西,但它不起作用。
my $data = {
type => 'Feature',
geometry => {
type => "Point",
coordinates => [@lon[0],@lat[0]]
}
};
有什么帮助吗?
我有 latitude 和 longitude 数组。现在我想从中创建点数组。我怎样才能在 postgresql 中做到这一点?我正在写这样的东西,但它不起作用。
my $data = {
type => 'Feature',
geometry => {
type => "Point",
coordinates => [@lon[0],@lat[0]]
}
};
有什么帮助吗?
在 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
在循环内部构造并且不需要@lat
and@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
可能会使插入数据库更容易,并且可以更好地检索数据:
geometry => {
type => 'Point',
lon => (shift @lon),
lat => (shift @lat),
},