一 创建省市、经纬度关系表
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