Rails和MySQL上经度和纬度的最佳列类型

|| 我想知道在MySQL + Rails上存储纬度/经度的最佳列类型是什么。 精度必须足以存储从移动设备和/或地理编码器获得的所有经度/纬度度。 为了达到最佳查询性能,存储需求应该最小。 摘自Google的官方文件: http://code.google.com/apis/maps/articles/phpsqlajax_v3.html   使用当前的缩放功能   Google Maps,您只需要6   小数点后的精度位数。   保留所需的存储空间   您的桌子最少,您可以   指定lat和lng   属性是大小为(10,6)的浮点数。   那将使字段存储6   小数点后的数字,最多4   小数点前的数字,例如   -123.456789度。 因此,实际上Google推荐了“ 0”。 但是,对于Rails 3,似乎没有简单的方法来精确定义小数点后的“ 1”列类型。例如,您可以使用原始SQL编写迁移,如下所示:
def self.up
  execute <<-SQL
  ALTER TABLE places
    ADD `lat` FLOAT(10,6),
    ADD `lng` FLOAT(10,6)
  SQL
  add_index :places, [ :lat, :lng ]
end
但是结果
schema.rb
看起来像这样:
t.float \"lat\", :limit => 10
t.float \"lng\", :limit => 10
这缺少小数部分的精度。 在这里,我可以看到几个选项: 使用
FLOAT(10,6)
以获得最佳生产性能,并且不要在开发时转储架构(例如
rake db:test:load
)。 使用Rails支持的
DECIMAL(10,6)
,但它占用6个字节,是
FLOAT
的1.5倍(请参阅:http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html)。也许这是一个很好的折衷方案? 使用
DOUBLE
,比Google的要求大得多,占用8个字节,是
FLOAT
的2倍。这也很简单。 您有什么建议?     
已邀请:
        KISS(即提交到框架),字节很多。仅当您使用特定索引时,它才更重要。     
        根据您要对数据执行的查询类型,您可能需要调查几何类型: http://dev.mysql.com/doc/refman/5.1/en/creating-a-spatially-enabled-mysql-database.html 我对RoR并不熟悉,但是这一行尤其如此:
add_index :places, [ :lat, :lng ]
...似乎表明您正在计划运行地理空间查询。如果是这样,则该索引对所有意图和目的都将是无用的,因为btree索引对最近邻点搜索没有帮助。     

要回复问题请先登录注册