当前位置: 首页 > 面试题库 >

纬度/经度(小数点后8位)应使用哪种MySQL数据类型?

拓拔弘厚
2023-03-14
问题内容

我正在处理地图数据,并且Latitude/Longitude扩展到了8个小数位。例如:

Latitude 40.71727401
Longitude -74.00898606

我在Google文档中看到了 使用:

lat FLOAT( 10, 6 ) NOT NULL,  
lng FLOAT( 10, 6 ) NOT NULL

但是,它们的小数位只能移到6。
我应该使用FLOAT(10, 8)还是应该考虑使用另一种方法来存储此数据,以便精确。它将与地图计算一起使用。谢谢!


问题答案:

DECIMAL是用于精确算术的MySQL数据类型。与FLOAT不同,它的精度对于任何大小的数字都是固定的,因此通过使用它而不是FLOAT,可以在进行某些计算时避免精度误差。如果您只是存储和检索数字而无需计算,那么在实践中FLOAT是安全的,尽管使用DECIMAL不会造成任何危害。通过计算,FLOAT基本上还是可以的,但是绝对要保证8d.p。精度,您应该使用DECIMAL。

纬度的范围是-90至+90(度),因此可以使用DECIMAL(10,8),但是经度的范围是-180至+180(度),因此您需要DECIMAL(11,8)。第一个数字是存储的总位数,第二个数字是小数点后的数字。

简而言之: lat DECIMAL(10, 8) NOT NULL, lng DECIMAL(11, 8) NOT NULL

这说明了MySQL如何使用浮点数据类型。

更新: MySQL支持空间数据类型,并且Point是可以使用的单值类型。例:

CREATE TABLE `buildings` (
  `coordinate` POINT NOT NULL,
  /* Even from v5.7.5 you can define an index for it */
  SPATIAL INDEX `SPATIAL` (`coordinate`)
) ENGINE=InnoDB;

/* then for insertion you can */
INSERT INTO `buildings` 
(`coordinate`) 
VALUES
(POINT(40.71727401 -74.00898606));


 类似资料:
  • 我正在处理地图数据,并且< code >纬度/经度扩展到8个小数位。例如: 我在谷歌文档中看到它使用: 但是,它们的小数位数只到6位。< br >我应该使用< code>FLOAT(10,8)还是考虑使用其他方法来存储此数据,以确保其准确性。它将用于地图计算。谢谢!

  • 问题内容: 请记住,我将在经/纬对上执行计算,哪种数据类型最适合与MySQL数据库一起使用? 问题答案: 在GIS中使用MySQL的空间扩展。

  • 问题内容: 我正在使用SQL Server 2008数据库的应用程序上工作。在此数据库中,我有一个名为Session的表,该表具有两个字段经度和纬度,用于指示用户的位置。在另一个名为Zone的表上,我有一个area属性,它是几何类型的。如何检查用户的经度和纬度坐标是否属于某个几何? 谢谢 问题答案: 您有一个将几何形状存储在欧几里得几何形状中的几何图形,并且想要将地球上由纬度和经度表示的点与之相关

  • 本文向大家介绍Android获取当前位置的经纬度数据,包括了Android获取当前位置的经纬度数据的使用技巧和注意事项,需要的朋友参考一下 现在有这么一个需求:开启一个Service服务,获取当前位置的经纬度数据,将获取的数据以广播的方式发送出去,注册广播的Activity接收广播信息,并将接收到的数据在当前Activity显示,如果当前位置发生变化,经纬度数据改变,获取改变后的经纬度数据,通过H

  • 问题内容: 应该很容易。我本来是用javascript来做的,但是在设置我的处理程序页面中的表单之前必须先做。无论如何,我需要使这些值具有2个小数位。Ex 219333.5888888必须为219333.58。有修剪功能或其他功能吗? 问题答案: 这是格式化十进制值的简单示例

  • 问题内容: 我想将位置的纬度和经度值存储在mysql数据库表中。考虑到未来,我将希望能够在特定位置的特定半径内找到这些位置。话虽如此,我应该将纬度和经度值存储在哪些数据类型中?请给我提供一个用于创建列的创建表脚本,如下所示: 上表中是否可能缺少我会为我提供当前可能看不到的其他信息的列? 谢谢你的帮助。 问题答案: 您应将这些点存储在数据类型的单列中,该列可以用索引建立索引(如果表类型为): 这将大