2013-08-06 4 views
0

postgreSQL 9.1, postGIS 2.0, nodejs 0.10.12 및 노드의 pg 모듈의 최신 버전을 사용하여 I, m.postGIS와 node.js의 가장 가까운 이웃

서버 측에서 웹 소켓을 사용합니다. 두 가지 기능이 있습니다. 데이터에 따라 적절한 기능을 호출하는 사용자가 왔습니다.

첫 번째 기능은 간단한 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 방금 질문을 편집했습니다.Thanks – slevin

+0

postGIS에 대해서는 아무 것도 모르지만 cli에서 psql을 통해 postgres에서 해당 쿼리를 실행 해 보았습니까? 그런 식으로 디버깅하는 것이 더 쉬울 수도 있습니다 ... – badsyntax

답변

0

이와 같은 경우 첫 번째 단계는 문제가있는 부분을 구분하는 것입니다.

  1. psql에서 작동하는 쿼리입니까? 그렇지 않은 경우 여기, gis 또는 dba에 질문 할 수 있습니다.

  2. psql에서 쿼리가 작동하면 문제는 nodejs에 있습니다. 자세히 살펴보고 다른 질문을 여기에서 만들거나 개발자 등으로 이메일 목록을 확인하고 싶을 것입니다. 이 Node.js를에 의해 발생하지만이 (경우 이메일 목록이 가장 잘되어있는) 거기에 버그가 있다면 알려 어렵다, 또는 당신의 SQL에 있는지 여부되고처럼

귀하의 오류가 보인다. 나는 당신의 기능에 무엇이 전달되고 있는지 말할 수 없다.

보조 메모로 je를 위생적으로 처리 할 방법을 찾아야합니다. 그렇지 않으면 당신은 SQL 주입 문제를 요구하고 있습니다.

관련 문제