2017-11-05 9 views
0

私はPostgisと向き合っています。ST_DWithinはtrueを返しますが、ST_Distance_Sphereは返さない

私は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

...サンプルデータ?また、[gis.se] –

答えて

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) 
関連する問題