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
相关推荐
ShuiShenHuoLe5 分钟前
HmarkX(码笺)的本地数据库模块重构实战
数据库·oracle·重构
Databend7 分钟前
从 Kafka 到 Databend Cloud:万亿级 Agent Trace 接入链路的工程实践
大数据·数据库·agent
倔强的石头_14 分钟前
SQL Server数据迁移,不只是把数据搬过去
数据库
acd1200923 分钟前
Redis 缓存和数据库一致性,到底怎么搞?
数据库·redis·缓存
sugar__salt25 分钟前
MyBatis-Plus 从入门到实战:高效简化数据库开发的完整指南
数据库·spring boot·mybatis·数据库开发
CodeBlog-star29 分钟前
AI Agent 高并发实战:Redis 限流、队列、缓存与高可用全栈方案
数据库·redis·缓存
TDengine (老段)31 分钟前
TDengine taosX 与 Explorer — 数据集成与可视化管理
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Leon-Ning Liu35 分钟前
Oracle 26ai新特性:Lock-Free Reservations(无锁预留)
数据库·oracle
xiaopai94537 分钟前
WPS能否替代工程项目管理系统
大数据·数据库·项目管理系统·建米软件
数据库小学妹1 小时前
空间数据库查询慢怎么排查?索引失效、表膨胀、SQL优化实战(附排查命令)
数据库·性能优化·信创·故障排查·索引调优·空间数据库