【发布时间】:2011-10-31 22:47:56
【问题描述】:
我已将纬度和经度存储在单独的字段中。我从谷歌获得纬度和经度坐标,并使用它们使用一些公式找到附近的地方。现在有时纬度和经度值会达到小数点后 15 位,像这样 --> 15.123456789000001。存储这些值的最佳数据类型是什么?现在我正在使用 Double 来存储纬度和经度坐标。
提前致谢
【问题讨论】:
我已将纬度和经度存储在单独的字段中。我从谷歌获得纬度和经度坐标,并使用它们使用一些公式找到附近的地方。现在有时纬度和经度值会达到小数点后 15 位,像这样 --> 15.123456789000001。存储这些值的最佳数据类型是什么?现在我正在使用 Double 来存储纬度和经度坐标。
提前致谢
【问题讨论】:
我使用了 DECIMAL 数据类型。
CREATE TABLE IF NOT EXISTS `example` (
`lat` decimal(18,15) DEFAULT NULL,
`long` decimal(18,15) DEFAULT NULL
);
【讨论】:
您可以尝试将空间扩展与 GIS 结合使用。 看http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html
【讨论】:
99% 的情况下,您选择的任何浮点数据类型都应该足够了。
是的,我知道它们不能总是精确地表示精确到小数点后 15 位的值,但是没关系。纬度/经度到小数点后 15 位是指定一个位置,其(声称的)精度约为一对氢原子的宽度。您只需要小数点后六位即可获得一米以内的精度,这对于大多数情况来说已经足够了。很少有人需要超过厘米级的精度(8 个位置),而 10 米甚至 100 米的精度对于许多应用来说已经足够了。
当然,这一切都是假设原始数据源首先是准确的。我手机的 GPS 很少声称精度优于 10m(即使那样,它的地图也有一半的时间没有显示我在声称我应该在的 10m 圈内的实际位置),因此以更高的精度存储位置将毫无意义,而且误导。诚然,您使用的数据源可能比集成在手机中的廉价 GPS 接收器更准确,但即便如此,它也不太可能一直精确到分子级。
【讨论】: