在MySQL中存储lng / lat的数据类型


14

我在MySQL数据库中存储了大量的lnt / lat点。目前,这些是英国在M中的预计点,但从长远来看,我想确保可以存储世界各地的点的坐标。我应该使用哪种数据类型?

我开始使用decimal(18,12),但不确定是否需要此精度或是否可以使用float。我包括了我的代码,以防万一我应该考虑的其他事项:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

我是SQL的新手,所以不确定运行查询时数据类型是否重要。我假设总体内存将根据变量类型而有所不同。对于这种类型的工作,使用空间数据库而不是基本的MySQL数据库有好处吗?

Answers:


16

在StackOverlow上也提出了这个问题

最重要的答案是MySQL Spatial Extensions。有链接与这些扩展工作负载这里

如果您不想使用空间类型,并且正在从GPS单位或地理编码服务获取值,则可以将十进制精度与数据源进行匹配。一般的经验法则是将数据存储的精度比在应用程序中显示数据的精度高两个位置。

Google的一个代码示例中,代码在地图上显示点,它们指出:

创建MySQL表时,您要特别注意lat和lng属性。使用Google Maps当前的缩放功能,小数点后只需要6位精度。

为了使表格所需的存储空间最小,可以指定lat和lng属性为大小为(10,6)的浮点数。这将使字段在小数点后存储6位数字,再在小数点前存储多达4位数字,例如-123.456789度

我不会担心数值类型之间的性能差异。体面的指数将产生更大的影响。


+1是个好答案!这就是我会说并做的。
OptimizePrime

感谢您的回答-我已经阅读了MySQL Spatial Extensions文档,但是您如何开始使用它们呢?我在GoDaddy上只有一个默认的MySQL数据库;我不知道我应该从哪里开始。
djq 2011年


1
而答案更新与链接到更多的链接
geographika

为什么是4个整数?
Alix Axel

6

除非由于其他原因而与MySQL绑定,否则您应该真正考虑使用支持空间的数据库(例如postgis),该数据库具有Point(以及Line,Polygon等)对象来为您处理这些详细信息。当您对整个世界进行更改时,也会获得投影支持。

2019年:对于像我这样也不会阅读注释的人-MySQL支持空间数据类型,据说速度较慢,没有证据。


注意:对于那些刚刚开始阅读以上内容的人,MySql 5.7+现在可以与空间索引一起使用。
HopeKing

但它仍然很慢
伊恩·透顿

能否请您提供显示缓慢的资源?我正在考虑将其用于记录少于一百万的项目。谢谢。
HopeKing

个人经历没有公开数据。无效几何形状等太多问题会破坏事物
Ian Turton

谢谢。我需要的只是基于数据库记录的点之间的距离(并且没有像Polygon这样的复杂要求),因此现在使用mysql可能是安全的。
HopeKing
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.