我写过这个地理查询:
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_X
和ST_Y
功能吗?或者,更好:我想使用WHERE
子句,但地理数据的格式是Position4326
,这是一个我不知道如何操纵的字母数字字符串。
答案 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);