关于 mysql 空间数据类型有很多问题,但我的问题更具体到如何在 Rails MVC 架构中最好地处理它们。
我有一个输入表单,管理员用户可以在其中创建一个新的兴趣点,比如一家餐馆并输入一些信息。他们还可以以十进制格式输入人类可读的纬度和经度。
但是,对于距离计算等...我将位置数据作为空间点存储在数据库中。
因此,我的问题是如何在 Rails 的 MVC 架构中最好地处理这个问题?
以下是我的一些想法,但似乎没有什么是干净的:
调用 :after_filter 方法,该方法采用对象的新实例并执行原始 SQL 更新以处理“GeomFromText('POINT(lat long)' ))”优点。问题在于“纬度/经度”将是我创建表单中的文本字段,尽管这会破坏 rails 提供的干净的 form_for :object 架构,因为纬度/经度并不是真正的属性,它们只是为了让不是 mysql 空间的人工输入值。
也许在数据库中创建一个触发器以在更新该行的行插入之后运行?我不知道,而且这些触发器似乎无法访问纬度/经度,除非我存储了纬度/经度以及空间点,然后在数据库中创建了带有纬度/经度小数的行,然后在创建后运行触发器以更新空间。我想如果我将 lat/long 列添加到模型中,我也可以使用 after_filter 来做到这一点。
还有其他想法吗?我认为存储纬度/经度是多余的,因为我真的会使用空间点进行距离计算等……但如果我允许人工编辑,这可能是必要的。