【问题标题】:formatting/parsing form values in Ruby on Rails在 Ruby on Rails 中格式化/解析表单值
【发布时间】:2014-03-11 20:02:52
【问题描述】:

我正在使用 RGeo (PostGIS) 和 Ruby on Rails,两者都是新手。我有一个包含坐标属性(纬度和经度)的模型。我在绑定具有该属性的表单时使用文本输入字段,但我想将值格式化为人类可读的表单。目前它被“渲染”为原始数据库值,即“0101000020E61000009468C9E3698C5EC065FED13769D64740”。我想为用户将其格式化为“-122.193963, 47.675086”。反之,如果用户更新了值,我需要将其解析成 PostGIS 可以理解的格式。

我一直在搜索和阅读有关在 RoR 中将数据绑定到表单的内容,但找不到任何有用的内容。

【问题讨论】:

    标签: ruby-on-rails postgis


    【解决方案1】:

    您会看到well-known binary (WKB) 的十六进制编码表示。有many geometry accessors可以获取不同格式或表示的坐标信息。例如:

    SELECT ST_AsText(geom) AS WKT, ST_Y(geom) AS latitude, ST_X(geom) AS longitude
    FROM (
      SELECT '0101000020E61000009468C9E3698C5EC065FED13769D64740'::geometry AS geom
    ) AS f;
    
                 wkt              | latitude  |  longitude
    ------------------------------+-----------+-------------
     POINT(-122.193963 47.675086) | 47.675086 | -122.193963
    

    在 Ruby RGeo 端,可以使用WKBParser 获得类似的信息。例如,在tc_wkb_parser.rb 中你可以做类似的事情:

    parser_ = ::RGeo::WKRep::WKBParser.new
    obj_ = parser_.parse('0101000020E61000009468C9E3698C5EC065FED13769D64740')
    print [obj_.y, obj_.x]  # [-122.193963, 47.675086]
    

    【讨论】:

    • 是的,你是对的,但我更愿意在 UI 层而不是数据层中进行这种“格式化”。我熟悉数据库功能,但我想弄清楚如何格式化/解析表单绑定逻辑中的值。
    • @Mike 看起来你需要RGeo::WKRep::WKBParser;见上文
    • 谢谢迈克。你很有帮助,但我想我的问题太简单了,因为我是个新手。我一直在努力解决如何在 RoR 呈现的 HTML 中获取正确格式的值。终于发现就像将<%= f.text_field :location %>更改为<%= f.text_field :location, :value => @object.location_coordinates.to_s %>一样简单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    相关资源
    最近更新 更多