
简介ArcGIS 实验报告是一份面向地理信息系统专业本科生的综合性设计性实验成果旨在帮助读者熟悉 ArcGIS 软件操作、掌握基于 ArcMap 的制图流程并以云南师范大学平面图绘制为完整案例讲解从影像图矢量化、建立线要素、线层转面层到提取楼房、草地、道路、球场、湖泊图层最终调整配色并添加注记的完整制图方法。资源仅含 1 个 docx 文档大小 833KB内容结构完整包含实验目的、理论依据、详细操作步骤、各阶段结果配图及实验小结适合 GIS 课程实训参考或课后自学。文中还真实记录了手工矢量化效率低、属性表输入繁琐等常见问题并提出了自动化断线识别与属性匹配的改进思路对读者规避同类操作误区、完善制图流程有直接借鉴价值。目前已有 519 人学习下载是一份内容扎实、贴近实际教学的 ArcGIS 入门级制图参考资料。1. 为什么一份ArcGIS实验报告值得拆开看一份本科实验报告往往被当成交差的文档随手存成docx就不再打开。但这份《ArcGIS实验报告》里藏着一套完整的“影像图→线要素→面要素→分类图层→注记出图”的流程。做完这一步等于把ArcMap里最常用的编辑、拓扑、要素转换、符号化、制图输出都过了一遍。适合刚接触GIS矢量化的学生也适合想快速理清ArcGIS对校园平面图制图思路、又不想翻手册的从业者。后面内容会按这份报告的操作顺序把每个环节的坑和参数设置拆开讲。2. ArcMap影像配准与矢量化线要素建立的正确姿势2.1 先解决影像“摆正”的问题原报告一上来就用ArcMap打开云南师范大学的影像图这在数据规整时没问题但如果你拿到的影像没有坐标系或位置偏移直接矢量化会把后续的线转面、提取图层全部带偏。常见做法是先用ArcCatalog查看影像属性在“XY Coordinate System”里确认坐标系如果是无坐标的JPG或历史影像就要在ArcMap中调出Georeferencing工具条采集地面控制点做配准。配准完记得点击“Update Georeferencing”把变换关系真正写进影像。这里有一个容易踩的坑配准只改变显示位置不一定改变影像文件本身的坐标只有更新后才生效。下面是检查影像坐标系的常规脚本用ArcPy就能跑import arcpy img rD:\campus\yunnan_normal.img desc arcpy.Describe(img) sr desc.spatialReference print(坐标系名称:, sr.name) print(WKID:, sr.factoryCode) if sr.type Unknown: print(警告影像未定义坐标系先做配准或定义投影)这段代码先读取影像的空间参考对象再打印坐标系名称和WKID值。如果返回Unknown说明影像还没有坐标系后续矢量化成果无法与真实位置对齐。坐标系的选型一般根据数据来源来定。国内常见的在线卫星影像截图用的是WGS 1984 Web Mercator学校规划CAD图纸则常用国家2000或西安80的高斯投影。给一个简单的参考表数据来源常见坐标系WKID在线卫星影像截图WGS 1984 Web Mercator3857国家基础地理数据CGCS2000 / 3-degree GK4526 系列老式地形图扫描西安1980 / 3-degree GK2360 系列GPS手簿导出WGS 19844326在这个环节ArcCatalog还能顺手做一件事就是把影像裁剪到学校边界范围避免画线时屏幕上满是外部地块。步骤是在ArcToolbox中找到Data Management → Raster → Clip输入影像和边界面要素设置输出Extent与边界一致即可。热词里常提到的“ArcGIS裁剪影像”指的就是这个工具它不是只裁剪显示范围而是真正生成一块新影像。2.2 在File Geodatabase中创建线要素类原报告里写的“建立线要数”实际是“建立线要素 Feature Class”。我一般不建议直接把矢量化结果存成shapefile因为shapefile对字段名长度、坐标文件分离这些问题处理起来比较麻烦。更稳妥的方式是先建一个文件地理数据库File Geodatabase然后在里面创建线要素类。在ArcCatalog中右键数据库 → New → Feature Class设置名称在Geometry Type里选择Polyline然后设置坐标系与容差。这里重点看一下“XY Tolerance”它默认通常是一个比较小的值比如0.001米或0.00001度。做校园平面图时如果影像比例尺大、点位密集容差太小会导致后续合并要素时出现小缝隙容差太大会把相邻建筑线吸在一起。我习惯在要素类属性里先查一遍坐标单位如果是米就设0.001米如果是度就设0.000001度。线要素类建好之后回到ArcMap右键该要素类 → Start Editing进入编辑会话。画线前必须打开Editor工具条上的Snapping菜单勾选点、端点、边等捕捉类型。很多新手画出来的图拓扑错误多原因不是手不稳而是捕捉没开导致线段端点悬空。2.3 矢量化时如何减少手工重复劳动原报告提到“线段非常多的时候用手工输入不仅浪费时间还效率极低”。这个问题的本质是纯手工逐段画线没有利用ArcMap的自动完成和复制要素功能。ArcMap在Editor工具条里有一个“Auto Complete Polygon”在画封闭地块时可以自动沿用公共边界就不用重复画两遍。对于楼房这类矩形地物可以先画一条边再用“Copy Parallel”做平行复制快速生成建筑轮廓。另外原报告里“手工制作像拓扑前的线段连线”这句话道出了很多矢量化成果的通病线没有闭合、交叉点没断开。画完线之后不要急着转面先执行一次拓扑检查。在ArcCatalog里对要素类新建拓扑规则“Must Not Have Dangles”和“Must Not Overlap”然后在ArcMap中打开ArcToolbox里的Topology工具把悬挂点、伪节点导出来。对于断线用编辑器里的“Extend/Trim”工具把线段延伸到边界再用“Merge”合并成一条完整边。这一步虽然也要手工但能快速定位问题比肉眼找快得多。提示拓扑规则加入后会生成一个错误要素类可以用“Error Inspector”逐条修复。修复完成后重新验证直到错误数量降为0再进入线转面。这一步是决定后续面要素能否正确生成的关键。线层做到这一步基本可以保证每条线段端点相交、没有悬空边。接下来执行线转面时才会顺理成章地生成完整的面块。3. 线转面、属性表挂接与图层分类提取的实现细节3.1 Feature To Polygon 的参数原理与常见报错ArcToolbox → Data Management Tools → Features → Feature To Polygon输入线要素类输出一个面要素类。工具会自动把闭合线围成的区域转成面同时保留线要素上的属性字段。这个工具的参数不多但有一个“Label Features”输入项常被忽略如果你已有标注点工具会把这些点所在的面域单独保留为一条属性记录防止属性数据在转面时丢失。给一个arcpy调用示例方便批量处理import arcpy arcpy.env.workspace rD:\campus\ynnu.gdb arcpy.FeatureToPolygon_management( in_featurescampus_lines, out_feature_classcampus_polygons, cluster_tolerance0.001 Meters, attributesATTRIBUTES )这里的cluster_tolerance参数跟前一节说的XY Tolerance呼应它决定了哪些相邻顶点会被捕捉到一起。参数值过大草坪和道路之间的边界会变得粗糙过小则可能产生细碎面。城市级数据常设为0.001米但如果原始影像精度低断点明显我一般先设0.01米观察生成结果后再缩小。常见的报错是“Insufficient number of features”或生成大量细碎面。前者通常因为输入线根本没有相交构成封闭区域后者则说明线上有重复的零碎线段。处理方式是把线要素先做一次“Integrate”工具把距离小于容差的顶点合并再运行Feature To Polygon。3.2 属性表设计从“手工对照序号查地物”到字段关联原报告里有一句“在输入属性表的时候也是手工对照地图的序号一个一个输入”。这在只做几个图层时还能忍受但图层一多就要出错。我一般会在矢量化之前先定好字段结构一个FID或编码字段存编号一个Type字段存地类名称一个Name字段存具体名称。转面之后Type字段的值决定这个面属于楼房、草地、道路、球场还是湖泊。手动输入时ArcMap的字段计算器支持按选中要素批量赋值先在属性表里选中某栋建筑对应的几个面然后右键Type字段 → Field Calculator输入building这样一次操作就给所有选中面赋了同样的值。比逐个双击单元格快也减少了编码错误。如果需要把外部Excel表格里的编号与属性映射到面要素可以用ArcToolbox里的Join Field工具把Excel表按编号关联到面层。前提是两个表的编号字段类型一致字符串类型的“01”和数字类型的“1”是匹配不上的。热词里提到的“arcgis导出excel表”解决的是反方向需求做法是用Table To Excel工具而不是直接复制属性表窗口。3.3 按Type提取下属图层Select by Attributes 的标准写法原报告第4到第8步依次提取楼房、草地、道路、球场、湖泊在ArcMap里对应两个动作先用属性查询选中再右键图层 → Data → Export Data导出为新图层。属性查询语句的标准写法是TYPE building注意字段名用双引号字符串值用单引号。如果Type里存的是中文语句写成TYPE 楼房也成立但强烈建议字段值用英文代码中文名放到Name字段或符号化的显示名称里否则不同语言环境的gdb会出现乱码现象这是ArcGIS中很常见的乱码坑。更进一步想提前把这些提取步骤固化成自动化流程可以用arcpy的Select_analysisimport arcpy arcpy.env.workspace rD:\campus\ynnu.gdb for cls, code in [(building, 楼房), (grass, 草地), (road, 道路), (court, 球场), (water, 湖泊)]: arcpy.Select_analysis( in_featurescampus_polygons, out_feature_classlyr_ cls, where_clauseTYPE {}.format(code) )这段脚本遍历五个地类把每个类别导出为一个独立图层。逻辑上就是用SQL查询筛选再调用Select工具写盘。这样做的收益是以后影像更新了只要重新矢量化并维护Type字段五个图层可以一键生成不用再重复点五次右键菜单。3.4 提取结果不准确的排查思路有时候提取出的图层里混着别的类别先查Type字段值是不是赋错了有时候导出后图层没有显示是因为没有自动添加到当前地图需要右键窗口点“Add To Display”有时候明明选了20个面导出后只剩18个就要检查是否有面被多选了或者拓扑未闭合导致合并成了一个。我习惯在Select by Attributes后用“Switch Selection”反向观察确认选中范围没有遗漏。4. 符号化、色彩调整与注记添加让校园图达到出图标准4.1 图层的分类符号化与色彩体系原报告第9步“调整颜色”在ArcMap里对应图层属性的“Symbology”面板。如果Type字段已经赋好值选择“Categories → Unique Values”Value Field选TYPEArcMap会自动列出所有地类。配色上校园图有个常见的套路道路用浅灰色实线、建筑用浅棕或米色、草坪用浅绿、球场用浅蓝或橙色、湖泊用蓝色。需要注意避开默认配色里那种饱和度很高的红黄蓝打印出来会刺眼且相互抢视觉层次。在符号选择器里把“Outline Color”设为浅灰Outline Width设为0.4这样地块之间的分界能看到但又不会盖过主色。符号化的颜色信息可以保存成图层文件.lyr换数据时直接加载图层文件符号和显示比例尺都不用重设。ArcGIS Pro的用户则可以在“Symbology”窗格里复制配色方案两种软件在制图逻辑上是相通的。4.2 动态标注与注记从Label到Annotation的转换原报告要求的“添加注记”有两种理解。一种是直接用ArcMap的Label标注优点是动态、改字段值标注自动变缺点是打印布局里位置固定麻烦。另一种是转成Annotation注记也就是把每一条文字变成地图上的独立要素可以逐条拖动、压盖调整适合出图前最终定稿。操作路径是右键图层 → Properties → Labels勾选“Label Features in this layer”在Text String里选字段再设置字体和大小。若要让“云南师范大学”出现在固定位置就在Label Expression里把名称和类型拼起来比如[Name] [TYPE]标注的放置规则在“Placement Properties”里设置。对于面要素建议选择“Horizontal”或“Boundary Placement”避免注记跑到相邻地块上。确认动态标注没问题后右键图层 → Convert Labels to Annotation存到地理数据库里。转换后标注不再是跟随图层的显示对象而是一个真正的注记要素类可以用普通编辑工具拖动。提示转注记前先关闭不必要的其他图层避免转出来的注记和底图文字叠加。注记要素类的存储位置和坐标系要和面图层保持一致否则转换时会出现坐标偏移的提示。4.3 布局视图下的指北针、比例尺与图例出图不是直接截图而是在ArcMap左下角切换到Layout View设置纸张大小和打印范围。先右键页面设置A4横向再插入指北针、比例尺、图例、标题。比例尺最好用“Alternating Scale Bar”数字刻度清晰。图例只保留显示中打开的图层否则默认会列出数据框里的所有图层。如果图例内容太多可以把“各图层只显示当前范围”勾选上这样只显示本图幅内实际出现的类别。原报告最终生成的“完美地图”在布局阶段就是靠这些细节堆出来的。调整好后用File → Export Map导出分辨率设300dpi格式选JPG或PDF这样交到老师或同事手里不会糊。5. 手工矢量化效率瓶颈断线自动识别与属性自动匹配的脚本化思路5.1 原报告提出的两个问题原报告实验小结里写了两条非常真实的项目痛点一是线段很多时手工连线效率低希望能自动识别断线和断点二是属性表手工对照序号输入希望能自动识别相同编号对应的地物属性。这两件事在ArcGIS里都有现成工具和半自动化脚本。5.2 断线自动识别用拓扑检查加脚本输出悬挂点在ArcMap里拓扑工具已经能查悬挂点但错误表是一行行看几百个小断点依然费眼。常见做法是用Feature Vertices To Points工具把线要素的端点提取出来再用空间连接或Near工具找到没有匹配到另一条线端点的点。下面是一个用ArcPy实现的断点定位脚本import arcpy arcpy.env.workspace rD:\campus\ynnu.gdb lines campus_lines endpoints in_memory/endpoints arcpy.FeatureVerticesToPoints_management(lines, endpoints, BOTH_ENDS) arcpy.Near_analysis(endpoints, lines) oid_field arcpy.Describe(endpoints).oidFieldName with arcpy.da.SearchCursor(endpoints, [oid_field, NEAR_DIST]) as cursor: for oid, dist in cursor: if dist is None or dist 0.001: print(疑似断点位于要素 {} 端点最近距离 {}.format(oid, dist))代码先把线要素的所有端点抽离成点然后用Near工具计算每个端点到所有线要素的最近距离。正常情况下线端点应该与另一条线的距离为0或极接近0只要距离超过设定的容差这个端点就是悬挂断点。这里0.001的单位由要素类坐标系决定如果是米就代表毫米级容差如果是度则要换成一个很小的十进制度数。打印出的OID可以直接在ArcMap里按属性选中定位把断线重新捕捉或延伸。这个脚本的价值在于把“肉眼找断点”变成了“按距离阈值排查”和拓扑检查配合使用能把线层修到闭合。要注意Near工具会修改输入点表属性所以在in_memory工作空间里临时操作避免污染原始数据。5.3 属性自动匹配用编码字段Join取代人工对照原报告第二个痛点是“手工对照地图的序号一个一个输入”。如果序号本身在影像或CAD图上有标注可以把它做成一个点层然后在点层的属性表里录入序号再用Spatial Join面层和点层让面自动获得序号。下面用arcpy演示面层和点层的空间关联arcpy.SpatialJoin_analysis( target_featurescampus_polygons, join_featurespoint_labels, out_feature_classpolygons_with_id, join_operationJOIN_ONE_TO_ONE, join_typeKEEP_ALL )这里JOIN_ONE_TO_ONE的含义是每个面只匹配一个点如果一块地被多个标注点覆盖就会产生重复关联。KEEP_ALL则保留面层原有全部记录匹配不到的点不会删掉面。空间关联完成后Type字段可以用“字段计算器 连接下发的序号”继续自动赋值。对于确实没有空间对应关系的数据也可以用Join Field按唯一编号关联Excel表字段名和类型对齐后一次挂接。5.4 自动化脚本在什么情况下不值得写写脚本不是万能的。如果只是做一次校园制图作业用手工加拓扑检查可能比调脚本更快。当数据量到几百条线段、几十类地物时脚本才值得写。另外脚本依赖的坐标系单位、字段名、数据路径写死之后很难复用建议至少把路径和字典参数提到文件开头方便下一次换学校数据时改配置。6. 文档交付把ArcGIS操作过程整理成docx实验报告的模板技巧6.1 截图命名规范与文档结构绑定操作流程做完之后实验报告本身也是一项交付物。很多人在ArcMap里做图两小时截屏五十张最后整理docx时却分不清哪张是线转面、哪张是拓扑修复。我习惯在开始制图前就建立一套截图命名规则用两位数字步骤号开头后面接步骤名。文件名对应内容01_原始影像.pngArcMap打开影像后的初始状态02_线要素.png矢量化完成的线层03_线转面.pngFeature To Polygon生成面层04_建筑图层.png提取后的楼房图层05_注记效果.png添加注记后的地图06_最终布局.pngLayout View导出结果截图时建议关闭不相关的窗口并把ArcMap内容列表里的图层顺序调整到与报告步骤一致。这样写文档时每张图对应哪个步骤一目了然。6.2 用python-docx批量生成报告骨架如果每次实验报告都要插入十几张截图可以用python-docx把重复的文档结构固化下来。下面是一个简化版代码from docx import Document doc Document() sections [ (一、实验准备, 实验目的掌握ArcMap矢量化与制图方法。), (二、影像矢量化, 打开影像图建立线要素并完成拓扑检查。), (三、线转面与图层提取, 使用Feature To Polygon转面按Type提取图层。), (四、注记与出图, 添加注记调整布局并导出。), ] for heading, content in sections: doc.add_heading(heading, level1) doc.add_paragraph(content) doc.add_picture(01_原始影像.png, width0) doc.save(ArcGIS实验报告.docx)这里的逻辑是先用add_heading写入章标题再用add_paragraph写入说明文字最后通过add_picture插入与步骤对应的截图。width参数留空时按图片原始尺寸插入实际使用时建议设置固定宽度比如doc.add_picture(01_原始影像.png, width__import__(docx.shared).Cm(14))让图片在A4页面内显示更统一。把这个脚本存成report_generator.py下次换一个校区做同类制图任务只需要改截图文件名和几个步骤描述。整套流程从配准到矢量化再到转面提取和文档输出就串成了一条可以重复使用的生产线。本文还有配套的精品资源点击获取