数据库保存经纬度采用什么数据类型好?

数据库保存经纬度,使用什么数据类型存储好,小数点应该精确多少位?

如下表所示

赤道周长(米) 度数(度)
40076000 360
111322.2222 1
11132.22222 0.1
1113.222222 0.01
111.3222222 0.001
11.13222222 0.0001
1.113222222 0.00001
0.111322222 0.000001
0.011132222 0.0000001
所以,只需要精确到小数点后7位,精度就是1CM,因此,数据库保存经纬度采用 decimal(10,7) 即可。

问题1:为什么不采用float?
答:float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,

问题2:为什么不用字符串?
答:字符串不方便数据库计算

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个字段代表的是 MySQL 数据库中的地理坐标点,其中第一个值代表经度,第二个值代表纬度。要在 Java 中获取这个点的经纬度,你可以使用 MySQL Connector/J 驱动连接到 MySQL 数据库,并使用 SQL 查询语句来获取这个字段,然后使用 Java 的字符串处理方法将其转换为经度和纬度的值。例如,下面的代码片段演示了如何使用 MySQL Connector/J 获取这个字段的经纬度: ```java // 加载 MySQL Connector/J 驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接到 MySQL 数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 执行查询语句 PreparedStatement stmt = conn.prepareStatement("SELECT ST_X(location), ST_Y(location) FROM mytable WHERE id = ?"); stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); // 获取查询结果 if (rs.next()) { double longitude = rs.getDouble(1); double latitude = rs.getDouble(2); // 输出经纬度 System.out.println("Longitude: " + longitude); System.out.println("Latitude: " + latitude); } // 关闭连接 rs.close(); stmt.close(); conn.close(); ``` 其中,`location` 是存储地理坐标点的字段名,`mytable` 是存储这个字段的表名,`id` 是这个记录的主键值。这个查询语句使用 MySQL 的空间函数 `ST_X` 和 `ST_Y` 来获取这个字段的经度和纬度值。如果你在表中保存地理坐标点的数据类型为 `Point`,则这个查询语句可以改为: ```sql SELECT ST_X(geometry), ST_Y(geometry) FROM mytable WHERE id = ? ``` 其中,`geometry` 是存储地理坐标点的字段名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值