
简介《ArcGIS地理信息系统空间分析实验教程第2版》配套光盘part-1由汤国安主编教程分割后的第一部分对应第3、4、5、7、8、9(1)章面向GIS专业学生、科研人员及ArcGIS 10.0自学者主要用于课堂实验与自主上机练习。盘内数据按章节组织第3章为基础操作与界面入门第4章涉及Shapefile与Geodatabase数据管理第5章为专题制图与符号表达第7章侧重地理处理建模第8章为地统计分析第9章第1节则与网络分析相关可用来练习路径规划与服务区划分。压缩包共1207个文件大小约39.42MB其中shp、dbf构成矢量要素gdbtable及atx支撑文件地理数据库adf、img提供栅格与影像数据mxd则保存地图工程覆盖从基础练习到综合实验的完整路径。目前已有822人学习下载适合配合教材逐章操作、验证空间分析流程也可直接用作课程设计与项目实践的数据底图来源。1. 拿到「part-1」只是开始先把这套实验数据盘盘明白很多同学拿到《ArcGIS地理信息系统空间分析实验教程(第2版) 配套光盘part-1》时第一反应是赶紧解压、打开数据、照着书跑实验。但我的看法恰恰相反真正拦人的往往不是后面的空间分析操作而是最前面这个「part-1」三个字。绝大多数情况下part-1 是分卷压缩包的第一卷不是完整光盘内容你光解压它大概率会收到一个 CRC 错误或文件不完整提示。这套光盘的价值在于实验数据、流程文档和示例脚本先搞清楚里面装了什么、怎么组织后面十几次实验才不会翻车。这篇笔记就按我实际带人做实验的顺序来讲盘内容、搭环境、跑实验、拆坑最后给一套能重复使用的实验库改造思路。2. 配套光盘里到底有什么先弄清实验数据的组织方式再动手2.1 光盘内容的三类家底练习数据、流程文档、示例脚本配套光盘不是「一个安装包」它本质上是教材作者的实验资源包。我拿到类似的光盘映像后一般先不急着解压完整文件而是先看压缩包里的目录列表确认资源分类。常见做法是盘里会有几大类内容第一类是练习数据也就是每个章节实验要用的矢量图层、栅格影像、地理数据库。这类数据的组织通常和书里的章节编号严格对应比如「第4章」「第5章」这样的顶层文件夹或者「ch04」「05_raster」这类带编号的目录名。第二类是流程文档有的出版社或者作者会把实验步骤整理成 Word、PDF 或 HTML 页面告诉你每一步在 ArcGIS 里点哪个按钮、设什么参数相当于把书中实验的文字描述又重写了一遍更细、更啰嗦但对新手很友好。第三类是示例脚本有些实验涉及 ModelBuilder 模型或 Python 脚本作者会把做好的工具箱 (.tbx) 或脚本文件 (.py) 放进来你可以直接拿来跑不必从零搭流程。搞清楚这三类内容能帮你省下大量时间。练习数据是实验的原料流程文档是操作说明书示例脚本是对照着检查自己操作有没有走样的参考答案。三者配合使用而不是只把数据拖进 ArcMap 就开始点是我最推荐的做法。2.2 用目录结构反推作者的实验流程我不建议直接双击打开压缩包里的某个小文件那样容易东一榔头西一棒子。更可靠的方法是先把整个目录树拉出来看压缩包支持列表查看就用压缩工具看已经解压出来了就直接在命令行里把目录结构打印出来。用tree命令或者 PowerShell 的ls -Recurse都可以。我习惯用tree /F输出完整文件清单存成文本再慢慢对照。# 进入解压后的光盘根目录比如 D:\arcgis_cd_part1 cd /d D:\arcgis_cd_part1 # 只显示文件夹结构不显示文件明细适合先看整体 tree /D # 显示完整文件和文件夹结构适合对照教材章节找数据 tree /F cd_filelist.txt参数说明/D只列目录能让实验章节对应关系一目了然/F列出每个目录下的文件输出较长所以用重定向到文本文件里方便在编辑器里搜索你要找的关键词比如「buffer」或者「dem」。逻辑上说tree的输出顺序就是作者组织实验的逻辑顺序文件夹名里带序号的基本就是建议你按顺序做的实验如果发现数据全堆在一个文件夹里没有次级目录那说明作者在书里对文件路径写得很细你要留意书中插图里标注的路径写法。另外我一般会特别留意有没有「Data」和「Result」之类的顶层目录。如果有说明作者的意图是让你把原始数据和工作数据分开这是好习惯如果只有一个总目录我会自己建两个子目录来区分输入输出避免反复修改原始数据。2.3 实验数据和书页章节的对应关系看目录结构时还有一个关键点作者怎么给文件命名。按章节号命名是最常见的但也不排除按工具名命名。比如同一批数据既出现在「第4章」目录下又出现在「叠加分析」目录下通常是复制了两份而不是通过链接引用。这种冗余设计是为了让每一章都能独立运行不依赖其他章节的数据。我拿到这类光盘后会先做一件事把书的目录页和光盘目录逐行对照。书里的「实验 4-1 缓冲区分析」在光盘里一般能找到「ex4-1」或「4-1」命名的文件夹。如果对不上不要继续猜直接打开该章配套的流程文档看第一步从哪个数据源开始因为有些实验是跨章节用上一章的结果作为输入。用流程文档反推数据依赖比对着书名猜要可靠得多。这个对照过程大约十分钟却能把后续实验里「数据找不到」「打开图层是空白的」这类问题消灭一大半。3. 从part-1开始搭好实验环境解压、路径与数据源挂载3.1 分卷解压的正确姿势与验证方法part-1 是分卷压缩的第一卷这几乎可以确定但很多人在这里第一次翻车。双击 part-1 文件想直接打开结果报错说格式未知或文件损坏其实不是文件坏了而是分卷没有集齐。正确的做法是先把 part-1、part-2 等全部分卷下载或拷贝到同一个目录下然后只对 part-1 发出解压命令压缩工具会自动按顺序去找后续分卷把它们拼成一个完整的文件夹或光盘映像文件。用命令行的方式最稳妥图形界面点右键解压也可以但命令行能让你看到完整日志。以 7-Zip 为例# 进入分卷所在目录 cd /d E:\arcgis_cd_download # 解压第一个分卷完整解压整个光盘内容 7z x ArcGIS教材配套光盘.part1.7z -oE:\arcgis_cd_extracted -y这里ArcGIS教材配套光盘.part1.7z是个示意文件名实际请换成你手里的真实文件名-o后面的目录是解压输出路径-y表示自动确认覆盖同名文件。逻辑上7-Zip 检测到当前目录存在 part2、part3 等后续文件时会自动拼接数据流所以只指定 part1 就够了。如果你手里的分卷是.rar格式把命令换成 WinRAR 的WinRAR x 文件名.part1.rar 目标目录原理一致。解压完成后千万别急着关掉命令行。我会习惯性地做一次完整性测试避免解压到一半才发现某个分卷下载不完整。测试命令# 进入分卷目录对整套分卷做完整性测试 cd /d E:\arcgis_cd_download 7z t ArcGIS教材配套光盘.part1.7zt是 test 的意思它会逐个校验所有分卷的完整性。输出如果全是Everything is Ok就可以放心使用如果某个分卷报错那就是这个文件下载时损坏重新获取那一个分卷即可不用全部重来。这一步十几秒省下的却是实验做到一半数据读不出来的时间我每次都做。3.2 在ArcGIS中挂接数据源的三步操作解压出来的不是安装程序只是一堆数据文件。打开 ArcMap 或 ArcGIS Pro第一步不是「打开地图」而是「连接文件夹」。拿 ArcMap 举例在 Catalog 面板里展开「文件夹连接」右键选「连接到文件夹」指向你刚才解压出的光盘根目录。第二步是找到实验要用的数据文件SHP 文件可以直接拖到内容列表栅格数据一般通过「添加数据」按钮加载。第三步是确认加载进来的图层能正常显示图例图标不是红色感叹号说明路径挂上了。# 这个操作不写代码但有一个判断逻辑要记牢 # 红色感叹号 路径失效原因是数据不在原路径或被移动 # 处理方式右键图层 - 数据源 - 替换为当前数据位置我见过不少人卡在「添加数据」这一步原因是他们把数据文件直接从 Windows 资源管理器拖进了 ArcMap看起来能显示但保存的地图文档 (.mxd) 里记录的仍是旧路径下次打开必现红色感叹号。规范做法是通过 ArcMap 的 Catalog 或 ArcGIS Pro 的 Catalog 面板建立文件夹连接再添加数据这样记录的是相对可控的路径重开工程时出问题的概率小很多。3.3 命令行批处理工作流把十几个实验数据一次性登记到目录如果这个盘里配套了几十个实验每个实验都要手动连接一次文件夹确实啰嗦。我一般会用 Python 写一个小脚本把解压目录里所有 SHP、图片、地理数据库扫描出来输出一份清单知道自己手上有多少可用数据还能检查有没有路径中包含中文或空格导致 ArcGIS 读不了的情况。# -*- coding: utf-8 -*- # 扫描实验数据目录输出要素类、栅格和地理数据库清单 import os import csv root_dir rE:\arcgis_cd_extracted out_csv rE:\arcgis_cd_extracted\data_inventory.csv shp_files [] gdb_dirs [] tif_files [] for dirpath, dirnames, filenames in os.walk(root_dir): # 跳过以 .gdb 结尾的地理数据库目录内部因为里面是要素类二进制结构 if .gdb in dirpath: continue for f in filenames: low f.lower() if low.endswith(.shp): shp_files.append(os.path.join(dirpath, f)) elif low.endswith(.tif) or low.endswith(.img): tif_files.append(os.path.join(dirpath, f)) # 单独识别地理数据库文件夹 for d in dirnames: if d.endswith(.gdb): gdb_dirs.append(os.path.join(dirpath, d)) with open(out_csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([类型, 路径]) for p in shp_files: writer.writerow([矢量, p]) for p in tif_files: writer.writerow([栅格, p]) for p in gdb_dirs: writer.writerow([地理数据库, p]) print(f扫描完成共发现 {len(shp_files)} 个SHP{len(tif_files)} 个栅格{len(gdb_dirs)} 个GDB)这个脚本的意图是「把自己手上有哪些数据盘点清楚」。参数上root_dir改成你的实际解压路径skip .gdb的判断很关键因为地理数据库内部是二进制文件集合逐个扫描内部文件没有意义反而会产生大量垃圾记录。脚本里用的是os.walk它会递归遍历所有子目录所以顶层的目录层级不影响结果。跑完之后打开 CSV按「类型」排序你就能看到实验数据全貌。某次模拟项目里我就是靠这个清单发现有个实验的 SHP 缺了.prj坐标文件提前补上了才没在实验课上丢分。4. 照着实验走通一遍空间分析常见工具的参数设置与结果自检4.1 缓冲区、叠加与插值三个必调的参数这套实验教程的核心集中在空间分析模块其中出现频率最高的工具是缓冲区、叠加分析和插值。很多同学按书上的参数抄却发现结果和书里的截图不一样原因往往是参数理解和软件版本差异。下面这张表是我对照多个版本软件的使用经验总结的重点看「常踩的坑」那一列。工具关键参数常踩的坑缓冲区缓冲区距离、融合类型距离单位默认是图层单位如果数据是地理坐标系单位是度10 度缓冲区大得离谱融合类型选 ALL 会把相邻区域合并选 NONE 会保留每个要素独立缓冲区叠加分析叠加方式、输出要素类做交集叠加时输入要素属性保留规则默认是全部保留字段多会导致输出表巨长没有指定输出路径时结果会进入默认临时库工程关闭就找不到插值插值方法、搜索半径、功率反距离权重法IDW的幂数默认是 2幂越大表面越不平滑搜索半径默认是可变半径点分布不均时会产生空洞我一般会这么理解这套参数缓冲区里的「融合类型」是最容易出不同结果的地方。书上的配图如果是大块连在一起的缓冲区它就选了 ALL如果每个学校周围一圈一圈独立显示就是 NONE。你做出来的结果和书上不一样先别怀疑操作错先检查融合类型有没有选对。插值实验里另一个坑是「输出像元大小」。有些人直接接受默认值结果栅格分辨率粗糙得看不清细节。常见做法是查一下输入点的平均间距把像元大小设为平均间距的一半到三分之一插值出的表面就不会出现明显的锯齿。4.2 输出位置与命名规范别让结果淹没在默认目录里实验数据里有个杀手级问题ArcGIS 默认把工具输出的数据写到当前工程的地理数据库或内存工作空间里。你用缓冲区工具点完确定结果确实生成了但它藏在默认库里位置不直观下次想找得翻半天。我的习惯是在每个实验文件夹下建一个result子目录所有工具输出都指向那里文件命名按「工具名_输入图层名_参数值」的规则比如buffer_streets_500m.shp。这样就算实验做到一半被打断回头看一眼文件名就知道这层数据是从哪个图层、用什么距离生成的不用打开属性表去猜。在工具对话框里输出要素类那栏是可以直接输入路径的不要只填一个名字。E:\arcgis_cd_extracted\ex4-1_buffer\result\buffer_school_1000m.shp这样的完整路径填进去输出结果就直接落到实验目录下。如果文件夹路径包含中文某些老版本可能出现写入失败所以我在做实验前会把所有实验目录统一改成英文字母加数字的格式比如ex4-1而不是第四章实验一。这一步虽然不涉及任何技术难度却是我经历里减少报错最有效的一招。4.3 用Python窗口自检结果数据做完整套实验我会打开 ArcMap 的 Python 窗口写几行 arcpy 代码检查输出结果是否合理。不要只看「工具没有报错」工具运行成功但结果是空图层的情况常有检查要素数量和坐标系是最后一道防线。# -*- coding: utf-8 -*- import arcpy fc rE:\arcgis_cd_extracted\ex4-1_buffer\result\buffer_school_1000m.shp # 检查要素类是否存在 if not arcpy.Exists(fc): print(输出不存在实验失败) else: # 获取要素数量 desc arcpy.Describe(fc) count arcpy.GetCount_management(fc) print(要素数量:, count) print(坐标系:, desc.spatialReference.name) # 检查坐标系是否为空或未知 if desc.spatialReference.name in [Unknown, , None]: print(警告坐标系缺失请检查原始数据的投影信息)这段代码的逻辑核心是「通过 Describe 对象反查结果数据的元信息」。arcpy.Exists是先用最低成本确认文件存在arcpy.GetCount_management返回的是一个字符串形式的结果对象直接print出来就能看要素数量坐标系检查放在最后因为 SHP 文件如果缺少.prj文件ArcGIS 会把它当成未知坐标系后续做投影转换就会报错。某次空间统计实验我做完插值后就是靠这个检查发现输出栅格坐标系是未知的查了半天才发现是输入点缺少投影文件早发现早处理完全不影响后续提交实验报告。5. 配套光盘实验的9个避坑点从解压失败到结果不显示5.1 分卷解压类坑第一关就拦住大多数人现象双击 part-1 文件提示「文件已损坏或格式未知」或者解压到一半报错说某个分卷校验失败。原因part-1 只是分卷片段的头单独看它不是一个完整的压缩包或者某个后续分卷在下载过程中不完整。压缩工具必须读到所有分卷才能重组完整文件流。解决把全部 part 文件放在同一目录下用命令行7z t先做完整性校验确认每个分卷都没问题后再对 part-1 执行7z x解压。做完这一步99% 的分卷问题都能解决剩下的 1% 是文件名被改名软件破坏了需要用原始命名重命名分卷。5.2 中文路径和空格路径验证时不报错打开时红感叹号现象文件夹连接成功数据添加成功保存工程后下次打开所有图层都是红色感叹号数据源失效。原因ArcMap 的工程文件 (.mxd) 记录的是绝对路径。如果路径中含有中文、特殊符号或空格老版本软件读取时容易把路径截断或转码错误。解压时你图方便建了「实验数据(最终版)」这样的目录保存工程时一切正常再打开就彻底失联。解决统一用英文小写加连字符命名目录比如arcgis-cd-ex路径里不要有空格和中文。已经红感叹号的图层在图层属性里重新指定一次数据源更新后再次保存工程路径就会被修正。5.3 坐标系缺失缓冲区结果大得离谱现象按教材参数做 500 米缓冲区结果却覆盖了小半个城市看起来完全不合理。原因输入数据是地理坐标系经纬度缓冲区距离的单位是「度」。500 度缓冲区当然大得离谱。更隐蔽的情况是 SHP 缺少.prj文件ArcGIS 把它识别为未知坐标系工具不报错但输出的结果无法正确投影。解决打开图层属性查看坐标系如果未知就用「定义投影」工具手动指定正确的坐标系而不是用「投影」工具。定义投影只是声明坐标系统不转换坐标数值适合数据源本来没有投影文件的场景。5.4 输出结果被覆盖辛辛苦苦做的实验图层丢了现象做了两次缓冲区实验第一次的结果还在显示第二次跑完后第一次的结果没了属性表内容也变了。原因输出要素类填了同一个路径和文件名。ArcGIS 工具默认会覆盖已存在的要素类有的工具会在执行前问你是否覆盖有的直接静默覆盖。解决每个结果都按不同的文件命名规则输出文件名里带上参数信息比如buffer_500m.shp和buffer_1000m.shp。另外在 ArcMap 选项的设置里打开「允许覆盖地理数据集的输出」选项反而能让你稳定掌握覆盖行为避免旧数据残留引发混淆。5.5 SHP字段名截断属性值看起来是乱码或缺失现象做完叠加分析输出要素类的属性表里原有字段名被截断比如pop_density_2020变成了pop_densit数据值对不上号。原因SHP 格式的 dBASE 表规定字段名最长 10 个字符超长部分会被截断。如果你输入的 FGDB地理数据库要素类里有长字段名输出到 SHP 就会发生截断有时还会自动加数字后缀字段顺序也乱掉。解决实验如果要输出 SHP建议输入数据也先用 SHP 格式或者在做分析前把长字段重命名到 10 字符以内。如果一定要从地理数据库往 SHP 转导出后用属性表检查一遍字段名确认对应关系再继续下一步分析。5.6 临时默认工作空间工具成功但结果找不到现象工具执行过程没有任何报错但结果没有出现在你预期的实验文件夹里图层列表里却能看到。原因工具对话框中的输出路径你没填ArcGIS 使用了默认输出位置通常是默认地理数据库或者临时文件目录。它在图层列表里显示因为分配了临时名称但你现在看到的只是内存引用不是物理文件。解决进入 ArcMap 的「地理处理选项」把「当前工作空间」和「临时工作空间」都设置为实验目录下的一个固定文件夹。这样所有工具输出默认落在你能找到的位置避免实验做完数据消失。这条改动是性价比最高的环境设置我每台新电脑装完 ArcGIS 第一件事就调它。5.7 许可级别不足空间分析工具灰色不可用现象缓冲区、叠加、插值等工具按钮是灰色的点击没反应。原因空间分析扩展模块没有启用或者当前的许可级别不包含这个扩展模块。学校或单位的试用许可可能只包含基本功能。解决ArcMap 里勾选「自定义」菜单下的「扩展模块」把 Spatial Analyst 勾上如果勾不了说明许可本身没有这个模块需要联系管理员换一个包含空间分析模块的许可。这点容易被忽略因为它和软件的安装方式无关纯粹是授权范围问题。5.8 数据源断链MXD换个电脑就全部失效现象把做好的实验工程文件拷到另一台电脑打开所有图层全部红感叹号路径变了。原因MXD 文件记录的是绝对路径换电脑后盘符和目录层级不一致所有相对引用全部失效。解决用 ArcMap 的「数据源」修复功能可以一键批量重指路径或者提前在「地图文档属性」里勾选「存储数据源相对路径名」。做实验时常在实验室和宿舍电脑之间切换的话这个选项务必打开能省掉反复重连数据的时间。5.9 版本不兼容用新版软件打不开老数据现象用较新版本的 ArcGIS Pro 打开教材配套的旧版本 MXD 文档或旧格式要素类界面提示兼容问题有的数据直接加载不上。原因MXD 是旧版本桌面端的专属格式Pro 用的是工程文件 (.aprx)两者不能直接互开。教材录制的操作界面也基于旧版本按钮位置和工具名称有差异。解决如果手上有旧版本桌面端软件优先在旧版本里做实验如果只能用 Pro就不要打开 MXD而是直接从文件夹拖入 SHP 或栅格数据开始做把教材当操作流程参考而不是界面参考按钮位置以你实际软件为准。6. 把配套光盘改造成自己的实验库重构、批处理与结果自检实验做完一遍这套光盘对你来说就不该只是复制粘贴的教材我会把它重构成一套可复用的实验数据包。做法并不复杂先复制一份原始数据目录重命名为arcgis-lab-lib在根目录下建raw、result、log三个文件夹raw放原始数据result放每次实验的输出log放脚本和参数记录。以后不管做哪次实验输入从raw取输出写到result把「原始数据不动」这一条当成铁律能避免大量推倒重来的情况。其次把每次实验用到的工具和参数记录下来写成小段 Python 脚本放在log目录下。不要觉得实验课只需要鼠标点点出来的过程关掉软件就没了而脚本留下的是完整的参数链路。比如你在某次环境因子分析里用了 IDW 插值幂为 2搜索半径为 12 个点这条参数写在脚本里三个月后写报告还能复用。用 ArcGIS 的「结果」窗口右键把某个工具结果导出为 Python 脚本我常用的就是这个功能几乎零成本。最后养成一个自检习惯每个实验结果生成后跑一遍我前面写的那个检查代码确认文件存在、要素数量正常、坐标系明确。这套自检大概只花半分钟但它能拦住绝大多数「看起来成功了实际上不能用」的情况。我记得有个实验做到夜间灯光数据插值输出栅格范围完全对不上输入点检查才发现是坐标系被识别成未知拿原始数据重新定义投影后一次就过了。细节上的规范比反复试错玄学要可靠得多。希望这篇笔记能帮你在 ArcGIS 空间分析实验这条路上少踩几个坑。本文还有配套的精品资源点击获取