我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这个设置非常满意。有一个开放的增强一个更广泛的PostGIS对PostgREST的支持,我期待着它。
我有一张有几何列的桌子:
CREATE TABLE places (
id serial primary key,
geometry geometry(GEOMETRY,4326)
);使用SQL,我可以插入纬度57.20和经度17.45的点,如下所示:
insert into places(geometry) values (ST_GeomFromText('POINT(17.45 57.20)', 4326));使用PostgREST查询它时,它表示为GeoJSON:
GET /places?id=eq.6317&select=geometry
[{
"geometry": {
"type": "Point",
"coordinates": [17.45,57.2]
}
}]但是,我需要如何表示几何图形,这样才能使用PostgREST插入/更新?
使用GeoJSON会导致500个内部服务器错误:
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函数相同:
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:
POST /places
{
"geometry": "0101000020E610000033333333337331409A99999999994C40"
}
201 Created是否还有其他文本表示可以工作,或者是否存在将像ST_GeomFromText这样的函数传递给PostgREST的普遍可能性?任何提示都是非常感谢的!
发布于 2020-06-07 14:01:51
简单的方法是使用geometry文字表示:
POST /places
{
"geometry": "SRID=4326;POINT(17.45 57.2)"
}(您可以省略SRID)
这是因为这也适用于:
select 'SRID=4326;POINT(54.729142 25.268204)'::geometry
-- result: 0101000020E6100000ED116A86545D4B4009A87004A9443940 另一种方法是在插入触发器之前对json数组进行处理。
https://stackoverflow.com/questions/62221504
复制相似问题