2013-08-06 38 views
0

我,使用PostgreSQL 9.1的PostGIS 2.0米,0.10.12的NodeJS和節點的PG模塊的最新版本。POSTGIS與node.js的近鄰

我在服務器端使用websockets。我有兩個功能。根據來自用戶的數據,我稱之爲正確的功能。

第一功能是簡單SELECT,做工精細。

第二試圖找到最接近5個的給定幾何形狀的鄰居(也可以是點或線或多邊形)。不起作用。我爲最近的鄰居查詢嘗試了不同的語法,但仍然沒有。

什麼可能是錯的?查詢?我在想也許pg模塊不支持ST_DWithin函數。

這裏是近鄰功能

function checkMapIn(je){ 
var conString = "pg://username:[email protected]:5432/myDB"; 

var client = new pg.Client(conString); 
client.connect(); 
//je came from client, is a geometry he just inserted in the map 
var query = client.query('SELECT pins.p_name FROM pins ORDER BY pins.p_geom <-> '+je+' LIMIT 5') 
//alternative syntax I tried 
//SELECT pins.p_name FROM pins INNER JOIN pins ON ST_DWithin('+je+', pins.p_geom, 1000) LIMIT 5 
//SELECT pins.p_name FROM pins WHERE ST_DWithin('+je+', pins.p_geom, 1000) LIMIT 5 

query.on("row", function (row, result) { 
    result.addRow(row);}); 


query.on("end", function (result) { 
console.log(JSON.stringify(result.rows, null, " ")); 

for (var i=0; i<result.rows.length; i++){ 
connection.send(result.rows[i].p_name+'</br>')   
} 

    client.end(); 
}); 
} 

的代碼,這是我的錯誤,不管我怎麼編輯查詢

events.js:72 
throw er; // Unhandled 'error' event 
    ^
error: syntax error at or near "[" 
at Connection.parsE (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:526:11) 
at Connection.parseMessage (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:371:17) 
at Socket.(anonymous) (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:86:20) 
at Socket.EventEmitter.emit (events.js:95:17) 
at Socket.(anonymous) (_stream_readable.js:736:14) 
at Socket.EventEmitter.emit (events.js:92:17) 
at emitReadable_ (_stream_readable.js:408:10) 
at emitReadable (_stream_readable.js:404:5) 
at readableAddChunk (_stream_readable.js:156:9) 
at Spcket.Readable.push (_stream_readable.js:127:10) 

任何建議的synatx?提示?

預先感謝

斯萊文

EDIT

這裏是 'JE' 變量的示例值,如 「badsyntax」 問。 [object Object] 我得到這個,如果我設置connection.send('</br>'+je+'</br>')

而且,這是我從客戶端的OpenLayers和我發送到服務器得到什麼。 POINT(2332239.3475 4729773.7440625) 奇怪... 在客戶端我用的OpenLayers得到剛插入地圖上的特徵的幾何形狀。

+0

你可以發佈'je'變量的示例值嗎? – badsyntax

+0

@badsyntax我剛剛編輯了這個問題。謝謝 – slevin

+0

我對postGIS一無所知,但是您是否曾嘗試在cli上通過psql在postgres中運行該查詢?這樣調試可能會更容易... – badsyntax

回答

0

在這樣的情況下,你的第一步是要分開您的問題。

  1. 查詢是從psql開始的嗎?如果沒有,你可以在這裏,在gis或dba上提問。

  2. 如果您的查詢在psql中有效,那麼您的問題在nodejs中。您可能需要仔細觀察並在此處創建另一個問題,或者與開發人員等一起跟進電子郵件列表。

你的錯誤看起來是由Node.js的拋出,但它是很難說,如果這是有一個bug(在這種情況下,郵件列表是最好的),或者它是否在你的SQL。我無法分辨傳入你的函數的內容。

作爲一個方面說明,你需要找到一種方法來消毒je。否則,您正在詢問SQL注入問題。