
简介《ArcGIS地理信息系统空间分析实验教程第二版》配套光盘part-1是汤国安版教材的官方实验数据包。光盘共三部分此压缩包为第一分卷提供第三、四、五、七、八、九章的实例数据与练习素材涵盖数据管理、专题制图、地理处理与模型构建、网络分析等空间分析场景适合GIS初学者和需要系统巩固ArcGIS 10.0技能的从业者。包内共1207个文件以adf栅格、gdbtable地理数据库表、shp矢量、dbf属性表及mxd地图文档等ArcGIS原生格式为主压缩后39.42MB目录按教材章节组织便于对照学习。目前已有822人下载学习通过真实实验数据反复演练可掌握从数据管理到空间分析的核心流程并灵活应用到实际项目中。1. ArcGIS 空间分析实验教程第2版配套光盘它不只是 16 个实验的数据包很多人第一次拿到这份 ArcGIS 地理信息系统空间分析实验教程第 2 版的配套光盘时以为里面只是一堆 shp 文件和图片素材真正拆开才发现自己低估了它。这份光盘镜像除了教材 16 个实验的全部原始数据还带了演示录像和 ArcGIS 10.0 相关的运行组件等于把教材里静态的截图变成了可以一步步跟着点的操作录像。对正在上 GIS 课程、准备考研上机或者手里只有新版 ArcGIS Pro 但被教材界面差异卡住的人这套资源要比从网上东拼西凑实验数据靠谱得多。它解决的问题很具体教材里缓冲区分析参数填多少、栅格计算器公式怎么写、实验结果应该长什么样不用再靠猜。2. 拆开光盘镜像分卷压缩的挂载方式与实验数据目录的常见布局2.1 拿到的是 part-1先判断这是镜像还是分卷压缩包文件名里的「part-1」通常意味着这张光盘以分卷形式发布常见的有两种情况一种是把一个完整的 .iso 镜像切成 part-1、part-2 多段另一种是压缩包分卷比如 .7z.001、.zip.001。这决定了你第一步该用什么工具去打开它。很多人直接把 part-1 当成独立文件双击解压结果报「缺少分卷」或者打开一片乱码这不是文件坏了而是没搞清楚它的发布方式。我的做法是先把下载目录里的文件后缀列出来看一眼再决定处理方式。如果后缀是 .iso.001 一类说明要用 7-Zip 或 WinRAR 从第一段解包如果整个就是 .iso那就直接挂载虚拟光驱。这里给一组我常用的校验和解包命令# 校验所有分卷是否完整缺了会提示哪一段有问题 7z t ArcGIS_ChinaBook.iso.001 # 从第一段开始解包保持原有目录结构输出到指定路径 7z x ArcGIS_ChinaBook.iso.001 -oD:/GIS_Book_DVD参数说明t是 test 模式只检查完整性不解包分卷文件都放在同一个目录时它会自动索引后续段x是 extract-o后面接输出路径路径里不要带空格和中文避免后续 ArcGIS 读取时路径解析出问题。这一步使用校验命令的场景是资源是从网盘或 FTP 分卷下载的传输过程可能丢数据解包解到一半报错再排查就晚了先花两分钟验一遍是值得的。如果你打开后看到里面是.iso文件那就换虚拟光驱挂载Windows 10 以上系统直接双击 iso 就能挂载老系统则需要装一个虚拟光驱工具。挂载后别急着拷全部文件先看一下根目录的布局再决定因为有些镜像做了启动引导页真正的实验数据藏在某个子目录里直接全盘复制会把没用的文件也带出来。2.2 ArcGIS 10.0 运行环境为什么必须装 32 位组件这套教程的图像界面全部基于 ArcGIS 10.0 截取菜单路径、工具名称、对话框布局都和 ArcGIS Pro 以及后来的 10.x 版本不完全一致。你翻到教材里的「ArcToolbox → Analysis Tools → Overlay → Intersect」这一步在 ArcGIS Pro 里对应的是「Analysis Tools → Overlay → Intersect」逻辑一样但界面完全不同跟着做会越做越糊涂。所以教材实验复现最稳的方案不是装新版而是装一个和教材同代的 ArcGIS 10.0 环境。这里有个容易忽略的技术背景ArcGIS 10.0 是 32 位桌面软件官方支持的操作系统上限是 Windows 7但实际在 Windows 10 64 位系统上也能跑前提是给系统补上 32 位兼容组件。我一般这样处理控制面板 → 程序和功能 → 启用或关闭 Windows 功能勾选「.NET Framework 3.5包含 2.0 和 3.0」让系统补装老运行库。安装 Microsoft Visual C 2005/2008/2010 运行库ArcGIS 10.0 的 License Manager 和 Desktop 组件依赖这些库。安装目录不要放中文路径默认的C:\Program Files (x86)\ArcGIS就行。提示关于软件授权建议优先用学校或单位的浮动许可服务器。教材配套资源里多数是学习用数据和生产环境的试用授权自己单机装的话别去碰那些来路不明的授权工具系统报错和后续升级的麻烦比买一个许可贵得多。装完环境还要注意磁盘格式。实验数据解压后建议放在本地 NTFS 磁盘不要放在 FAT32 格式的 U 盘或移动硬盘上因为部分栅格数据文件超过 4GBFAT32 根本写不进去而且 U 盘读取速度会导致 ArcMap 频繁卡死。2.3 实验数据目录的常见布局与对应模块这套教材的光盘内容按我拆过的同类教程资源来看目录通常分为三大块实验数据、操作演示录像、相关软件。实验数据是核心它和教材章节编号一一对应每章一个子文件夹里面是该章实验用到的全部输入数据。课件里常用的数据格式有 shapefile、File Geodatabase、GRID 栅格、TIN 不规则三角网等不同实验用到的东西差别很大。这里列一个我整理的对照关系帮助你在拿到光盘后快速定位自己要用的实验数据实验类型典型数据格式用到的扩展模块缓冲区分析shapefile 点线面基础工具不需要扩展模块叠加分析Coverage / shapefile / GDB基础工具栅格计算与重分类GRID / TIFFSpatial AnalystDEM 水文分析GRID 高程栅格Spatial Analyst Hydrology 工具集空间插值点要素类 属性表Geostatistical Analyst网络分析道路线要素 连通性属性Network Analyst拿到光盘后的第一件事不是直接打开 ArcMap 找数据而是打开目录结构把教材目录和光盘文件夹对应起来。我习惯在桌面建一个实验状态跟踪.xlsx列上实验编号、光盘数据路径、需要输出的成果类型做完一个勾一个。这个习惯在后面会细说但它确实是避免数据用错的最有效手段。3. 把学校选址那个实验完整跑通缓冲区与叠加分析的操作闭环3.1 实验的前置条件数据从光盘搬到本地后先做这两件事大多数教材实验数据用的坐标系是西安 80 或北京 54这类老数据常见的问题是投影信息缺失或不完整。直接用 ArcMap 打开时图层属性里空间参考显示「未知」这时候如果你直接做缓冲区分析半径单位会被当成十进制度而不是米结果完全不对。所以数据搬进本地工作空间之后第一步是逐层检查坐标系。检查方法在 ArcMap 内容列表里右键图层 → Properties → Source → Spatial Reference确认有坐标系和投影信息。如果显示 Unknown需要根据数据组织者给的范围手动定义。常见的投影有Xian_1980_3_Degree_GK_CM_111E和Beijing_1954_3_Degree_GK_CM_111E等具体看实验区域是哪个城市选错中央经线也会导致后续叠加时图层对不齐。第二件事是关闭后台地理处理。ArcGIS 10.0 默认开了后台处理工具执行时 ArcMap 仍可继续操作听起来方便但实际极容易造成数据锁冲突尤其是做叠加分析时源数据被编辑器占用会直接报错。设置路径Geoprocessing → Geoprocessing Options → 取消勾选 Background Processing 下的 Enable。顺手把 Results 里的「保持临时结果」选项打开这样每一步操作都能在 Results 窗口看到日志排错方便很多。再一个建议是使用环境设置里的工作空间Geoprocessing → Environments → Workspace把当前工作空间和临时文件位置都指定到本项目目录下避免系统写到默认的 C 盘临时目录。3.2 用 ArcToolbox 把流程走一遍缓冲半径、重分类与栅格计算器参数表以教材里经典的「学校选址」实验为例完整流程是三段先对道路、河流做缓冲区分析再把缓冲区结果按距离打分重分类最后用栅格计算器把多因子加权相加生成适宜性栅格。这个实验是叠加分析思想最典型的案例适合理解从矢量到栅格再综合分析的标准转换。第一步是缓冲区。在 ArcToolbox 里打开 Analysis Tools → Proximity → Buffer输入道路图层和河流图层分别设置缓冲半径。这里教材一般会给出两个方案一个半径做单级缓冲另一个做多级环形缓冲需要选距离字段。实际工程里用多级缓冲区更多因为不同距离代表不同的影响强度后续打分才有区分度。第二步是重分类。打开 Spatial Analyst Tools → Reclass → Reclassify把缓冲区栅格按照距离分段重新赋值。这个实验里我对道路缓冲区的赋值规则是0-200 米最吵适宜性打分最低给 1 分200-500 米给 2 分500 米以上给 3 分。河流反过来距河流越近打分越低因为防洪和污染风险。重分类有一个关键参数需要留意就是新值字段是否保持整数连续性栅格计算器里做加权叠加时字段类型或出现 NoData 会把整个结果带偏所以重分类前最好先了解 NoData 的处理策略。第三步是栅格计算器。在 Spatial Analyst Tools → Map Algebra → Raster Calculator 输入加权公式(road_reclass * 0.4) (river_reclass * 0.6)这个公式的含义是道路因子占 40% 权重河流因子占 60%最终得分越高的像元代表越适合建校。参数说明两个输入栅格的像元大小和范围必须一致否则计算结果会出现大片空值区域。我在做这个实验时通常先执行 Spatial Analyst Tools → Map Algebra → Raster Calculator 之前先运行arcpy.env.snapRaster和cellSize的设定确保两个栅格完全对齐。3.3 用 arcpy 复刻同一流程脚本化之后换数据只需改三行手工点 ArcToolbox 适合第一次理解流程但要反复调参数、换数据脚本化效率高得多。ArcGIS 10.0 自带的 arcpy 是 Python 2.7 环境写法上和现代 Python 略有差异但功能是完整的。下面是我把学校选址实验写成脚本的骨架# -*- coding: utf-8 -*- import arcpy # 关闭覆盖保护允许输出文件覆盖旧结果 arcpy.env.overwriteOutput True # 工作空间设置为数据所在目录 arcpy.env.workspace rD:\GIS_Book_Exp\Ch05_Site arcpy.env.scratchWorkspace rD:\GIS_Book_Exp\Scratch # 输出坐标系与输入数据保持一致避免单位变成度 sr arcpy.Describe(rD:\GIS_Book_Exp\Ch05_Site\roads.shp).spatialReference arcpy.env.outputCoordinateSystem sr # 步骤1道路多级缓冲区 500米、200米、100米 arcpy.Buffer_analysis( rD:\GIS_Book_Exp\Ch05_Site\roads.shp, rD:\GIS_Book_Exp\Ch05_Site\road_buf, 500 Meters, ALL ) # 步骤2河流缓冲区 300米融合相交区域避免重复计算 arcpy.Buffer_analysis( rD:\GIS_Book_Exp\Ch05_Site\rivers.shp, rD:\GIS_Book_Exp\Ch05_Site\river_buf, 300 Meters, ALL )逻辑说明第一步先锁死输出坐标系这是整个实验最关键的元操作。因为Buffer_analysis默认沿用输入数据的坐标系如果输入是地理坐标系单位是度缓冲半径写成「500 Meters」也不会报错但生成的缓冲区是 500 度而不是 500 米面积差距是几十个量级。Describe().spatialReference的作用是读取输入数据的空间参考对象把它赋给环境变量输出坐标系这样后续所有工具的输出都自动对齐。参数说明Buffer_analysis的四个参数分别是输入要素、输出要素、缓冲距离和融合方式。ALL表示所有缓冲区域合并成一个整体适合做适宜性分析如果想保留每个要素独立边界用NONE。距离可以写固定数值加单位也可以传一个字段名做动态缓冲字段模式下注意单位必须是字段里已经存储好的值不要混用。4. ArcGIS 10.0 实验环境疑难排查五个高频问题与处理记录4.1 打不开数据文件提示 Table name invalid 或 Failed to open现象双击光盘里复制出来的个人地理数据库Personal GeodatabaseArcMap 提示 Table name invalid或者打开某个要素类时报 Failed to open。原因最常见的是数据库版本不兼容。这套教材的数据是用 ArcGIS 10.0 版本组织的但很多人实际拿到光盘后会用别的工具改写过文件或者数据是从更高版本 ArcGIS 导出时用了新版文件地理数据库。ArcGIS 10.0 能读高版本 GDB 吗不能这是老版本软件天生的限制它打不开比自身版本高的数据库文件。另一个原因是数据库存放在中文路径或共享网盘路径下老版本 ArcGIS 对 UNC 路径支持得很差。解决把数据全部拷到本地磁盘纯英文路径下再试。如果确定是版本问题找一个装了新版 ArcGIS 的机器在 Catalog 里右键数据 → Export → 选择 File Geodatabase 10.0 格式导出或者用 ArcGIS Pro 的「导出为 10.0 兼容版本」功能转换后再拷回来。转换一次之后这个数据就能被 10.0 正常读取。4.2 缓冲区半径单位变成「度」设置 500 米结果范围大到离谱现象缓冲区工具里明确写了「500 Meters」生成的缓冲半径却覆盖了半个县城范围量算下来半径大约是 500 度而不是 500 米。原因输入图层的坐标系是地理坐标系 WGS84 或西安 80 经纬度格式这类坐标系下距离单位本身就是度1 度大约对应 111 公里所以 500 度直接覆盖大半个区域。这个错误不是工具参数写错而是数据投影缺失导致。工具定义里写明「Distance」在经纬度坐标系下会被解析为十进制度不会自动换算成投影平面距离。解决先用 Project 工具Data Management Tools → Projections and Transformations → Feature → Project把原始数据转换到适合当地的高斯投影坐标系。投影后重新做缓冲区。这个坑其实是所有空间分析实验里最普遍的看了一圈网上的提问十个缓冲区实验报错九个出在这里。从这之后我拿到任何矢量数据都先看一眼坐标系显示的是否带投影信息再决定能不能直接上距离分析。4.3 栅格计算器结果整片 NoData空值传播和路径中文共同作用现象栅格计算器公式跑完结果全是空值或只有零星像元有值出图一片黑。原因两方面一是数据本身在重分类阶段就生成了大量 NoData而栅格计算器对 NoData 的默认处理是任意输入含 NoData 则输出也为 NoData空值像元传递给最终结果二是数据存放路径含中文或空格ArcGIS 10.0 中文路径下栅格计算器经常静默失败不报错但什么都不计算。解决先处理路径把工作目录改成纯英文路径脚本里临时目录也一并改掉。再处理空值在重分类步骤里把不需要参与计算的区域统一赋一个明确的背景值比如 0而不是保留 NoData。方法是在 Reclassify 面板里勾选「Change missing values to NoData」改为「Change missing values to 0」或者在栅格计算器里用Con(IsNull(layer), 0, layer)把空值替换为 0。4.4 演示录像打不开或者播放没有画面缺少视频解码器现象光盘里的实验演示课件双击后能播放但只有声音没有画面或者直接提示找不到视频编解码器。这类课件很多是录制屏幕的 AVI/RMVB 格式用了老的编码器。原因Windows 10 系统自带的媒体播放器默认不支持旧的编码格式教材配套光盘的时间比较早里面录像多数是用当时的屏幕录制工具压制的编码器是专用的。解决下载一个带完整解码包的播放器安装后播放。这类视频播放文件大部分集中在光盘的「演示视频」目录下按实验编号排好正常解包后用播放器直接打开。使用这种方法可以完整看到每一步操作比截图清楚得多尤其是 ArcToolbox 里对话框里那些折叠面板、右键菜单这类截图展示不完整的操作。4.5 ArcMap 启动或工具执行时闪退Error 999999 与临时目录满现象ArcMap 启动正常但执行某个复杂工具或添加大栅格图层时突然闪退消息窗口里出现 Error 999999几乎没有任何有效信息。原因ArcGIS 10.0 在 Windows 10 上属于兼容运行它的临时文件目录默认在系统盘用户目录下长期未清理会占满磁盘或权限受限。另外这个版本对大数据量的栅格显示有内存限制32 位进程最多用约 2GB 内存数据量超过限度就闪退。解决在 Geoprocessing → Environments → Workspace 里把临时工作空间指定到一个固态硬盘的空目录下然后在 ArcMap 的缓存设置里把显示缓存调低图层右键 → Properties → Display → 勾选 Only show this layer at a smaller scale。如果确认是 32 位内存上限导致的问题可以把大数据栅格先做重采样或分割成若干小图块再导入。这些方法能显著降低闪退频率但不能完全消除老软件在新系统上跑出点玄学问题才是常态。5. 把教程数据改造成自己的实验项目数据体检与导出 Python 脚本5.1 先做数据体检确认 16 个实验的数据完整可跑拿到光盘解包后第一轮检查不能省。我见过不少人直接打开某个实验数据发现要素类是空的或者属性表字段丢失最后才意识到是自己解压时漏了分卷、部分文件损坏。这个环节的最佳时间是刚解压完还没有开始做实验的时候因为这时目录结构是新鲜的文件位置和教材章节对应关系最好查。写一个简单的 arcpy 脚本做数据体检思路是遍历整个实验目录打开所有 shapefile 和要素类检查要素数量、空间参考、字段列表并把结果导出成一个文本清单# -*- coding: utf-8 -*- import arcpy import os root_dir rD:\GIS_Book_Exp report open(rD:\GIS_Book_Exp\check_report.txt, w) # 遍历目录下所有 shapefile for dirpath, dirnames, filenames in os.walk(root_dir): for f in filenames: if f.endswith(.shp): full_path os.path.join(dirpath, f) try: desc arcpy.Describe(full_path) # 获取要素类型和空间参考信息 ftype desc.shapeType sr desc.spatialReference.name # 获取要素个数 count int(arcpy.GetCount_management(full_path).getOutput(0)) report.write(f{full_path}|{ftype}|{sr}|{count}\n) except Exception as e: report.write(full_path |ERROR| str(e) \n) report.close() print(check done)逻辑说明arcpy.Describe返回数据对象里面有shapeType表示几何类型Point、Polyline、Polygon、spatialReference.name表示坐标系名称GetCount_management返回要素数量。报告文件里每行是一条数据的体检结果用竖线分隔方便后续用 Excel 打开做筛选。这类体检不需要复杂逻辑但能快速暴露数据缺失等大问题比一个个手动打开效率高得多。如果说Describe读出来的空间参考是 Unknown 或不带投影这类数据必须先在 ArcCatalog 里手动定义坐标系再继续实验拖到后面再做会造成叠加分析对不上位。要素数量为 0 的图层也要标记这类图层基本是从光盘里拷过来时被系统安全策略拦截了一部分文件形状文件由至少三个子文件组成.shp/.dbf/.shx缺一个都打不开。5.2 把 ArcMap 的某一步操作转成 Python从 Results 窗口复制代码片段ArcGIS 10.0 有一个容易被忽视的实用功能地理处理结果窗口Results会把每一步操作的参数记录成 Python 代码。具体路径是 Geoprocessing → Results展开某次执行结果右键 → Copy → Python SnippetArcMap 就会把这个操作完整翻译成一段 arcpy 代码直接粘贴到 Python 窗口就能原样重跑。这个方法对学习技术很有用尤其是教材实验里步骤多、参数繁复的场景比如重分类时手动敲了一堆新旧值映射手工重敲一遍很容易出错。用复制代码的方式整套参数自动保存下来。我拿它配合批量修改效果很好# 复制自 Results 窗口的代码片段把原路径替换成新实验目录 import arcpy arcpy.Reclassify_3d( rD:\GIS_Book_Exp\Ch05_Site\road_buf, distance, arcpy.sa.RemapRange([[0, 200, 1], [200, 500, 2], [500, 9999, 3]]), rD:\GIS_Book_Exp\Ch05_Site\road_reclass, NODATA )逻辑说明Reclassify_3d是栅格重分类工具在 Python 里的接口第二个参数是重分类字段名第三个参数RemapRange用列表指定三段区间的新旧值映射最后 NODATA 表示把缺失值保留为 NoData。从 Results 窗口复制出来的代码会自动带上绝对路径改数据目录时只需要替换路径字段这部分是替换时要格外小心的部分——路径里出现的盘符、反斜杠方向、以及中文目录名的转义都会影响能否重跑成功。参数说明RemapRange的区间是左开右闭[0,200,1] 表示 0 到 200 赋值为 1200 到 500 赋值为 2500 以上赋值为 3。新旧值的对应关系要和你实验设计的分级一致改参数时只动这个列表就行不用动工具的其他部分。5.3 换数据教材 shapefile 换成自己的矢量数据后要改三处很多人拿到了教程光盘跑完一两遍教材实验之后就想把数据换成自己研究区域的图件。这个替换过程有三个地方容易翻车。第一处是坐标系。自己的数据通常是 CGCS2000 或 WGS84 坐标系而教材实验环境是按北京 54/西安 80 配置的直接替换后做叠加分析会提示坐标系不一致。处理方法进 ArcToolbox → Data Management Tools → Projections and Transformations → Feature → Project把自己的数据统一定义到教材实验所在投影坐标系再放到工作目录下。第二处是字段名。教材实验的字段顺序和你的数据不一定相同尤其是叠加分析和交叉表统计中系统按字段名读取而不按位置读取。比如教材实验用的是POP字段你的数据里叫Population工具执行时结果列全为空。替换数据后第一步就是打开属性表把要用到的字段名改成和原脚本一致或者修改脚本里的字段引用。第三处是几何类型。教材实验里道路是折线、地块是面替换成自己的数据时如果几何类型不匹配工具会直接拒绝执行。检查方法很简单看属性表上方显示的要素类型或者在 Catalog 里看数据的 Shape 字段类型。确保点、线、面三类数据分别用在合适的工具链中。完成这三处替换之后之前写好的脚本只需要改输入路径整个实验流程就能直接复用。这套做法对于要写毕业论文、做课程设计的人尤其实用。6. 一种低成本的验证习惯按实验编号做文件清单先跑通再深究做这套教材实验我吃过的最大一次亏是做到第三个叠加分析时才发现用的图层是上一个实验的输出两个实验数据放在相邻目录里文件名相似度很高拿错之后整个流程结果图全乱了重跑花了一个下午。从那以后我每次拆这类教程资源都强制自己先花十分钟建立一张实验文件清单再开始动手。清单的格式很简单四列就够了实验编号、光盘数据路径、预期输出成果、实际执行状态。以下是模板示例实验编号输入数据路径预期输出状态实验4 缓冲区Ch04_Buffer\roads.shp道路_buffer.shp已跑通实验5 叠加Ch05_Overlay\parcels.shp叠加结果多边形待执行实验6 栅格计算Ch06_Raster\slope.tif适宜性栅格待执行填表的过程中你必然会打开每个数据看一眼属性表这个动作本身就是一次轻量验证能让数据缺失、字段错误这类问题提前暴露。每跑完一个实验在状态列写下使用的核心工具和异常备注下次再遇到同类问题直接翻这个表就能定位。这个习惯还有一个额外好处是对照检查。教材实验的演示录像通常会在开头显示实验目标结尾显示预期结果图做完实验后打开自己的结果图和录像中的图对比一下图例范围、分级颜色、最大值能发现参数是否设定错误。对比的重点是栅格实验里的最大值和最小值如果差了一个数量级说明前面坐标系或单位出了问题不会一直错到最后才发现。做实验卡住的时候优先检查数据路径、坐标系、字段名这三个固定位置而不是反复调整工具参数。绝大数翻车场景都出在这三处。这套流程不只适用于这本书的光盘任何教程类资源拿到手后都可以先做这一步再动手。希望这份拆解对你有帮助。本文还有配套的精品资源点击获取