如何在不使用 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_X
和 ST_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);
我写了这个地理查询:
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_X
和 ST_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 indexCREATE INDEX Position4326_gix ON your_table USING GIST (Position4326);