2012-09-14 18 views
0

我有經度和緯度的數組。現在我想創建一些點。我怎麼能在postgresql中做到這一點? 我寫這樣的東西不起作用。如何在lan和lat點數組中創建postgres中的點

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

任何幫助嗎?

+0

你能否更具體?那麼postgres呢?它與你的問題有什麼聯繫? –

+1

'@lon [0]'很奇怪,即使我們不知道代碼之前的定義。你不想寫'$ lon [0]'? –

回答

1

在Perl 5中,sigil(變量名前面的[email protected]%&*)表示不是您正在使用的變量的類型,而是更類似於您作爲值訪問結果所期待的類型。這很重要,因爲Perl中的一個和相同的語句可以根據列表與標量上下文來評估不同的值。

I.e.如果我們有一個數組@a = (1, 2, 3, 4, 5)並且第一個元素是標量1,那麼我們將以$a[0]的身份訪問它。

但是,您可以訪問一次多個元素:@a[0 .. 2, -1]會返回一個列表(1, 2, 3, 5),所以這是我們訪問與@印記數組元素的只有情況。

因此,儘管使用Perl與no strict時寫@lat[0]@lon[0]有時是可能的,這是有點不好的風格,應始終寫成$lon[0]$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元件運行。然而,造型的座標作爲一個單獨的lonlat值可能使插入DB更容易和你的數據更好檢索:

geometry => { 
     type => 'Point', 
     lon => (shift @lon), 
     lat => (shift @lat), 
    }, 
相關問題