我与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米我)。
为什么有任何想法?
感谢。
答案 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)