Insert/update 带有 PostgREST 的 PostGIS 几何列
Insert/update PostGIS geometry column with PostgREST
我使用 PostgreSQL 12.1、PostGIS 3.0.0 和 PostgREST 7.0.1 的组合,我对这个设置非常满意。有更广泛的开放增强PostGIS support in PostgREST,我很期待。
我有一个带有几何列的 table:
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]
}
}]
但是我需要如何表示几何形状才能insert/update 使用 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?非常感谢任何提示!
直接的方法是使用 geometry
文字表示:
POST /places
{
"geometry": "SRID=4326;POINT(17.45 57.2)"
}
(可以省略SRID)
这有效,因为这也有效:
select 'SRID=4326;POINT(54.729142 25.268204)'::geometry
-- result: 0101000020E6100000ED116A86545D4B4009A87004A9443940
另一种方法是在插入触发器之前处理 json 数组。
我使用 PostgreSQL 12.1、PostGIS 3.0.0 和 PostgREST 7.0.1 的组合,我对这个设置非常满意。有更广泛的开放增强PostGIS support in PostgREST,我很期待。
我有一个带有几何列的 table:
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]
}
}]
但是我需要如何表示几何形状才能insert/update 使用 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?非常感谢任何提示!
直接的方法是使用 geometry
文字表示:
POST /places
{
"geometry": "SRID=4326;POINT(17.45 57.2)"
}
(可以省略SRID)
这有效,因为这也有效:
select 'SRID=4326;POINT(54.729142 25.268204)'::geometry
-- result: 0101000020E6100000ED116A86545D4B4009A87004A9443940
另一种方法是在插入触发器之前处理 json 数组。