首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PostGIS插入/更新PostgREST几何列

使用PostGIS插入/更新PostgREST几何列
EN

Stack Overflow用户
提问于 2020-06-05 17:57:06
回答 1查看 1.6K关注 0票数 3

我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这个设置非常满意。有一个开放的增强一个更广泛的PostGIS对PostgREST的支持,我期待着它。

我有一张有几何列的桌子:

代码语言:javascript
复制
CREATE TABLE places (
  id serial primary key,
  geometry geometry(GEOMETRY,4326)
);

使用SQL,我可以插入纬度57.20和经度17.45的点,如下所示:

代码语言:javascript
复制
insert into places(geometry) values (ST_GeomFromText('POINT(17.45 57.20)', 4326));

使用PostgREST查询它时,它表示为GeoJSON:

代码语言:javascript
复制
GET /places?id=eq.6317&select=geometry

[{
  "geometry": {
    "type": "Point",
    "coordinates": [17.45,57.2]
  }
}]

但是,我需要如何表示几何图形,这样才能使用PostgREST插入/更新?

使用GeoJSON会导致500个内部服务器错误:

代码语言:javascript
复制
POST /places

{
    "geometry": {
        "type": "Point",
        "coordinates": [17.45,57.2]
    }
}

500 Internal Server Error

{
    "hint": "\"{\r\" <-- parse error at position 2 within geometry",
    "details": null,
    "code": "XX000",
    "message": "parse error - invalid geometry"
}

与使用ST_GeomFromText函数相同:

代码语言:javascript
复制
POST /places

{
    "geometry": "ST_GeomFromText('POINT(17.45 57.20)', 4326)"
}

500 Internal Server Error

{
    "hint": "\"ST\" <-- parse error at position 2 within geometry",
    "details": null,
    "code": "XX000",
    "message": "parse error - invalid geometry"
}

真正起作用的是使用内部PostGIS字符串表示,但我的API的当前值只有17.45 57.20:

代码语言:javascript
复制
POST /places

{
    "geometry": "0101000020E610000033333333337331409A99999999994C40"
}

201 Created

是否还有其他文本表示可以工作,或者是否存在将像ST_GeomFromText这样的函数传递给PostgREST的普遍可能性?任何提示都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 14:01:51

简单的方法是使用geometry文字表示:

代码语言:javascript
复制
POST /places

{
  "geometry": "SRID=4326;POINT(17.45 57.2)"
}

(您可以省略SRID)

这是因为这也适用于:

代码语言:javascript
复制
select 'SRID=4326;POINT(54.729142 25.268204)'::geometry
-- result: 0101000020E6100000ED116A86545D4B4009A87004A9443940  

另一种方法是在插入触发器之前对json数组进行处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62221504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档