【问题标题】:How can I use PostGIS functions in rails?如何在 Rails 中使用 PostGIS 功能?
【发布时间】:2013-03-28 09:26:20
【问题描述】:

我要运行的查询是:

SELECT zcta.geoid10, ST_AsGeoJSON(ST_simplify(zcta.geom,500)) FROM zcta WHERE zcta.geoid10 = '90210'

但是当我输入这个时在 Rails 控制台中:

testquery = "SELECT zcta.geoid10, ST_AsGeoJSON(ST_simplify(zcta.geom,500)) FROM zcta WHERE zcta.geoid10 = '90210'"
Zcta.find_by_sql testquery

我得到以下返回:

 => [#<Zcta >]

如果我做一个基本查询来询问任何列的结果,我会得到我期望的响应。这只发生在 PostGIS 函数中。知道该怎么做吗?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql postgis


    【解决方案1】:

    别名计算列,您将获得一个添加到返回对象的方法。

    Zcta.
      select("*, ST_AsGeoJSON(ST_simplify(geom,500)) as my_geo").
      where(geoid10: '90210').each do |result|
        puts result.my_geo
      end
    

    【讨论】:

    • 这行得通,但我真的不明白发生了什么。我想将查询结果分配给一个变量以在其他地方使用。我真的不知道如何处理这个。为什么我不能让它只是 somevariable = Zcta.select("ST_AsGeoJSON(geom) as my_geo").where(geoid10: '90210') 现在 somevariable 等于从数据库中出来的 json 字符串?跨度>
    • ActiveRecord 查询将始终返回 ActiveRecord 对象。你可以这样做somevariable = Zcta.select("ST_AsGeoJSON(geom) as my_geo").where(geoid10: '90210').my_geo
    • 我试过了,我得到了 NoMethodError。 'my_geo' 的未定义方法
    • 只使用我答案中的代码,而不是使用puts,而是将其分配给一个变量。
    • 我讨厌痛苦,但这是我尝试的第一件事,但似乎也没有用。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2022-01-12
    • 2021-06-15
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多