Mysql实现经纬度距离的排序(粗略的城市排序)

一 创建省市、经纬度关系表

java 复制代码
CREATE TABLE `t_city` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint DEFAULT '0' COMMENT '是否删除',
  `code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '城市编码',
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '城市名称',
  `province` varchar(50) DEFAULT NULL COMMENT '省份',
  `longitude` decimal(10,6) DEFAULT NULL COMMENT '经度',
  `latitude` decimal(10,6) DEFAULT NULL COMMENT '纬度',
  PRIMARY KEY (`id`),
  KEY `idx_pro_city` (`province`,`name`) COMMENT '省市'
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备租赁';

可以将省市经纬度录入,DeepSeek就可以查到。

省市参考链接:https://raw.githubusercontent.com/modood/Administrative-divisions-of-China/master/dist/pca-code.json

https://github.com/wecatch/china_regions

https://github.com/modood/Administrative-divisions-of-China

java 复制代码
-- 使用MySQL的Haversine公式计算距离
SELECT 
   *,
    ROUND(
        6371 * 2 * ASIN(
            SQRT(
                POW(SIN(RADIANS((latitude - 39.9042) / 2)), 2) +
                COS(RADIANS(39.9042)) * COS(RADIANS(latitude)) *
                POW(SIN(RADIANS((longitude - 116.4074) / 2)), 2)
            )
        ), 2
    ) AS distance_km
FROM cities(可以替换成你的业务表)
WHERE longitude IS NOT NULL AND latitude IS NOT NULL
ORDER BY distance_km ASC, gmt_create desc
LIMIT 20;


-- 参数说明:? 依次为:目标纬度,目标纬度,目标经度
-- 例如查找距离北京市最近的20个城市
-- 参数:39.9042, 39.9042, 116.4074
相关推荐
z落落7 分钟前
SQL 表的基本操作 数据库增删改查(CRUD)+SQL 进阶语法详解(标识列插入、模糊查询、Union、变量、运算、别名)
数据库·sql
代码的小搬运工3 小时前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
Cx330❀9 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c238569 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
大阳光男孩9 小时前
Spring Boot 整合 Debezium 实现 MySQL 增量数据监听(嵌入式版)
spring boot·后端·mysql
我科绝伦(Huanhuan Zhou)9 小时前
MySQL极端场景数据丢失防护:从Crash-Safe到异地备份
数据库·mysql
辞旧 lekkk10 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
明志数科10 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒10 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
笨蛋不要掉眼泪10 小时前
MySQL架构揭秘:MVCC解决读一致性问题
数据库·mysql·架构