Ruby on rails 在rails中处理lat/long和mysql空间点

Ruby on rails 在rails中处理lat/long和mysql空间点,ruby-on-rails,architecture,spatial,Ruby On Rails,Architecture,Spatial,关于mysql空间数据类型有很多问题,但是我的问题更具体地说是如何在rails MVC架构中最好地处理它们 我有一个输入表单,管理员用户可以在其中创建一个新的兴趣点,比如说,一家餐厅并输入一些信息。他们还可以输入十进制格式的人类可读的纬度和经度 但是,对于距离计算等。。。我将位置数据作为空间点存储在数据库中 因此,我的问题是如何在rails的MVC架构中最好地处理这个问题 以下是我的一些想法,但似乎没有什么是干净的: Call:after_filter方法,该方法获取对象的新实例并执行原始SQ

关于mysql空间数据类型有很多问题,但是我的问题更具体地说是如何在rails MVC架构中最好地处理它们

我有一个输入表单,管理员用户可以在其中创建一个新的兴趣点,比如说,一家餐厅并输入一些信息。他们还可以输入十进制格式的人类可读的纬度和经度

但是,对于距离计算等。。。我将位置数据作为空间点存储在数据库中

因此,我的问题是如何在rails的MVC架构中最好地处理这个问题

以下是我的一些想法,但似乎没有什么是干净的:

  • Call:after_filter方法,该方法获取对象的新实例并执行原始SQL更新,该更新处理“GeomFromText('POINT(lat long)'))”属性。问题是“lat/long”将是我的create表单中的文本字段,尽管这破坏了rails提供的干净表单:对象体系结构,因为lat/long不是真正的属性,它们只是让用户输入非mysql空间值

  • 也许在数据库中创建一个触发器,在更新该行的行插入之后运行?我不知道,而且这些触发器似乎无法访问lat/long,除非我存储lat/long以及空间点,然后用lat/long小数在db中创建行,然后在创建后运行触发器以更新空间点。我想如果我在模型中添加lat/long列,我也可以使用after_过滤器来实现这一点


还有其他想法吗?我认为存储lat/long是多余的,因为我将真正使用空间点进行距离计算,等等。。。但如果我允许人工编辑,这可能是必要的

查看使用普通lat/lng柱作为浮标(并使用gem)进行距离计算的公司。但是,如果希望使用数据库的地理空间功能,则支持将点或线字符串等基本空间要素作为列类型。我希望这些帮助。

我同意无望,geokit很好,我也使用它

如果你想自己做,我会做一个after_过滤器,但是将update方法外部化到一个线程中。这样,您在保存时不会慢下来,但仍然有很好的代码和及时更新的列


触发器不是很好,数据库应该提供数据,但不能执行逻辑。

很酷,我看过geokit,但出于某种原因,我一直认为我必须将位置存储为空间位置,而不是lat/long。我使用ym4r_gm作为显示包,不管怎样,它需要长/长时间,所以它们应该配合得很好。是的,Geokit和ym4r_gm正是我使用的,目前它工作正常。也许它会演变成/如果我必须扩大规模。我似乎找不到geokit插件?脚本/插件安装git://github.com/andre/geokit-rails.git 正在返回“未找到插件”。。。?这可能是git托管的问题吗?没关系,我更新了rails,并尝试使用http协议,结果成功了。