我使用postgis 9.1和rgeo开发地图应用程序。
其中一项功能意味着我找到了距离当前点XXX kms的所有点,并且也位于Point的右侧。
我尝试了以下查询:
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函数解决这个问题?
[编辑]这是postgis的全球问题。在这个应用程序中,我只允许找到右边和某个范围内的点。我无法找到纯SQL的解决方案...
谢谢!
答案 0 :(得分:0)
请考虑使用geography
类型而不是geometry
类型。