全国省市区经纬度MySQL数据导入与LBS查询实战
简介这份 MySQL 数据资源面向需要省、市、区三级行政区划经纬度坐标的开发者与数据分析人员可用于地图打点、区域聚合统计、地址解析、物流配送范围计算等场景帮助省去逐条采集与清洗地理坐标的繁琐工作。压缩包内共 1 个文件为单个 sql 脚本整体约 127KB导入后即可直接建表并批量写入省市区记录字段结构清晰便于按层级关联查询或与业务表做联表匹配。目前已有 2974 人学习下载说明其在同类数据中具备一定参考价值。数据覆盖全国范围的省、市、区三级划分并附带对应经纬度信息适合作为基础地理字典表长期复用也能为可视化大屏、区域热力图、门店选址分析等提供底层坐标支撑减少重复造轮子的时间成本。1. 全国省市区经纬度 MySQL 数据一份能直接跑进业务库的行政区划底表做 LBS 相关业务的人迟早会撞上一件事用户下单要按「省市区」聚合配送范围要按「区」算距离后台报表要按「市」画热力图结果翻遍项目里只有一张user_address表省市区全是用户手填的字符串同一个「杭州市」能写出七八种写法。这时候你需要的不是继续在业务表里GROUP BY而是一份干净的、带经纬度的全国省市区行政区划底表。这次拆的这份资源就是一份可以直接导入 MySQL 的全国省市区经纬度数据。它的核心价值在于三点层级完整省—市—区三级、带中心点经纬度能直接算距离、做聚合、结构适配 MySQL建表语句和字段类型都是现成的。适合谁用做电商配送、门店选址、本地生活、数据看板、用户地域分析的开发者尤其是那种「不想接第三方地图 API 的行政区划接口只想在本地库里 join 一下」的场景。下面我按「先看结构、再导入、再查询、最后避坑」的顺序把这份数据怎么落地讲透。2. 先看清表结构和字段语义别急着 INSERT拿到一份 SQL 或 CSV 数据最忌讳的就是直接source进去。先搞清楚它有几张表、字段是什么类型、经纬度是哪个坐标系后面能省掉大量返工。2.1 三级行政区划的典型表设计全国省市区数据最常见的组织方式有两种单表自关联一张表用parent_id串起三级和分表存储省、市、区各一张表。这份资源走的是单表方案字段大致如下字段名类型含义备注idINT / BIGINT主键自增或业务编码parent_idINT父级 ID省级为 0 或 NULLnameVARCHAR(50)行政区名称如「杭州市」levelTINYINT层级1 省 / 2 市 / 3 区lngDECIMAL(10,6)经度中心点latDECIMAL(10,6)纬度中心点codeVARCHAR(12)行政区划代码如 330100这里有两个参数值得单独说。第一是经纬度用DECIMAL(10,6)而不是FLOAT因为浮点数在WHERE lng xxx这种等值查询里会出现精度玄学DECIMAL定点存储更稳。第二是level字段它决定了你查询时怎么过滤没有这个字段你就得靠parent_id递归写起来很别扭。提示如果你的业务只需要省和市导入后可以只保留level 2的数据能显著减小表体积查询也更快。2.2 经纬度坐标系先确认是 WGS84 还是 GCJ02这是最容易翻车的地方。国内地图服务用的坐标系不统一GPS 原始数据是 WGS84而很多地图展示用的是经过偏移的坐标系。如果你拿这份数据的经纬度去和地图 SDK 返回的坐标做距离计算坐标系不一致会导致几百米的偏差。判断方法很简单随便挑一个你熟悉的城市中心点比如某市市政府所在地把数据里的经纬度和地图上拾取的坐标对比。如果差了几百米基本就是坐标系不同。常见做法是数据入库时统一存一种坐标系在应用层做转换而不是在数据库里存两套。-- 建表时给经纬度留足精度并加上联合索引 CREATE TABLE region ( id INT NOT NULL AUTO_INCREMENT, parent_id INT NOT NULL DEFAULT 0, name VARCHAR(50) NOT NULL, level TINYINT NOT NULL COMMENT 1省 2市 3区, lng DECIMAL(10,6) DEFAULT NULL, lat DECIMAL(10,6) DEFAULT NULL, code VARCHAR(12) DEFAULT NULL, PRIMARY KEY (id), KEY idx_parent (parent_id), KEY idx_level (level) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这段建表语句的关键点utf8mb4保证行政区名称里的生僻字不乱码idx_parent让「查某省下所有市」这种递归查询走得动索引idx_level用于按层级过滤。经纬度允许为 NULL因为部分区级数据可能缺失中心点硬设 NOT NULL 会导致导入失败。3. 导入 MySQL 的完整流程从文件到可查询结构确认完接下来是实操。导入方式取决于你拿到的是 SQL 文件还是 CSV两种都讲一遍。3.1 SQL 文件直接导入如果资源里是.sql文件最省事# 先建库字符集要和表一致 mysql -u root -p -e CREATE DATABASE region_db DEFAULT CHARSET utf8mb4; # 导入注意指定字符集否则中文可能变问号 mysql -u root -p --default-character-setutf8mb4 region_db region.sql # 验证导入行数 mysql -u root -p -e SELECT level, COUNT(*) FROM region_db.region GROUP BY level;逻辑说明--default-character-setutf8mb4这个参数不能省很多人导入后中文全是???就是客户端字符集和表字符集不匹配。最后那条GROUP BY level是快速验证——正常应该看到省级 30 多条、市级 300 多条、区级 2800 条左右数量级不对说明文件被截断了。3.2 CSV 文件用 LOAD DATA 导入如果是 CSV用LOAD DATA INFILE比逐行 INSERT 快一个数量级LOAD DATA LOCAL INFILE /path/to/region.csv INTO TABLE region CHARACTER SET utf8mb4 FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY LINES TERMINATED BY \n IGNORE 1 LINES (parent_id, name, level, lng, lat, code);参数说明LOCAL关键字允许从客户端读文件如果报The MySQL server is running with --secure-file-priv错误要么把文件放到服务器允许的目录要么加上LOCAL。OPTIONALLY ENCLOSED BY 处理字段里带逗号的情况行政区名称一般不会但code字段有时会被引号包起来。IGNORE 1 LINES跳过表头。注意导入前先SET GLOBAL local_infile 1;否则LOAD DATA LOCAL会被拒绝。这个开关在 MySQL 8.0 默认是关的属于典型的环境坑。3.3 导入后的数据校验导入完别急着用跑几条校验 SQL-- 检查有没有孤儿节点parent_id 指向不存在的记录 SELECT c.* FROM region c LEFT JOIN region p ON c.parent_id p.id WHERE c.parent_id ! 0 AND p.id IS NULL; -- 检查经纬度为空的记录 SELECT level, COUNT(*) FROM region WHERE lng IS NULL OR lat IS NULL GROUP BY level;第一条查的是层级断裂——如果某个区的parent_id指向一个不存在的市你的三级联动就会在这里断掉。第二条查经纬度缺失区级数据缺失中心点是常态心里要有数业务上做好兜底比如用所属市的中心点代替。4. 典型查询场景三级联动、距离计算、区域聚合数据进库了真正体现价值的是查询。下面三个场景基本覆盖了 80% 的 LBS 业务需求。4.1 省市区三级联动查询前端下拉框联动本质是两次按parent_id查询-- 查所有省 SELECT id, name FROM region WHERE level 1 ORDER BY id; -- 根据省 id 查市 SELECT id, name FROM region WHERE parent_id ? AND level 2 ORDER BY id; -- 根据市 id 查区 SELECT id, name FROM region WHERE parent_id ? AND level 3 ORDER BY id;这三条 SQL 走idx_parent索引单次查询在毫秒级。如果并发高常见做法是把整份数据加载进 Redis用region:children:{parentId}做缓存数据库只做兜底。数据量不大三千多条全量缓存内存占用可以忽略。4.2 用经纬度算两点距离有了中心点经纬度就能在 SQL 里直接算距离不用调外部接口-- 计算某用户位置到各区的球面距离单位公里取最近的 5 个 SELECT id, name, 6371 * ACOS( COS(RADIANS(?)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(?)) SIN(RADIANS(?)) * SIN(RADIANS(lat)) ) AS distance_km FROM region WHERE level 3 HAVING distance_km 10 ORDER BY distance_km LIMIT 5;参数说明6371是地球平均半径公里两个?分别是用户纬度和经度。HAVING而不是WHERE因为distance_km是计算列。这个公式是球面余弦定理在几十公里范围内精度够用如果要更精确换成 Haversine 公式。注意这种全表计算无法走索引区级三千条数据没问题数据量再大就得先用经纬度范围粗筛WHERE lng BETWEEN ? AND ?再精算。4.3 按区域聚合业务数据报表场景经常要「按省统计订单量」这时候底表的作用是补全名称SELECT r.name AS province, COUNT(o.id) AS order_cnt FROM orders o JOIN region r ON o.province_id r.id WHERE o.created_at 2024-01-01 GROUP BY r.id, r.name ORDER BY order_cnt DESC;这里的前提是业务表存的是province_id而不是省名字符串。如果历史数据存的是名字就得先做一次名称清洗映射这也是为什么建议新项目一律存 ID。5. 避坑与排查导入和使用中最容易翻车的五件事这一章是我自己踩过和帮别人排查过的真实问题按「现象 → 原因 → 解决」列出来。现象一导入后中文全是问号。原因客户端连接字符集不是 utf8mb4或者建库时用了 latin1。解决建库、建表、连接三处字符集统一成 utf8mb4导入命令加--default-character-setutf8mb4。现象二LOAD DATA LOCAL报错 1148。原因MySQL 8.0 默认关闭local_infile。解决SET GLOBAL local_infile 1;连接串上加allowLoadLocalInfiletrueJDBC 场景。生产环境如果安全策略不允许就改用mysqlimport或分批 INSERT。现象三三级联动到区级查不出来。原因区级数据的parent_id和市级id对不上通常是数据源本身层级编码不一致。解决用第 3.3 节的孤儿节点查询定位然后按code前六位重新关联行政区划代码前两位省、中间两位市、后两位区这个规则很稳。现象四距离计算结果偏差几百米。原因坐标系不一致数据是 WGS84地图 SDK 返回的是偏移后的坐标。解决统一坐标系在应用层做转换别在库里混存。现象五DECIMAL经纬度等值查询查不到。原因导入时精度被截断比如存进去是120.123456查询写120.1234。解决查询用范围BETWEEN而不是等值或者统一保留六位小数。提示每次导入新版本数据前先RENAME TABLE region TO region_bak;留个后悔药验证没问题再删。行政区划每年都有调整数据更新是常态。6. 进阶技巧把底表用出花来的三个习惯数据导入只是起点真正拉开差距的是怎么用它。分享三个我长期养成的习惯。第一个习惯是给经纬度加空间索引。MySQL 支持POINT类型和SPATIAL INDEX把lng、lat合成一个POINT字段后范围查询能走空间索引比全表算距离快得多ALTER TABLE region ADD COLUMN location POINT SRID 4326; UPDATE region SET location ST_GeomFromText(CONCAT(POINT(, lng, , lat, )), 4326); CREATE SPATIAL INDEX idx_location ON region(location); -- 查询某点 10 公里内的区 SELECT id, name FROM region WHERE ST_Distance_Sphere(location, ST_GeomFromText(POINT(120.15 30.28), 4326)) 10000;SRID 4326是 WGS84 的空间参考标识ST_Distance_Sphere直接返回米。这个方案比手写余弦公式干净而且能走索引。第二个习惯是定期核对行政区划变更。每年都有撤县设区、合并乡镇的情况底表不更新业务上就会出现「用户选的区在库里查不到」。我一般每季度拉一次最新数据用code做主键比对只更新变化的行而不是整表重导。第三个习惯是把常用查询封装成视图。比如「省市区全路径」这种需求每次都写递归太累建个视图一劳永逸CREATE VIEW v_region_full AS SELECT c.id AS region_id, c.name AS region_name, p.name AS city_name, g.name AS province_name, c.lng, c.lat FROM region c JOIN region p ON c.parent_id p.id JOIN region g ON p.parent_id g.id WHERE c.level 3;这样业务查询直接SELECT * FROM v_region_full WHERE region_id ?省市区名称一次拿全不用在应用层拼三次查询。从那以后我每次拿到新的行政区划数据都强制走一遍「建表 → 导入 → 孤儿校验 → 坐标系确认 → 视图封装」这五步再急也不跳过校验。希望这份底表能帮你把地域相关的需求一次做扎实帮到你。本文还有配套的精品资源点击获取

相关新闻

Spring Boot秒杀系统实战:库存扣减、限流与异步下单防超卖

Spring Boot秒杀系统实战:库存扣减、限流与异步下单防超卖

简介:这是一套基于SpringBoot的电商秒杀系统完整项目源码,面向计算机相关专业的在校学生、教师及企业开发者,尤其适合作为毕业设计、课程设计或项目立项演示的参考方案。项目采用MySQL、SpringBoot、Redis与RabbitMQ技术栈,重点解…

2026/10/9 16:22:32 阅读更多 →
无人机视角多类别目标检测数据集:从标注格式到训练落地的完整链路

无人机视角多类别目标检测数据集:从标注格式到训练落地的完整链路

简介:这份无人机视角多类别目标检测数据集面向从事航拍视觉算法、无人机自动巡检与智慧城市研究的开发者,提供可直接用于YOLO系列模型训练与验证的标注样本。数据按训练720张、验证192张、测试103张划分,覆盖Bridge、Airplane、Bicycle、Boat…

2026/10/9 16:22:32 阅读更多 →
Oracle补丁包应用实战:从命名解析到验证回滚

Oracle补丁包应用实战:从命名解析到验证回滚

简介:面向 Oracle Database 11.2.0.3 的补丁集更新包,编号 20760997,集成 2015 年 7 月关键补丁更新(CPU),适用于 Linux x86-64 平台。补丁集更新涵盖安全修复、稳定性改进与性能优化,可降低已知…

2026/10/9 16:22:32 阅读更多 →

最新新闻

仿仙剑Java游戏实战:状态机、碰撞检测与JSON存档改造指南

仿仙剑Java游戏实战:状态机、碰撞检测与JSON存档改造指南

简介:这是一份基于Java编写的仿仙剑奇侠传游戏工程,定位为毕业设计或课程设计素材,适合希望通过完整项目提升编程能力的初学者和中级开发者。项目实现了角色移动、战斗系统、剧情推进、进度存档等核心玩法,并融入事件驱动、状态机…

2026/10/9 17:28:36 阅读更多 →
Claude Opus 5.5 焚诀实战:Sub-agent、CLAUDE.md 与 effort 调优指南

Claude Opus 5.5 焚诀实战:Sub-agent、CLAUDE.md 与 effort 调优指南

1. 这次“焚诀”到底更新了什么Claude Opus 5.5 这个版本号一出来,我第一反应是去翻更新日志里跟日常写代码最相关的几个点。说实话,模型跑分涨了多少、榜单排第几,对天天用 Claude Code 干活的人来说意义不大,真正影响手感的是三…

2026/10/9 17:28:36 阅读更多 →
全屏视频背景HTML实现:播放、裁剪与性能优化

全屏视频背景HTML实现:播放、裁剪与性能优化

简介:这是一份面向网页前端初学者的全屏视频背景实现源码包,以超文本标记语言与层叠样式表为核心技术,解决网页视觉沉浸感与不同屏幕尺寸下的适配问题,适合个人网站与品牌落地页快速落地。资源共三个文件,包含一个mp4示…

2026/10/9 17:28:36 阅读更多 →
Python爬虫实战:B站弹幕与QQ音乐热评抓取全流程

Python爬虫实战:B站弹幕与QQ音乐热评抓取全流程

1. 从两个爬虫项目说起:为什么选B站弹幕和QQ音乐热评做爬虫的人都有一个共识:练手项目选得好,学习效率能翻倍。我前后带过不少刚入门的朋友,发现一个规律——凡是拿电商网站练手的,十有八九卡在登录态和验证码上&#…

2026/10/9 17:28:36 阅读更多 →
Claude Code 从零上手:安装配置、权限管理与源码阅读实战

Claude Code 从零上手:安装配置、权限管理与源码阅读实战

简介:这份源码资源面向希望系统掌握 Claude Code CLI 的开发者与编程学习者,尤其适合需要提升代码编辑、文件管理与终端操作效率的中高级用户。内容围绕快速入门、常用命令、Skill 创建与使用技巧、高级功能配置及个性化设置展开,并附常见问题…

2026/10/9 17:28:36 阅读更多 →
基于卷积神经网络的海洋垃圾识别分类:从数据清洗到模型部署全流程

基于卷积神经网络的海洋垃圾识别分类:从数据清洗到模型部署全流程

简介:这是一套面向计算机相关专业学生的毕业设计资源,主题为基于卷积神经网络的海洋垃圾识别分类,适合正在准备毕设、课程设计或期末大作业的学习者,也可作为深度学习项目实战练习的参考。资源包共101个文件,约74.62MB…

2026/10/9 17:27:35 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →