【问题标题】:Suitable mysql datatype to store Latitude and Longitude in separate fields合适的 mysql 数据类型将纬度和经度存储在单独的字段中
【发布时间】:2011-10-31 22:47:56
【问题描述】:

我已将纬度和经度存储在单独的字段中。我从谷歌获得纬度和经度坐标,并使用它们使用一些公式找到附近的地方。现在有时纬度和经度值会达到小数点后 15 位,像这样 --> 15.123456789000001。存储这些值的最佳数据类型是什么?现在我正在使用 Double 来存储纬度和经度坐标。

提前致谢

【问题讨论】:

标签: mysql types


【解决方案1】:

我使用了 DECIMAL 数据类型。

CREATE TABLE IF NOT EXISTS `example` (
  `lat` decimal(18,15) DEFAULT NULL,
  `long` decimal(18,15) DEFAULT NULL 
);

【讨论】:

【解决方案2】:

您可以尝试将空间扩展与 GIS 结合使用。 看http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html

【讨论】:

  • 是的,它是使用空间扩展的好方法,但在我的情况下,纬度和经度已经存储在单独的字段中。所以,现在很难改变结构。
【解决方案3】:

99% 的情况下,您选择的任何浮点数据类型都应该足够了。

是的,我知道它们不能总是精确地表示精确到小数点后 15 位的值,但是没关系。纬度/经度到小数点后 15 位是指定一个位置,其(声称的)精度约为一对氢原子的宽度。您只需要小数点后六位即可获得一米以内的精度,这对于大多数情况来说已经足够了。很少有人需要超过厘米级的精度(8 个位置),而 10 米甚至 100 米的精度对于许多应用来说已经足够了。

当然,这一切都是假设原始数据源首先是准确的。我手机的 GPS 很少声称精度优于 10m(即使那样,它的地图也有一半的时间没有显示我在声称我应该在的 10m 圈内的实际位置),因此以更高的精度存储位置将毫无意义,而且误导。诚然,您使用的数据源可能比集成在手机中的廉价 GPS 接收器更准确,但即便如此,它也不太可能一直精确到分子级。

【讨论】:

  • 很棒的信息。你能告诉我所有准确度的准确度映射吗?或指出此信息的来源。
  • 公制和有效数字的优点在于它们都是 10 的因数。如果小数点后 8 位 = 1 厘米精度,则 7 位 = 10 厘米、6 = 100 厘米等。另请注意1度所代表的地表距离随纬度而变化。要获得精确的映射,请使用csgnetwork.com/degreelenllavcalc.html 确定目标纬度的度数(以米为单位),然后根据需要移动小数位。
  • 在我最初发布此答案四年后,现在有一个关于该主题的 xkcd:xkcd.com/2170
猜你喜欢
  • 2012-03-22
  • 2012-12-01
  • 1970-01-01
  • 2014-01-06
  • 2018-01-27
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多