gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:52:23 24 4
gpt4 key购买 nike

我结合使用了 PostgreSQL 12.1、PostGIS 3.0.0 和 PostgREST 7.0.1,我对这个设置非常满意。有一个更广泛的开放增强 PostGIS support in 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?非常感谢任何提示!

最佳答案

最直接的方法是使用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 - 使用 PostgREST 插入/更新 PostGIS 几何列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62221504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com