如果您想查找两个点之间的点,则可能需要使用ST_DWithin两次,以便获取基于点1和基于点2的圆的交集中的点,例如:
SELECT addressid FROM maddress
WHERE ST_DWithin(geocode, ST_MakePoint(20.0924758, 72.7341809), 100.0)
AND ST_DWithin(geocode, ST_MakePoint(19.137381, 72.837223), 100.0);
请注意,单位为SRID单位,您的情况似乎是4326,因此您可能希望将坐标转换为米,使用地理数据类型,以便距离以米为单位,或者将距离转换为度数--有各种选择。我相信您已经看过
ST_DWithin docs,其中解释了这些选项。您还可以考虑
use_spheroid参数。
与其上面的
ST_MakePoint
不同,您也可以使用
ST_GeomFromText
,它采用形式“POINT(x y)”,因为您最初可以选择指定SRID,例如,使用4326,您也可以将查询编写为:
SELECT addressid FROM maddress
WHERE ST_DWithin(geocode, ST_GeomFromText('POINT(20.0924758 72.7341809)',4326), 100.0)
AND ST_DWithin(geocode, ST_GeomFromText('POINT(19.137381 72.837223)', 4326), 100.0);
编辑 根据OP的评论,发现geocode不是一个几何列。你可以通过运行以下命令来解决这个问题。
ALTER TABLE maddress ADD COLUMN geom GEOMETRY (POINT, 4326);
UPDATE maddress set geom=ST_MakePoint(lng,lat);
CREATE INDEX ix_spatial_geom on maddress using gist(geom);
您需要在上述查询中使用geom而不是geocode。我假设您的点位于4326。