ST_DWithin返回true但ST_Distance_Sphere没有

时间:2017-11-05 20:03:52

标签: postgresql postgis

我与Postgis面对面。

我有一个sql请求:

SELECT  st_x(ST_Transform(n.geom,4326)) AS x,
                    st_y(ST_Transform(n.geom,4326)) AS y,
                    fetchval(n.tags, 'name') as name,
                    n.id,
                    ST_Distance_sphere(ST_MakePoint(:longitude, :latitude), n.geom) as dist
    FROM nodes n
    WHERE ST_DWithin(n.geom, ST_SetSRID(ST_MakePoint(:longitude, :latitude),4326), 10)
    ORDER BY ST_Distance(ST_SetSRID(ST_MakePoint(:longitude, :latitude),4326), n.geom)

其中:纬度和经度是我当前的位置 在这个请求中,我想返回我周围10米范围内的所有节点。

当我转储结果时,我得到了一些> 10米(SELECT中的ST_Distance_sphere返回节点> 230米我)。

为什么有任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案, ST_DWITHIN半径取决于SRID。 如果我想要米,我必须以米为单位投射我的点数: (::地理)

SELECT  st_x(ST_Transform(n.geom,4326)) AS x,
                    st_y(ST_Transform(n.geom,4326)) AS y,
                    fetchval(n.tags, 'name') as name,
                    n.id,
                    ST_Distance_sphere(ST_MakePoint(:longitude, :latitude), n.geom) as dist
    FROM nodes n
    WHERE ST_DWithin(n.geom::geography, ST_SetSRID(ST_MakePoint(:longitude, :latitude),4326)::geography, 280)
    ORDER BY ST_Distance(ST_SetSRID(ST_MakePoint(:longitude, :latitude),4326), n.geom)