Postgresql 使用PostgREST插入/更新PostGIS几何图形列
我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这种设置非常满意。有一个更广泛的开放增强,我期待着它 我有一个带有几何图形列的表:Postgresql 使用PostgREST插入/更新PostGIS几何图形列,postgresql,geometry,postgis,postgrest,Postgresql,Geometry,Postgis,Postgrest,我使用PostgreSQL 12.1、PostGIS 3.0.0和PostgREST 7.0.1的组合,我对这种设置非常满意。有一个更广泛的开放增强,我期待着它 我有一个带有几何图形列的表: CREATE TABLE places ( id serial primary key, geometry geometry(GEOMETRY,4326) ); 使用SQL,我可以插入纬度57.20和经度17.45的点,如下所示: insert into places(geometry) valu
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之类的函数传递到PostgREST的一般可能性?任何提示都非常感谢 最简单的方法是使用
几何体文字表示法:
POST /places
{
"geometry": "SRID=4326;POINT(17.45 57.2)"
}
(您可以省略SRID)
这是有效的,因为这也有效:
选择'SRID=4326;点(54.729142 25.268204)∶几何图形
--结果:0101000020E610000ED116A86545D4B4009A87004A9443940
另一种方法是在插入触发器之前处理json数组 我下面的答案对你有用吗?这非常有效,谢谢你,史蒂夫!我需要保留SRID,否则我得到的几何体SRID(0)与列SRID(4326)不匹配。
。
POST /places
{
"geometry": "0101000020E610000033333333337331409A99999999994C40"
}
201 Created
POST /places
{
"geometry": "SRID=4326;POINT(17.45 57.2)"
}