我的下表名为locations
,其中包含以下列:
latitude
longitude
现在我想从给定的纬度/经度点查询特定半径内的所有条目。
SELECT * FROM locations
WHERE ST_DWithin(
ST_MakePoint(longitude, latitude),
ST_MakePoint(-0.63098, 51.18291),
100
);
上面的查询解释了我作为输入的数据以及我必须查询的数据。
有什么想法吗?
答案 0 :(得分:3)
ST_DWithin
可以同时使用地理和几何类型。 ST_MakePoint
返回几何类型。将ST_DWithin
与几何体一起使用时,它将使用由空间参考系统定义的距离单位。
如果要以米为单位进行比较,首先必须将值转换为地理类型。然后查询变为:
SELECT * FROM locations
WHERE ST_DWithin(
ST_MakePoint(longitude, latitude)::geography,
ST_MakePoint(-0.63098, 51.18291)::geography,
100
);
有关地理和几何之间差异的更多解释,请点击此处:https://gis.stackexchange.com/questions/6681/what-are-the-pros-and-cons-of-postgis-geography-and-geometry-types