【发布时间】:2017-12-04 23:54:02
【问题描述】:
我正在构建一个简单的 API,它也处理几何(存储到 postGIS)。 我正在使用 knex-postgis 通过 knex 访问 postGIS 中的 ST_ 空间函数。
我已使用此示例插入一个点,并且在硬编码时它可以工作。 但是我缺乏经验让我悬而未决,我怎样才能使查询动态?我想创建一个输入 x 和 y 值的表单并将其发送到 ST_geomFromText 函数以将其保存到数据库中的 geom 类型。 这是你会使用参数的时候吗?有人能指出我正确的方向吗?
// insert a point
const sql1 = db.insert({
id: 1,
geom: st.geomFromText('Point(0 0)', 4326)
}).into('points').toString();
console.log(sql1);
// insert into "points" ("geom", "id") values
(ST_geomFromText('Point(0 0)'), '1')
到目前为止我已经尝试过
router.post('/', (req, res, next) => {
queries.create(req.body).then(poi => {
res.json(poi[0]);
});
});
插入查询
create(poi) {
const sql = db.insert(poi).returning('*').into('poi');
return sql;
},
在 Postman 中,我将其发送到正文中
{
"place": "test",
"comments": "new",
"numbers": 6,
"geom": "st.geomFromText('Point(-71.064544 44.28787)', 4326)"
}
但得到一个错误“未处理的拒绝错误:解析错误 - 无效几何” 硬编码的对象看起来一样并且工作正常。
我感觉我使用 st.geomFromText 错误,但我不确定?
这就是我在 console.log 返回查询时得到的结果
insert into "poi" ("comments", "geom", "numbers", "place") values ('new', 'st.geomFromText(''Point(-71.064544 44.28787)'', 4326)', 6, 'test')
(看看它如何不将st.geom..更改为st_geom..?还有ST函数和Point对象周围的引号不正确)
当我在 pgAdmin 中运行此字符串时,它会起作用
insert into "poi" ("comments", "geom", "numbers", "place") values ('new', st_GeomFromText('Point(-71.064544 44.28787)', 4326), 6, 'test')
编辑: 我也 console.log 硬编码版本。似乎没有在几何值上添加额外的 ''
insert into "poi" ("geom") values (ST_geomFromText('Point(-71.064544 44.28787)', 4326))
有什么建议吗?
【问题讨论】: