
简介《ArcGIS地理信息系统空间分析实验教程(第2版)》配套光盘第一部分面向GIS初学者以及需要系统掌握空间分析操作的用户。资源对应教材中的重点实验章节提供了基础界面操作、数据管理、专题制图、地理处理建模以及缓冲区、网络、地形等空间分析案例所需的练习数据解决自学时“有教程无数据”的难题。压缩包共含1207个文件主要类型为Shapefile矢量数据shp/dbf、文件地理数据库gdbtable/adf、栅格影像img、ArcMap地图文档mxd、图层文件lyr等覆盖矢量、栅格、地图工程等多种格式包体大小39.42MB目录结构清晰便于按章节索引所需内容。目前已有822人参与学习适合希望边学边练、借助真实数据快速上手ArcGIS 10.0空间分析流程的读者。通过完整实验可掌握从数据准备到空间分析出图的整套操作路径为后续项目应用奠定基础。1. 一张教学光盘为什么值得花一周时间往里钻拿到《ArcGIS地理信息系统空间分析实验教程第2版》这套教材配套光盘 part-1 被很多人当成了普通的“数据包”复制、解压、双击打开然后照着书做实验。A同学就是这么干的——底图倒是出来了可用缓冲区工具就报错属性表里原本该有的字段全是空值跟着步骤做出来的结果和示例图差到离谱。问题不在操作而在于光盘里的数据并不是独立文件它带着路径约定、坐标系定义和版本依赖。这张光盘要解决两件事提供一套能跑通完整空间分析的实验数据和一条照着走不跑偏的操作路径。适合刚接触 ArcGIS 的学生也适合想规范实验流程的从业者。盘里有宝但得按它的规则来。2. 先从光盘目录读起实验数据、讲义与工具箱的组织逻辑2.1 根目录结构与 part-1 的边界教材第2版的配套光盘按常见做法会拆成多个分卷part-1 代表一号盘或第一部分。拿到盘先别急着复制打开光盘根目录看两样东西一是有没有 setup 或使用说明文档二是有没有以章节或实验编号命名的数据目录。这两个信息决定了你是要“先合并分卷再复制”还是“直接按章节复制”。如果根目录出现 EX1、EX2 这种结构说明数据已经按实验组织如果出现 DISK1、DISK2 两个目录说明 part-1 和 part-2 很可能是分卷需要看说明里的解压顺序。顺序翻车的表现是某些图层只有文件名没有几何遇到这种情况要把整个解压目录删掉重新来别手动补文件。我习惯先把目录树导出来再决定怎么处理。Linux 下这么看Windows 可以把文件管理器里的目录列表另存为文本# 递归导出目录结构存成清单再检索 ls -R /media/cdrom catalog.txt less catalog.txt命令逻辑是ls 带 -R 递归列出所有子目录和文件重定向到 catalog.txt方便在编辑器里搜索 Ex、Data、Toolbox 这些关键词不用靠眼睛一层层点。参数说明光盘路径如果带空格shell 里要加引号Windows 上等价命令是 tree /F /A导出后同样用文本检索。part-1 与后续分卷的边界通常写在使用说明里有些按数据量分卷有些按功能模块分卷先读说明再动手能避开一半的坑。2.2 实验编号背后的数据依赖关系配套数据按“实验编号”组织每个实验目录一般放四类东西底图数据、分析对象、参考结果、实验说明。例如缓冲区实验需要点或线要素作为源再加一个面要素当背景叠加实验至少要两个面图层。它们之间通过工具界面里的“选择图层”建立关系而不是靠文件名但目录结构决定了打开文档时相对路径能不能对上。我建议按实验编号做一张映射表把“实验名、参与数据、工具、关键输出”列出来这是可抄作业的做法。实验方向常见参与数据常用工具关键输出缓冲区分析点/线源要素、背景面缓冲区缓冲面要素叠加分析两个面或线要素相交、裁剪、擦除叠加结果面表面分析DEM 栅格坡度、坡向、重分类分级栅格网络分析道路线要素网络数据集路径或服务区建表的时候你会发现绝大多数实验的数据依赖只有两三层真正让人翻车的不是工具而是“以为数据全了其实缺了一个 .prj 文件”。另外实验过程中不要随手新建图层存到默认临时目录空间分析的中间输出应该统一写到实验目录否则工具跑完结果不知道落在哪里找回输出像拆盲盒。我一般会在实验前把 ArcToolbox 环境里的“工作空间”指到当前实验目录这样每一步输出都能在同一个地方找到。2.3 从只读光盘到可写目录复制数据的正确姿势光盘是只读介质而空间分析工具几乎都要写中间文件相交要生成临时要素、栅格计算器要写缓存、编辑会话要产生锁定文件。直接在光盘里跑轻则提示“无法写入”重则卡死在创建输出要素那一步。所以第一步就是把数据完整复制到本机磁盘并且路径里不要出现中文和空格。常见做法是建一个纯英文的实验目录按实验编号建子目录# 关键复制到本地别从光盘直接打开 mkdir -p D:/gis_experiment/ex1 cp /media/cdrom/part1/Ex1/* D:/gis_experiment/ex1/ cp /media/cdrom/part1/Ex2/* D:/gis_experiment/ex2/ ls -lh D:/gis_experiment/ex1/复制完不要立刻双击文档先检查每个 shapefile 是否带齐附属文件。一个完整的 shapefile 至少有 .shp几何、.shx索引、.dbf属性表有 .prj 才有坐标系定义。如果拷出来只有 .shp 和 .dbf缺了 .prj后面所有涉及投影距离或面积的分析都会出错。参数说明cp 命令逐个文件复制目录整体复制要用 cp -r如果目标目录有同名文件用 cp -i 让系统先询问避免覆盖原始数据。注意复制数据后仍从光盘直接打开文档ArcGIS 会因只读介质无法写入临时文件可能直接假死。所有实验请先复制到本机再启动。把数据搬完最后一步是确认没有只读属性。从光盘复制出来的文件常常保留只读标记shapefile 的 .dbf 只读时编辑属性表或写 join 结果都会失败。Linux/macOS 下执行 chmod -R wWindows 下选中整个实验目录右键属性里取消“只读”。这一步做完环境才算真正准备好。3. 实验环境三件事坐标系、数据格式与工具箱加载3.1 先定坐标系再动手地理坐标与投影坐标的分工空间分析实验里一半的“结果对不上”根子都在坐标系。地理坐标系用经纬度描述球面上的位置单位是角度投影坐标系把球面展开成平面单位是米。缓冲区距离、面积统计、坡度坡向、道路长度分析都依赖投影坐标系因为“在经纬度下做 100 米缓冲区”在几何上没有意义。很多教材实验直接给结果图不讲坐标系但你自己做的时候必须先确认数据落在哪个坐标系。操作顺序我固定是这样加载数据后先打开图层的属性表看“源”页签里的坐标系和范围。如果只有地理坐标系在工具箱里搜 Project 工具把数据转到适合本区域分析的投影坐标系再做后续操作。这里说的“适合本区域”通常指能保长度的等距投影或适合面积计算的投影而不是随手选 Web 墨卡托。判断数据有没有坐标系定义可以从范围数值猜一个坐标值在 100 万量级而单位是米多半已经定义了投影如果数值是 116 度、39 度这种形态说明是地理坐标系面积分析前必须转投影。写个十行脚本能快速把一批数据的坐标系摸清楚import arcpy fc rD:/gis_experiment/ex1/roads.shp desc arcpy.Describe(fc) # 只读元数据不改动原数据 print(desc.spatialReference.name) print(desc.spatialReference.linearUnitName) print(desc.extent)这里的 Describe 不会修改数据只读取元信息。spatialReference.name 输出坐标系名称linearUnitName 输出线性单位extent 输出要素范围。参数说明如果三项分别输出 Unknown、Degrees 和类似“116.xx 39.xx”的范围说明数据缺投影定义要用“定义投影”工具把正确的坐标系写回数据而不是在 ArcMap 里手动猜。3.2 矢量、栅格与表三类数据容器的特性配套光盘里大部分是 shapefile 和 TIFF 栅格偶尔带个人地理数据库。三类数据在实验里分工不同矢量存离散对象点表示学校、井位线表示道路、河流面表示地块、区域栅格存连续表面DEM 高程、坡度、距离栅格、重分类结果都是栅格表格存属性统计表、关联表、坐标表是实验的辅助材料。空间分析实验里最容易出错的是把表格 join 到矢量时关联字段类型对不上。比如要素类里的地块编号是文本表格里却是数字join 后要么全空要么只有几行有值。拿到每张表先看字段类型文本型、长整型、双精度再决定要不要用字段计算器构造一个统一的编码字段。选型上我习惯把实验输出写到文件地理数据库gdb而不是往磁盘里散落 shapefile。原因很实际shapefile 的字段名会截断到 10 个字符空间分析工具生成的字段名偏长时写着写着字段就变成 FID_1、FID_2 这种让人看不懂的编号和教材里的字段名对不上排查起来非常痛苦。gdb 支持长字段名结果放在一个容器里也方便复制和转移。个人地理数据库mdb在老光盘里常见但在较新版本里经常只能读不能写需要把源数据复制到 gdb 再跑分析直接往 mdb 写结果容易碰上“数据源只读”的报错。3.3 工具箱加载与搜索习惯环境设置比背菜单更实用空间分析那组工具需要在菜单栏“自定义→扩展模块”里勾选“空间分析”否则工具按钮灰色点了没反应。不同版本菜单位置不一样所以我不建议背菜单路径更推荐用 ArcToolbox 顶部的搜索窗输入“缓冲区”“坡度”“擦除”这些关键词工具会自动带出路径和参数说明。搜索窗的作用不只是找工具还能直接打开工具帮助页很多参数比如侧类型、融合方法里面解释得比教材还细。动手做实验前我一般会把环境设置写进 ArcPy 或直接在工具箱里配置import arcpy # 工作空间所有中间结果默认写到当前实验目录 arcpy.env.workspace rD:/gis_experiment/ex1 # 覆盖输出重复跑实验时不会因结果已存在而中断 arcpy.env.overwriteOutput True # 输出坐标系和主要输入数据保持一致避免结果坐标系漂移 arcpy.env.outputCoordinateSystem arcpy.describe(roads.shp).spatialReference这段脚本的逻辑是先把默认输出目录切到实验目录防止中间文件落到系统临时目录找不到再打开覆盖输出这样同一个工具反复调参跑多次不会因为“要素集已存在”卡住最后把输出坐标系锁定成和 roads.shp 一致这样无论输入里混了什么别的投影最后结果的地理基准是统一的。参数说明outputCoordinateSystem 不设置时大部分工具会沿用第一个输入数据的坐标系一旦输入数据间坐标系不一致输出结果就会随机取一个这是结果和教材差出几公里的隐藏原因。4. 从教材实验到能迁移的方法四个空间分析套路与参数细节4.1 缓冲区分析距离参数与融合选项背后的地理含义缓冲区是看着容易、做出来容易错的第一类实验。工具界面上几个参数不是摆设距离、侧类型、末端类型、融合类型。距离决定缓冲半径教材会给一个固定值但换数据时你得先确认数据的单位。如果数据集还是地理坐标系缓冲区工具里距离填 100实际可能是 100 度而不是 100 米结果完全不能用这就是第3章先定坐标系的意义。融合选项是另一个重灾区。不融合每个源要素生成独立缓冲面相邻缓冲各自重叠融合后重叠区合并成一个要素。实验里要求做“禁建区”时一般选全部融合输出只有一条记录表示整个区域范围按类别做禁建区就选“按字段融合”字段选类别编码。对应 ArcPy 参数顺序是这样的import arcpy arcpy.env.workspace rD:/gis_experiment/ex1 arcpy.env.overwriteOutput True # 缓冲距离100米FULL表示双侧ROUND表示圆头端ALL表示全部融合 arcpy.Buffer_analysis(source_points, result_buffer, 100 Meters, FULL, ROUND, ALL)Buffer_analysis 的参数顺序是输入要素、输出要素、缓冲距离、侧类型、末端类型、融合方法。FULL 表示双侧建立缓冲区适合道路两侧等距扩展只缓冲道路左侧或右侧要选 LEFT 或 RIGHT。末端类型 ROUND 是圆头点源实验基本都用它FLAT 是平头常用来模拟沿道路的噪声线源。融合方法 ALL 把所有输出的缓冲合并成一个要素属性表只剩一条记录适合做总禁建范围。跑完验证两步右键结果图层打开属性表看记录数再对照教材示例图看形态面积单位不对就回到坐标系检查。4.2 叠加分析相交、裁剪、擦除的选择逻辑叠加分析有三个名字相近但逻辑完全不同的工具选错是家常便饭。判断口诀需要双方属性用相交只求输入被边界切一块用裁剪只想把某块区域从输入里挖掉用擦除。举例来说“计算道路与缓冲区的重叠面积”用相交结果里同时保留道路和缓冲区的属性能算出每段路在哪条缓冲带里“把某区域内的道路提取出来”用裁剪输出的还是道路要素只是范围被切了“找出不适合建房的区域”用擦除把生态红线从地块里挖掉剩下的是可建区域。输出几何保留哪些属性典型场景相交双方属性都保留找出既属于 A 又属于 B 的区域裁剪只保留输入属性从大范围数据切出研究区擦除只保留输入属性排除禁建区、保护地叠加分析有两个高频坑。第一个是输入图层坐标系不一致相交后产生大量细碎多边形图面看起来像麻点统计面积也失真解决办法是回到第3章统一投影。第二个是输出格式问题相交结果字段多输出到 shapefile 时字段名被截断看起来像乱码解决方法是把输出目标指到 gdb。另外参与叠加的要素不能有自相交或空洞否则会在结果里生成异常小面片。跑工具之前先执行“检查几何”能筛掉一批潜在问题这步在复杂区域数据上几乎必做。4.3 表面分析DEM 重分类与坡度坡向的阈值设置表面分析起点是 DEM 栅格。坡度工具输出每个像元的坡度角单位是度坡向输出 0-359.9 的方位角。很多教程直接让用“重分类”把坡度分成 5 级但 0-90 度按等间隔分级通常不适合真实地形平缓区全被压进第一级图面一片深色统计上也没有区分度。我一般先看坡度直方图或累计频率再手动设断点比如 0-3 度平地、3-8 度缓坡、8-15 度中等坡、15-25 度陡坡、25 度以上极陡这样分级才符合地貌实验的常见认知。重分类工具里把旧值区间映射成新等级断点自己填面板会把连续值分段。参数细节输出像元大小不要随意改保持与原始 DEM 一致重分类边界处理建议用默认值。坡向分析更隐蔽的坑是类别映射坡向输出是连续角度要按正北为 0、顺时针计数把角度归成 9 类北、东北、东、东南、南、西南、西、西北、平地需要在重分类的表格里逐段填上下限不能直接拿连续角度制图。做完再统计各类占比和教材数字对不上时先查重分类断点再查 DEM 范围是否被裁过。4.4 网络分析道路数据与阻抗字段的坑网络分析和前面几种不同不能直接拿道路线要素跑路径分析必须先构建网络数据集。构建过程会读入道路线的连通性因此矢量里一堆“看起来相交但没打断”的道路是路径结果绕路的主要来源。构建网络之前先用“检查几何”工具看自相交和悬垂线再用“打断相交线”把交叉口真正打断这样路径分析才会按道路实际连通关系计算。这个步骤在教材里常常一笔带过实际做的时候却决定结果是否可信。阻抗字段选择是网络分析里最像玄学的地方。选长度只用 shape_length 字段就行选时间得先给道路表加一个通行时间字段再按道路等级填速度值。阻抗单位不一致会让最短路径“看起来绕了但算起来更快”因为系统在优化时间而不是距离。操作流程工具箱里搜“构建网络数据集”向导里依次设置连通性、高程模型、阻抗属性和转弯模型。如果实验数据里已经带了现成的网络数据集直接加载它就行不要重建重建会把原来的方向字段覆盖掉字段一丢教材里的结果就再也对不上了。5. 光盘配套数据用起来的常见问题路径、投影与字段类型排查5.1 中文路径导致数据加载失败现象从光盘复制到本机后加载 shapefile 提示“无法添加数据”图层列表里只有名字没有图形执行工具时弹出“数据集不存在”或“无法打开工作空间”。 原因ArcGIS 的某些版本对非 ASCII 路径支持不完整中间文件写不进带中文的目录光盘目录名里如果带了空格或括号也会让工具定位失败。 解决把整个实验目录复制到纯英文路径目录名只用字母、数字、下划线。复制完先确认路径栏里没有中文和空格再打开软件。如果数据已经从光盘解压到中文目录直接整体移动别单独挪文件否则相对路径信息又丢了。5.2 数据看不到却存在图层刷新与坐标系误判现象图层树里有名字内容窗口却一片空白缩放全图也找不到要素属性表能打开但记录数正常。 原因坐标系信息缺失或定义错数据被放到远离本区域的坐标范围。比如数据实际是投影坐标系但 .prj 丢了软件默认按地理坐标系显示要素就会缩到坐标轴附近看不见。 解决右键图层→属性→源看“范围”里的坐标值。如果数值明显不在本区域范围用工具箱里的“定义投影”把正确的坐标系写回数据再点缩放全图刷新视图。注意“定义投影”是在“不知道坐标系或定义错误”时用数据本身带着正确投影时不要重复定义否则会把坐标值重新解释一遍造成更严重的错位。5.3 字段值读出来是空的个人地理数据库与文件地理数据库的差异现象图层属性表打开某个字段全是Null做 join 之后目标表新增字段也全部为空。 原因多数是关联字段类型不匹配要素类里是文本型表格里是数值型另一个常见原因是数据放在个人地理数据库mdb里较新版本对 mdb 只读工具没法在源表上写临时关联字段。 解决先打开两个表的属性看关联字段类型是否一致。不一致时用“字段计算器”把其中一方转成相同类型或者新建一个统一编码字段。要跑空间分析的话先把 mdb 里的要素类用“复制要素”转到文件地理数据库再执行后续工具直接往 mdb 里写结果大概率失败。5.4 实验结果与教材对不上相对路径引用与样本集范围现象每一步都按书做了输出的统计值比教材少了一大截或多出一倍图形形状也对不上。 原因教材示例结果常用完整数据集配套光盘里的实验数据可能经过抽稀或按章节裁剪范围和对象数量本来就不一样另外文档里的图层源可能还指向光盘路径软件打开时找不到数据展示的只是残缺结果。 解决先看实验说明是否注明“使用本章数据”如果没有回到光盘目录找名为完整数据或原始数据的位置。在 ArcMap 里检查每个图层的“数据源”属性若还指向光盘或旧路径用“设置数据源”重新指向本地实验目录。每次开始实验前把图层源刷新一遍不要急着做分析这习惯能省出大量后期排查时间。5.5 工具按钮灰色与扩展模块未启用现象菜单上“空间分析”一组工具全部置灰点下去没有反应ArcPy 调用坡度或缓冲区时提示工具不存在。 原因空间分析扩展模块没有勾选或者当前的软件许可类型未包含该模块接口。 解决在菜单栏“自定义→扩展模块”里勾选“空间分析”重启软件后再试。如果环境中安装了多个许可等级把许可切换到 Advanced 或同等完整级别再执行一次脚本。检查是否生效的方法很简单工具箱搜索窗输入“坡度”能打开参数面板就是模块已启用。6. 把配套数据变成自己的训练场三个进阶用法6.1 用 Python 批量验证光盘数据的可用性把实验目录当成训练集写一个脚本一次检查所有要素类的坐标系、范围、要素个数比在界面里逐层点开可靠得多。常见做法是循环每个实验文件夹读取元数据import arcpy, os root rD:/gis_experiment for folder in [ex1, ex2, ex3]: arcpy.env.workspace os.path.join(root, folder) for fc in arcpy.ListFeatureClasses(): desc arcpy.Describe(fc) # 输出文件名、坐标系名称、范围方便对照排查 print(fc, |, desc.spatialReference.name, |, desc.extent)这里 ListFeatureClasses 只列矢量要素类检查栅格要改用 ListRastersspatialReference.name 为空时就表示缺 .prj。参数说明os.path.join 负责拼路径避免手写斜杠的格式问题每个文件夹单独设置 workspace脚本就能在循环里切换目录。跑完看一眼输出凡 Unknown 坐标系的文件提前处理后面所有实验都能少踩一轮坑。6.2 从复现实验到改造实验参数灵敏度与验证习惯教材参数是“标准答案”但不是唯一答案。复现一遍之后我会刻意改两三个参数观察结果变化缓冲区距离、重分类级数、叠加对象顺序。改之前记录原参数改之后对比图面分布和统计值变化幅度这样既能验证自己是不是真懂也能积累调参手感。实验尝试参数观察指标缓冲区100 / 200 / 500 米面积与覆盖变化表面分析3 级 / 5 级 / 8 级重分类各级面积占比叠加分析分别用相交、裁剪、擦除输出要素数量差异6.3 给每个实验记一份可复现的参数笔记我自己的习惯是每个实验做完在实验目录里放一个说明.txt写清数据路径、坐标系、关键参数、输出文件名。这既是半年后的后悔药也是换电脑时的救命稻草——空间分析的结果图看不出参数时间一长连自己当初为什么选那个融合类型都想不起来。翻车最多的地方就是坐标系和字段名所以现在每做一个实验先跑一遍 6.1 的脚本再开始点界面。这条路走通以后遇到新分析任务的第一反应不再是打开工具箱找按钮而是先想清楚数据属于哪一类、要在什么坐标系下计算、输出用什么容器保存。希望帮到你。本文还有配套的精品资源点击获取