Postgis查询ST_DWithin对lat / long值

时间:2017-04-26 13:04:28

标签: postgresql postgis

我的下表名为locations,其中包含以下列:

  • latitude
  • longitude

现在我想从给定的纬度/经度点查询特定半径内的所有条目。

SELECT * FROM locations
WHERE ST_DWithin(
    ST_MakePoint(longitude, latitude),
    ST_MakePoint(-0.63098, 51.18291),
    100
);

上面的查询解释了我作为输入的数据以及我必须查询的数据。

有什么想法吗?

1 个答案:

答案 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