简介:全国1:5万接图表是GIS领域常用的基础地理矢量数据,面向ArcGIS用户及城市规划、环境分析、交通管理等方向的学习研究者,可用于地图浏览、空间查询与专题制图。该数据包共7个文件,约1.14MB,包含shapefile标准组件(主文件shp、几何索引shx、属性表dbf、投影信息prj)以及sbn、sbx空间索引和xml元数据,完整支持ArcGIS桌面端的直接加载与编辑。目前已吸引782人学习,资源成熟可靠。下载后即可利用ArcGIS完成数据可视化、属性筛选、缓冲区与网络分析,也能与遥感影像叠加开展地物识别、变化检测,还可输出专业地图或三维场景。对广大GIS学习者而言,这份数据有助于理解1:5万比例尺数据的组织方式、快速上手ArcGIS操作流程,无论是教学演示还是实际项目参考,都非常合适。 做接图表这件事,听起来就是画一堆格子,但真做过的人都知道,坑全藏在细节里。坐标基准没统一,格子就是歪的;图幅号算错一位,后面对资料全乱套。我去年在ArcGIS里给一个跨省项目做了全国范围的1:5万接图表,踩了不少坑,也总结出一套从生成网格、批量算图号到符号化出图的完整流程。这篇就把我的做法和踩坑记录都摊开讲,希望对正在做同样事情的同学有帮助。
1. 接图表的本质与1:5万分幅规则
1.1 接图表到底是什么,解决什么问题
所谓1:5万接图表,简单说就是把全国或某个区域按标准地形图分幅规则切成一个个格子,每个格子对应一幅1:5万标准图幅,再标上图幅号,形成一张索引图。
在实际工作中,这张图的用途非常具体:
- 项目踏勘前,需要在图上框出作业范围,快速知道涉及哪些图幅号,好去资料库调图或申请数据。
- 野外作业时,纸质版接图表贴在记录本上,方便随时确认当前位置在哪个图幅内。
- 成果整理阶段,按图幅号分批归档,接图表就是目录索引。
所以接图表不是“画着好看”,而是测绘生产中真正要用的工具图。做得好不好,直接影响查图、调图、归档的效率。
1.2 图幅编号规则,必须先算明白
要在ArcGIS里生成接图表,第一步是搞懂国家标准分幅编号规则。我国基本比例尺地形图采用经纬度分幅,1:100万图幅按经差6°、纬差4°划分,1:5万图幅再在1:100万图幅内按经差15′、纬差10′细分。
新图号的格式是:1:100万图号 + 比例尺代码 + 列号 + 行号。
以北京某区域为例,1:100万图号是J50(J是纬度带,50是经度列),1:5万比例尺代码是E,在这个1:100万图幅内从西向东、从北向南编号,组成类似“J50E001001”的10位图号。
我这里用文字说可能不够直观,画个简单对应关系:
1:100万图幅范围:经差6°、纬差4°
1:5万图幅范围:经差15′、纬差10′
1:100万图幅内可划出1:5万图幅:24列 × 24行 = 576幅
也就是说,每个1:100万图幅内能分出576幅1:5万图。全国范围跨了约12个1:100万图幅,总数在5万幅以上,手工编号完全不现实,必须靠工具批量处理。
2. 在ArcGIS中生成接图表的三种思路
2.1 三种方法对比,哪种适合你
做接图表,网上能找到的无非是三种路子:
方法A:直接下载现成的接图表数据
很多测绘数据共享平台有现成的1:5万图幅接图表矢量文件,下载后直接用。问题在于数据源版权不明确、坐标系混乱、时效性差,而且如果只需要某个特定范围,还得自己裁剪。
方法B:用Create Fishnet(创建渔网)工具生成网格,再用字段计算器批量算图号
这是我最推荐的做法。ArcGIS自带工具就能完成,不依赖任何外部插件或网络数据源,范围可大可小,全在图面上自己控制。
方法C:用Python脚本生成接图表
用arcpy或第三方库shapely批量构建图幅面要素,适合需要定期更新或大批量生成的场景。但对大多数同学来说,学习成本偏高,杀鸡用牛刀了。
2.2 为什么我最终选了渔网法
我的实际经验是,Create Fishnet生成的面要素天然就带四至范围,配合字段计算器用左下角坐标算图幅号,一次性把所有编号算完,连贯性好、不易出错。
更关键的是,做出来的面要素可以继续做符号化、标注、按范围抽取,整个流程都在ArcGIS里完成,后续维护方便。如果只是临时用一次,或者直接想拿现成数据,方法A最省事;但如果你想搞懂原理、过程可控,方法B绝对是最优解。
3. 核心实操:从零创建全国1:5万图幅网格
3.1 准备工作与坐标系设置
先打开ArcMap或ArcGIS Pro,加载一份中国省界矢量面数据。要注意的是,这份省界数据的坐标系最好是地理坐标系(GCS_WGS_1984或CGCS2000)。
关键点:接图表的核心是经纬度分幅,所以网格必须在经纬度坐标系下生成。如果在投影坐标系下运行Create Fishnet,出来的格子是等距的“投影格子”,和标准分幅的经纬网之间会出现偏差,后续图幅号和实际位置就对不上了。这是我第一次做的时候踩过的大坑,后面详细说。
3.2 用Create Fishnet工具生成网格
在ArcToolbox中找到Create Fishnet工具,路径是:
数据管理工具 → 要素类 → 创建渔网
参数填写见下表:
| 参数 | 说明 | 示例值 |
|---|---|---|
| 输出要素类 | 存储位置,建议放在文件地理数据库里 | D:\SheetIndex.gdb\SheetIndex_50 |
| 模板范围 | 下拉选择“与图层相同”,选择省界图层 | 省界图层 |
| 像元宽度 | 图幅经差,单位度 | 0.25 |
| 像元高度 | 图幅纬差,单位度 | 0.1666667 |
| 创建标注点 | 可选,建议勾选“创建标注点” | 是 |
| 几何类型 | 选择POLYGON | POLYGON |
这里像元宽度和高度就是1:5万图幅的经纬跨度:15′换算成度是0.25(15/60=0.25),10′换算成度是0.1666667(10/60≈0.1666667)。输入重复小数没问题,最后的微小误差在接图表这种比例下完全不影响使用。
3.3 筛选有效图幅,把多余格子删掉
全国范围生成的渔网会覆盖省界矩形范围之外的大片区域,包括海洋、邻国,这些格子不是我们需要的。
操作并不复杂:
- 菜单栏选择 → 按位置选择。
- 目标图层选图幅网格,源图层选省界面要素。
- 选择方法选“与源图层要素相交”。
- 执行后,图面上被选中的就是与中国省界相交的图幅。
- 在图层上右键 → 选择 → 切换选择,再进入编辑状态直接删除未选中的多余图幅。
这样留下的就是覆盖全国陆域范围的1:5万图幅。需要注意,如果省界数据包含南海诸岛等离岛,这种方法也能一并保留,比较方便。
4. 关键一步:批量计算图幅号
4.1 新建字段并写入左下角坐标
打开图幅网格图层的属性表,需要新建三个字段:
经度(Double类型)纬度(Double类型)图幅号(Text类型,长度20)
经度和纬度字段用来存储每个图幅的左下角坐标,这是后续算图号的基础。右键点击“经度”字段 → 字段计算器,解析器选Python,表达式输入:
!SHAPE.EXTENT.XMIN!同理,“纬度”字段输入:
!SHAPE.EXTENT.YMIN!4.2 用Python脚本计算图幅号
接下来是最核心的部分:在“图幅号”字段的字段计算器里写一段Python脚本。
先右键“图幅号”字段 → 字段计算器,解析器选Python,勾选“显示代码块”,在Pre-Logic Script Code里粘贴以下代码:
import math def calc_code(xmin, ymin): # 1:100万图幅行号(纬度带) row_100 = int(math.floor(ymin / 4.0)) letter = chr(row_100 + 65) # 1:100万图幅列号(经度列) col_100 = int(math.floor((xmin + 180.0) / 6.0)) + 1 # 1:100万图幅的西南角经纬度 lon_min_100 = (col_100 - 1) * 6.0 - 180.0 lat_max_100 = (row_100 + 1) * 4.0 # 1:5万图幅在1:100万图幅内的列号、行号 col_50 = int((xmin - lon_min_100) / 0.25) + 1 row_50 = int((lat_max_100 - (ymin + 10.0 / 60.0)) / (10.0 / 60.0)) + 1 return "{}{:02d}E{:03d}{:03d}".format(letter, col_100, col_50, row_50)然后在底部表达式框中输入:
calc_code(!经度!, !纬度!)点击确定,图幅号就批量算出来了。这串代码的逻辑其实不复杂:先根据左下角坐标算出它所在的1:100万图幅的字母行号和数字列号,再算它在1:100万图幅内部位于第几列、第几行,最后按规则拼出新图号。
4.3 标注显示与图层符号化
图幅号算好后,把接图表显示得清爽易读就很重要了。
右键图幅网格图层 → 属性 → 标注选项卡,勾选“标注此图层中的要素”,标注字段选“图幅号”。字体大小建议设置6到8号,太小看不清,太大则密集区域全部糊在一起。
放置属性建议切换到Maplex标注引擎,并开启“避免要素内部标注遮罩”和“允许缩放标注以适应要素”。在ArcMap 10.x中需要右键数据框 → 属性 → 常规选项卡,将标注引擎切换为Maplex。ArcGIS Pro默认就是Maplex。
符号化方面,面要素只保留边框线,填充色设为无色或极浅的黄色,这样图幅范围清晰,又不会压住底下的地形或影像数据。
5. 出图前的整饰与范围控制
5.1 用定义查询只显示目标区域
全国5万多幅图全部同时显示,无论是屏幕刷新还是出图打印都很吃力。如果项目只需要某个省或某个地市范围,建议用定义查询来控制显示内容。
右键图层 → 属性 → 定义查询选项卡,点“查询构建器”,比如想只显示某省的图幅,就根据省界属性字段写一个查询条件。前提是图幅网格表里有关联的行政区域字段。如果没有,可以先做一个“按位置选择”,选中目标范围内的图幅后,右键图层 → 选择 → 仅显示所选要素,这样也能达到筛选目的。
5.2 布局视图里的地图整饰
接图表在出图时一般用到布局视图。
切换到布局视图后,需要添加的内容包括:
- 标题:如“××地区1:5万标准分幅接图表”。
- 比例尺:建议使用分段比例尺,直观易读。
- 指北针:接图表方向一般是正北方向,但加上指北针更规范。
- 经纬网:右键数据框 → 属性 → 格网,新建经纬网,可以帮助判断图幅位置。
导出时,推荐导出PDF或TIFF,分辨率设置在300dpi以上,保证打印清晰。如果是大范围接图表,纸张尺寸建议至少A3,窗选范围后按“适合页面”放置。
5.3 导出前务必做一次完整性检查
出图前,我习惯随机抽几个图幅号,去国家基础地理信息中心的标准图幅查询服务上核对一下。去年我做过一次,发现某区域的图幅号全部偏移了两行,排查后发现是左下角坐标字段取错了,取成了图幅中心点的坐标,计算结果自然全错。所以检查这一步千万不能省,抽10个左右就够。
6. 常见问题与排查技巧实录
6.1 高频问题速查表
| 问题现象 | 常见原因 | 解决办法 |
|---|---|---|
| 生成的网格是“歪”的,图幅范围和国界明显不匹配 | 数据框或输出坐标系用了投影坐标系 | 统一改为CGCS2000或WGS84经纬度坐标系 |
| 图幅号算出来是空的 | 字段类型不是文本,或代码中字段名写错 | 检查图幅号字段类型是否为Text,注意字段名中的中文引号格式 |
| 图幅号算出来但位数不对 | 格式化字符串漏写括号或位数占位符 | 检查"{}{:02d}E{:03d}{:03d}"的格式,确认结果为10位 |
| 网格数量太大,ArcMap运行卡顿或无响应 | 全国5万多幅面要素全量显示,性能压力大 | 用定义查询或选择集只显示局部范围,或改用ArcGIS Pro |
| 标注重叠严重,图面一片混乱 | 标准标注引擎没有开启避让功能 | 切换为Maplex标注引擎,开启要素权重和标注权重 |
| 删除多余图幅时误删了有效图幅 | 选择范围理解错误 | 执行“按位置选择”后,先确认选中数量,再反选删除 |
6.2 几个容易忽略的细节
关于坐标精度
ArcMap的字段计算器默认存储的小数位数有限,如果左下角坐标的精度不足,图幅号计算时可能因为差之毫厘导致行列号进位错误。字段类型用Double,计算后可以再新建一个字段,用Round函数验证一下坐标值。
关于南海与海岛图幅
有些同学做完接图表,发现南海诸岛区域一片空白。这不是工具的问题,而是省界数据本身是否包含南海范围。如果项目涉及南海,加载的省界数据要选择带南海九段线的完整版,并按实际情况补充图幅范围。
关于图幅面之间的缝隙
用Create Fishnet生成的网格相邻要素是严格无缝的,但有时在ArcMap的显示设置中,线要素会出现微小白色缝隙,这是屏幕渲染精度导致的假象,打印PDF不会出现。如果介意,可以在图层属性中将“显示线宽”设为0.4磅以上,视觉上会好一些。
关于历史数据兼容
如果项目用的还是西安80坐标系或北京54坐标系下的数据,接图表的网格虽然可以用经纬度坐标生成,但叠加到旧坐标系数据时,需要先做动态投影或数据转换。建议单独保存一份原始经纬度坐标系下的接图表,再做投影副本,避免反复切换导致数据混乱。
关于ArcMap总是未响应
生成全国级别大要素类时,ArcMap确实容易卡。建议所有中间数据都存放在文件地理数据库(gdb)中,不要用shp文件,性能差距很明显。如果还是卡,就把数据拷贝到新地图文档中,只保留必要图层,不要长时间加载所有图幅同时参与符号化计算。
7. 接图表数据的后续扩展与维护
7.1 从图幅号反查图幅范围
做完图幅号计算后,不少同学会遇到另一个问题:手头有了一批图幅号,想快速知道它们对应的位置和范围。这时候可以反过来,在ArcGIS里用字段计算器解析图幅号,反算出图幅的左下角经度和纬度。
代码逻辑和图号计算正好相反:先解析出1:100万图号的字母和数字列号,推出1:100万图幅的经纬度范围,再根据5万图幅的列号行号计算左下角坐标。有了左下角坐标后,就能用“生成矩形”或“最小边界几何”等工具批量生成图幅面。
具体代码我就不贴了,原理掌握了,写起来就是几个加减乘除的事。
7.2 定期更新与批量出图
如果部门里需要定期输出不同区域的接图表,建议把这个流程整理成一个ArcGIS模型(ModelBuilder)或Python脚本。输入某省界数据,输出就是该省范围的1:5万接图表,步骤串联起来,谁都能一键运行。
我后来的做法是在ModelBuilder里把创建渔网、按位置选择、字段计算器整合成一个大模型,每次有新项目,只要替换输入省界,几分钟就能出图。这个思路也推荐给经常和接图表打交道的人。
做接图表这件事,看着简单,但坐标系、字段类型、编号规则、软件性能这些细节,一个没注意就会出问题。上面这些步骤和坑,都是我自己一点点填出来的。如果照着这套流程做,应该能帮你省下不少折腾的时间。
本文还有配套的精品资源,点击获取