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

时间:2015-09-28 09:54:25

标签: postgresql postgis

我写过这个地理查询:

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

及其工作。

但我想在数据库中选择一个特定区域,例如:

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

减少工作时间。

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

1 个答案:

答案 0 :(得分:2)

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

即。使用函数ST_MakeEnvelope&&运算符:

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

以纬度/经度表示,参数是这样的:

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);