【问题标题】:postGIS's nearest neighbor with node.jspostGIS 与 node.js 的最近邻
【发布时间】:2013-08-07 21:38:19
【问题描述】:

我正在使用 postgreSQL 9.1、postGIS 2.0、nodejs 0.10.12 和 node 的 pg 模块的最新版本。

我在服务器端使用 websockets。我有两个功能。根据来自用户的数据,我调用正确的函数。

第一个函数是一个简单的SELECT,工作正常。

第二个尝试找到给定几何图形的 5 个最近邻居(它可以是点、线或多边形)。不工作。我为最近邻查询尝试了不同的语法,但仍然没有。

可能出了什么问题?查询?我在想也许 pg 模块不支持 ST_DWithin 函数。

这是最近邻函数的代码

function checkMapIn(je){
var conString = "pg://username:password@localhost: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)

有什么建议吗?提示?

提前致谢

斯莱文

编辑

这是“je”变量的示例值,正如“badsyntax”所要求的那样。 [object Object] 如果我设置connection.send('&lt;/br&gt;'+je+'&lt;/br&gt;'),我会得到这个。

另外,这是我从客户端的 openlayers 获得的以及我发送到服务器的内容。 POINT(2332239.3475 4729773.7440625) 诡异的... 在客户端,我使用 openlayers 来获取刚刚插入地图的要素的几何形状。

【问题讨论】:

  • 你能发布一个'je'变量的示例值吗?
  • @badsyntax 我刚刚编辑了这个问题。谢谢
  • 我对 postGIS 一无所知,但您是否尝试过在 cli 上通过 psql 在 postgres 中运行该查询?这样调试可能更容易......
  • @badsyntax 我只是重新编辑了我的问题。是的,这也是一个好主意。再次感谢

标签: node.js postgresql postgis


【解决方案1】:

在这种情况下,您的第一步是区分问题所在。

  1. 您的查询是否适用于 psql?如果没有,您可能想在此处询问 gis 或 dba。

  2. 如果您的查询在 psql 中有效,那么您的问题出在 nodejs 中。您可能需要仔细查看并在此处创建另一个问题,或者与开发人员等跟进电子邮件列表。

您的错误看起来像是由 Node.js 抛出的,但很难判断这是否是那里的错误(在这种情况下电子邮件列表是最好的),或者它是否在您的 sql 中。我不知道传递给你的函数的是什么。

附带说明,您需要找到一种方法来对 je 进行消毒。否则,您要求的是 SQL 注入问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2018-10-10
    • 2011-12-06
    • 2012-12-28
    • 2011-07-03
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多