【问题标题】:Inserting geometry (JSON) into loopbackjs model将几何 (JSON) 插入 loopbackjs 模型
【发布时间】:2015-06-27 01:38:15
【问题描述】:

我正在使用 Angular SDK 在 PostGIS 中添加和编辑环回几何图形,并且我可以正常工作:

ProjectGeoms.upsert({"id":"129","projectGeom":   {"type":"Polygon","coordinates":[[arrays of x/y co-ordinates]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}, successCallback, errorCallback)

正在运行的 SQL 查询是:

loopback:connector:postgresql SQL: UPDATE "public"."project_geom" SET  "ref"=$1,"project_geom"=$2
Parameters: 129,{"type":"Polygon","coordinates":[[arrays of x/y co-ordinates]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}} +2ms

这是针对已经存在的几何图形。但是,当我为不存在的几何图形(相同的 JSON 结构,但 id 为 124)添加它时,它就不起作用了。

正在运行的 SQL 查询是:

loopback:connector:postgresql SQL: INSERT INTO "public"."project_geom" ("ref","project_geom") SELECT $1,$2 RETURNING 
Parameters: 124,{"type":"Polygon","coordinates":[[arrays of x/y co-ordinates]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}} +2ms

完整的错误信息如下:

loopback:connector:postgresql error: syntax error at end of input
at Connection.parseE (C:\Bitnami\wappstack-5.4.30-   0\apache2\htdocs\project\api\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:534:11)
at Connection.parseMessage (C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\project\api\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:361:17)
at Socket.<anonymous> (C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\project\api\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
at Socket.Readable.push (_stream_readable.js:128:10) +15ms

如果我直接在 Postgres 中运行以下查询:

INSERT INTO project_geom (ref,project_geom) VALUES (124,'{"type":"Polygon","coordinates":[[arrays of x/y co-ordinates]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}'::json);

我可以毫无问题地插入值。

表数据架构为(ref::integer, project_geom::json)

【问题讨论】:

  • 插入查询不能就这样结束。 RETURNING 后面应该跟一个列表列,要返回的表达式。
  • 感谢 Jakub - 你让我走上了正轨 - 随时提交答案
  • 我认为如果你自己回答这个问题会更好,因为你知道发生了什么,它会帮助其他人。
  • 好的,或者我们都可以回答!
  • 是的,这是在一个单独的函数中:IF TG_OP = 'INSERT' THEN INSERT INTO project_sites (geom,ref) VALUES(ST_Multi(ST_GeomFromGeoJSON(NEW.project_geom::text)),NEW.ref); RETURN NEW; 顺便说一句,这是一个可编辑的视图..

标签: node.js postgresql postgis loopbackjs


【解决方案1】:

RTFM 案例 - 我错过了这个页面http://docs.strongloop.com/display/public/LB/Model+definition+JSON+file#ModeldefinitionJSONfile-IDproperties,它明确指出

LoopBack CRUD methods expect the model to have an "id" property if the model is backed by a database.

呃。我的模型没有。查看 loopback-postgresql-connector 的 code,它需要 ID 字段返回带有“RETURNING”子句的 id。尽管这已通过 loopback 记录,但在我看来,这种特殊情况下的问题可能会更清楚,因此我打算提交一个补丁来更改详细的日志/错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 2015-01-23
    • 2015-09-07
    • 2020-03-21
    • 1970-01-01
    • 2023-03-16
    • 2017-04-23
    • 2014-06-24
    相关资源
    最近更新 更多