我应该使用什么类型的数据来存储Lat
和Lng
从谷歌地图到我的数据库?我不确定我应该在 mysql 中输入多少位小数。
那么我应该使用Decimal
等Float
吗?我应该花多少钱Length
?同时,为Lat
和Lng
在Mysql中放置索引是否很好?
我应该使用什么类型的数据来存储Lat
和Lng
从谷歌地图到我的数据库?我不确定我应该在 mysql 中输入多少位小数。
那么我应该使用Decimal
等Float
吗?我应该花多少钱Length
?同时,为Lat
和Lng
在Mysql中放置索引是否很好?
这取决于您将如何处理这些信息,以及您需要的值有多精确。
一个纬度或经度大约是 69 英里。(纬度的实际距离略有不同,距离赤道越远,经度的距离越小。
DECIMAL(9,6) allows for a resolution of about 4 inches
DECIMAL(8,5) allows for a resolution of about 3 1/2 feet
DECIMAL(7,4) allows for a resolution of about 36 feet
(对于纬度,您只需要小数点前两位,而不是经度所需的三位。)
如果您正在为 Google 地图执行此操作并绘制一条折线(可能有几千个点),您可以将这些点存储在一个数组中,对数组进行序列化,并将其存储在 BLOB 或 TEXT 字段中。我没有对此进行任何计时试验,但我怀疑它比转换为 DEC 更快。或者,如果您将其传递给 JavaScript,您可以使用 JSON_ENCODE 将其存储为 JSON 字符串,并在每次使用绘图时保存该转换。
我对 lat 和 lon 都使用 decimal(10,6),这可以为您提供优于 1 米的分辨率。(记住要考虑减号)。
从 MySQL 手册中引用关于十进制类型的减号:
标准 SQL 要求 DECIMAL(5,2) 能够存储任何五位和两位小数的值,因此可以存储在薪水列中的值范围为 -999.99 到 999.99。MySQL 从 MySQL 5.0.3 开始强制执行此限制。在 5.0.3 之前,在范围的正端,该列实际上可以存储高达 9999.99 的数字。(对于正数,MySQL 5.0.2 和更早的版本使用为符号保留的字节来扩展范围的上限。)
资源:
http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html