PostGIS ST_X() 精度行为

PostGIS ST_X() precision behaviour

我们正在研究使用 PostGIS 对从移动 GPS 引擎收集的数据执行一些空间过滤。我们已经使用以下 table 结构定义了我们在处理中使用的一些起点和终点:

CREATE TABLE IF NOT EXISTS tracksegments
(
   idtracksegments   bigserial   NOT NULL,
   name              text,
   approxstartpoint  geometry,
   approxendpoint    geometry,
   maxpoints         integer
);

如果查询这个table里面的数据:

SELECT ST_AsText(approxstartpoint) FROM tracksegments

我们得到...

POINT(-3.4525845 58.5133318)

请注意,Long/Lat 分保留到小数点后 7 位。

为了只获取经度元素,我们尝试了:

SELECT ST_X(approxstartpoint) AS long FROM tracksegments

我们得到...

-3.45

我们需要比返回的 2 位小数更高的精度。我们搜索了文档,但似乎没有设置精度级别的方法。任何帮助将不胜感激。

万斯

你的问题肯定是客户端相关的。您的客户很可能出于某种原因截断了 double precision 值。作为 ST_AsText returns 一个 text 值,它不受此行为的影响。

ST_X 不会像那样截断坐标的精度,例如

SELECT ST_X('POINT(-3.4525845 58.5133318)');
    st_x    
------------
 -3.4525845
(1 Zeile)

PostgreSQL 9.5 + PostGIS 2.2PostgreSQL 12.3 + PostGIS 3.0 中使用 psql 以及 pgAdmin III

进行了测试

注意:PostgreSQL 9.5 是一个相当老的版本!除了它将在明年 1 月达到 EOL 的事实之外,您还缺少新版本中真正强大的功能。真心建议您尽快规划系统升级。