最近使用PostGIS,RGeo,Spatial Adapter订购

时间:2016-07-14 14:49:19

标签: ruby-on-rails activerecord postgis rgeo

我问这个问题,因为我在Order by nearest - PostGIS, GeoRuby, spatial_adapter找到的答案无法提供解决方案。我正在尝试创建一个控制器方法,可以将 n 最近的记录返回到某个记录的lonlat。它查询的记录来自同一个表。如果我在SQL中完全这样做,这个概念就不是那么大了。在链接的示例中很清楚,下面是我获得结果的具体情况:

    <receiver android:name="broadcastReceiver.MessageServiceTrigger" 
              android:process=":remote" />

我的问题在于使用ActiveRecord。我正在使用受@ dc10响应启发的方法,但我无法通过RGeo方法或直接SQL创建工作查询。这是我到目前为止所做的:

condos_development=#
  SELECT id, name FROM condos
  ORDER BY ST_Distance(condos.lonlat, ST_PointFromText('POINT(-71.06 42.45)'))
condos_development-#
  LIMIT 5;

此尝试的回应如下:

  

ActiveRecord :: StatementInvalid:PG :: SyntaxError:ERROR:语法错误   在“LIMIT”或其附近10:29:50 rails.1 LINE 1:... lonlat,   ST_PointFromText(“#{unit.lonlat.as_text)}”)LIMIT $ 1

是否有人能够让我在如何将此工作查询放在一起的正确轨道上,以便我可以在Rails中使其工作?

1 个答案:

答案 0 :(得分:2)

问题在于活动记录如何将您的查询解析为SQL,以及Limit子句的位置。如果您将查询更改为:

Condo.order("ST_Distance(lonlat, ST_GeomFromText('#{unit.lonlat.as_text}', 4326))")
     .limit(num)

你应该会发现这个有效。