如何在不使用 ST_X("Position4326") 函数的情况下在 PostgreSQL 上进行 GIS 查询

How to make a GIS query on PostgreSQL without use ST_X("Position4326") function

我写了这个地理查询:

SELECT
    ST_X("Position4326") AS lon,
    ST_Y("Position4326") AS lat,
    "Values"[4] AS ppe,
    "Values"[5] AS speed
FROM
(
SELECT
  *
FROM
  "SingleData"

UNION ALL

SELECT
  *
FROM
  "SingleDataOld"
) AS d
WHERE
  "Values"[5] > 0

及其作品。

但我想select数据库中的特定区域,例如:

Lat_min = 43.77;
Lat_max = 43.88;
Lon_min = 12.95;
Lon_max = 13.05;

减少工作时间。

不使用 ST_XST_Y 功能可以做到这一点 吗?或者,更好:我想使用 WHERE 子句,但地理数据的格式是 Position4326,一个我不知道如何操作的字母数字字符串。

position4326的格式可以是几何类型,也可以是geography类型。 Postgis 提供了大量的功能,您可以使用这些功能来限制结果数据以提高性能。

即可以使用函数 ST_MakeEnvelope and the && operator:

WHERE ...
AND Position4326 && ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid);

在latitude/longitude术语中,参数是这样的:

ST_MakeEnvelope(long_min, lat_min, long_max, lat_max, srid);    

因为您的列名为 Position4326,我想您应该使用 srid = 4326。

ST_MakeEnvelope(12.95, 43.77, 13.05, 43.88, 4326);

还要确保您在列 Position4326:

上有一个 spatial index
CREATE INDEX Position4326_gix ON your_table USING GIST (Position4326);