我使用 PostgreSQL 12.1、PostGIS 3.0.0 和 PostgREST 7.0.1 的组合,我对这个设置非常满意。在 PostgREST中有更广泛的 PostGIS 支持的开放增强功能,我很期待。
我有一个带有几何列的表:
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?任何提示都非常感谢!