2014-05-20 50 views
0

我正在使用postgis 9.1和rgeo開發一個地圖應用程序。Postgis ST_DWithin匹配一定的半徑AND點在右邊

其中一個功能意味着我可以找到距離當前點XXX公里的所有點,並且也位於該點的右側。

我試圖用以下查詢:

Environment.where{ st_dwithin(location, factory.point(170.0, 0), 300000) }.where('ST_X(location::geometry) > 170')

用於查詢的相應的SQL: [EDITED] SELECT "environments".* FROM "environments" WHERE (st_dwithin("environments"."location", ST_PointFromText('POINT(170 0)', 4326), 300000)) AND (ST_X(location::geometry) > 170);

在這裏,我硬編碼的點是在170經度。

問題在於我無法匹配[-170,-180]經度中的點。

有沒有辦法解決這個只使用postgis函數?

[編輯]這是一個與世界各地的問題。在這個應用程序中,我只允許找到正確的點和一定的範圍..我找不到純SQL的解決方案...

謝謝!

+1

請不要硬編碼數據。我不認爲任何人都可以閱讀HEXEWKB。你能編輯到常規座標嗎? – Patrick

+0

您是否意識到您正在有效地使用笛卡爾距離單位? –

+0

帕特里克我正在使用一個紅寶石庫,rgeo,它翻譯成你看到的二進制格式。但是,對於:SELECT「environments」。* FROM「environments」WHERE(st_dwithin(「environments」。「location」,ST_PointFromText('POINT(-170 0)',4326),150000)); –

回答