MySQL计算两坐标之间的距离

表结构及数据

DROP TABLE IF EXISTS `tb_locationpoint`;
CREATE TABLE `tb_locationpoint`(
    `id`        int(11)       NOT NULL AUTO_INCREMENT,
    `province`  varchar(20)   NOT NULL COMMENT '省份', 
    `city`      varchar(20)   NOT NULL COMMENT '城市',
    `longitude` double(10, 3) NOT NULL COMMENT '经度',
    `latitude`  double(10, 3) NOT NULL COMMENT '纬度',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

INSERT INTO `tb_locationpoint`
VALUES (1, '山东', '济南', 116.938477, 36.597889),
       (2, '河北', '石家庄', 114.477539, 38.030786),
       (3, '浙江', '杭州', 120.058594, 30.334954),
       (4, '河南', '郑州', 113.629, 34.744),
       (5, '安徽省', '合肥', 117.170, 31.520);

查询

SELECT id, province, city,
    round((st_distance(
			 point(longitude, latitude),
			 point(116.28, 39.54)
	 ) / 0.0111) * 1000)AS distance
FROM `tb_locationpoint`
ORDER BY distance;

在这里插入图片描述
round函数用于数据的四舍五入,它有两种形式:

  1. round(x,d) ,x指要处理的数,d是指保留几位小数
    这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;
  2. round(x) ,其实就是round(x,0),也就是默认d为0;

st_distance 为mysql5.6+版本中开始自带的经纬度计算函数

point 在MySQL中的point用于表示GIS中的地理坐标

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值