我正在使用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的解決方案...
謝謝!
請不要硬編碼數據。我不認爲任何人都可以閱讀HEXEWKB。你能編輯到常規座標嗎? – Patrick
您是否意識到您正在有效地使用笛卡爾距離單位? –
帕特里克我正在使用一個紅寶石庫,rgeo,它翻譯成你看到的二進制格式。但是,對於:SELECT「environments」。* FROM「environments」WHERE(st_dwithin(「environments」。「location」,ST_PointFromText('POINT(-170 0)',4326),150000)); –