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.2
和 PostgreSQL 12.3 + PostGIS 3.0
中使用 psql
以及 pgAdmin III
进行了测试
注意:PostgreSQL 9.5 是一个相当老的版本!除了它将在明年 1 月达到 EOL 的事实之外,您还缺少新版本中真正强大的功能。真心建议您尽快规划系统升级。
我们正在研究使用 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.2
和 PostgreSQL 12.3 + PostGIS 3.0
中使用 psql
以及 pgAdmin III
注意:PostgreSQL 9.5 是一个相当老的版本!除了它将在明年 1 月达到 EOL 的事实之外,您还缺少新版本中真正强大的功能。真心建议您尽快规划系统升级。