ArcGIS基础100例:配套数据+操作手册攻克投影变换与空间分析

发布时间:2026/10/24 5:42:55
ArcGIS基础100例:配套数据+操作手册攻克投影变换与空间分析

简介:《ArcGIS基础100例(操作手册+操作数据)》面向GIS初学者及具备一定基础的ArcGIS用户,以100个操作案例串起软件基础功能与空间分析流程,帮助读者从界面认识、数据导入导出、图层管理、地图布局设计逐步过渡到专题制图、空间查询统计、数据处理与模型构建。包内共2069个文件,包含shp、shx、dbf、prj等矢量数据,tif、tfw栅格数据,mxd地图文档、gdb地理数据库,以及pdf操作手册、pptx课件和txt练习说明,压缩包约156.04MB,配套数据较完整,便于按案例复现实验,也覆盖栅格与矢量数据的组织、符号化与成果输出等常见环节。已有1632人学习,学习热度较高。读者可将手册讲解与真实地理数据对照练习,通过理解数据含义、选择合适工具、解读分析结果来查漏补缺,对课程作业和基础制图任务也有参考价值,适合课程实验、自学入门和基础技能巩固。

1. 装完 ArcGIS 第一件事不是点开工具,而是先搞清这份 100 例到底怎么用

不少人装完 ArcGIS 桌面端,打开 ArcToolbox 对着上百个工具发呆,翻练习册到第三个例子就跟不上——不是工具难,是手册里的步骤和数据对不上号。这份 ArcGIS 基础 100 例(操作手册 + 配套操作数据)解决的正是这个断层:它把常用操作拆成 100 个能独立跑完的小练习,每个练习配一份可以直接加载的数据,从矢量编辑、属性表查询一路覆盖到坐标系、栅格 DEM、空间分析和地图整饰。适合三类人:零基础想系统过一遍空间数据处理流程的、工作几年但基础一直没打牢回头补课的、以及需要一套标准练习带新人的。关键前提只有一个——手册讲步骤,数据保证能复现,两边必须严格对上,从错误的文件夹开始跑,后面的坑会一路放大。

2. 先把资源结构摸清:100 个例子按什么顺序排,数据怎么对号入座

拿到一套上百个示例的练习包,最忌讳的就是从第 1 个例子一路点到底。这套资料的编排逻辑是“模块分组 + 编号对应”,先花二十分钟把结构看明白,后面每一个练习都能节省五六分钟的找文件时间。这一章拆的是两件事:目录怎么组织,以及跑第一个例子之前必须先把哪几项环境配好。

2.1 手册目录的三层结构:模块—示例—数据

这套 100 例是按能力模块切分的,不是按工具菜单顺序排的。常见的分块大致是:矢量数据编辑与属性维护、属性表查询与字段计算、坐标系与投影变换、栅格数据与 DEM 分析、矢量空间分析(缓冲区、叠加、网络)、符号化与地图输出、地理数据库与拓扑检查。每个模块下面挂着若干带编号的示例,示例编号一般和配套数据文件夹同名或者同号,这是最省事的对应方式——手册翻到第几例,数据目录里就找同号的那个文件夹。

配套数据通常分两层:一层是“原始数据”,用来照着步骤从头做;另一层是“结果数据”或者“参考答案”,做完之后拿来比对。很多人忽略后者,其实它才是这套资源最有价值的部分,因为你能用它反查自己哪一步的参数填错了,而不是对着屏幕怀疑人生。

模块典型练习主要用到的工具数据格式
矢量编辑新建要素、捕捉、分割合并Editor 工具条、拓扑Shapefile、文件地理数据库
属性与查询字段计算器、按属性选择Table、Select By Attributes.dbf、要素类
坐标系定义投影、投影变换Define Projection、Project矢量与栅格
栅格与 DEM坡度坡向、填洼、山体阴影Spatial AnalystTIFF、GRID
空间分析缓冲区、相交、擦除、空间连接Analysis Tools矢量要素类
制图输出分级色彩、标注、图例版式符号系统、布局视图.mxd
数据库与拓扑建要素数据集、拓扑规则验证Catalog、拓扑文件地理数据库

提示:手册如果配套的是较老版本的菜单名,在搜索框里直接敲工具英文名或中文关键词能找到,不用死记菜单路径。工具箱右上角的搜索是这套资料里被低估的功能。

另外要留意一个细节:同一模块里的示例是有依赖关系的。比如“相交分析”那一例,往往默认你已经做完了前面的“投影变换”,直接跳着做就会得到一堆空结果。判断方法很简单,看示例开头有没有一句“本练习基于上一例的结果数据”,有的话就老老实实按顺序走。

2.2 跑之前先搭好环境:软件、许可、工作目录和中文路径

在点开第一个示例之前,有几项设置必须先落地,否则后面会出现一堆看起来毫无道理的报错。

第一步是确认扩展模块。ArcMap 桌面端的空间分析、三维分析这些功能默认是不勾选的,需要从 Customize 菜单进 Extensions,把 Spatial Analyst、3D Analyst 勾上。这一步不做的直接后果是:工具箱里对应的工具是灰的,或者跑出来提示“需要 Spatial Analyst 许可”。很多人第一次翻车就翻在这里。

第二步是建一个干净的工作目录。我的习惯是固定三层结构:data放原始数据,out放自己跑出来的结果,scratch放中间临时文件。路径规则只有一条硬约束——纯英文、无空格、层级不要太深。中文路径在 ArcMap 时代是典型的玄学问题,有时候能打开,有时候打不开,有时候能打开但字段名变成问号,排查起来非常浪费时间。

第三步是设置地理处理环境。在 ArcToolbox 上右键进 Environments,把 Current Workspace 和 Scratch Workspace 指到刚才建好的目录,Output Coordinate System 先留空(除非整套练习统一坐标系),XY Tolerance 保持默认。这一步的意义在于:很多工具的输出路径不填就用当前工作空间,不设的话文件会散落到默认数据库里,回头根本找不到。

第四步是决定数据存哪。Shapefile 兼容性好但有字段名 10 字符限制、不支持空值、中文容易出问题;文件地理数据库(.gdb)没有这些限制,做拓扑和要素数据集也必须用它。我的做法是:练习阶段用 shapefile 图省事,一旦涉及拓扑、属性域、要素数据集,立刻转进 .gdb。

环境项建议设置原因
Current Workspace项目下的 data 目录工具默认读写位置
Scratch Workspace项目下的 scratch 目录中间结果不污染主目录
Output Coordinate System留空或统一设为练习坐标系避免混坐标系叠加
XY Tolerance默认手动改小容易导致叠加丢要素
临时目录非系统盘、纯英文减少长路径报错

3. 三个典型示例拆开跑:从加载数据到出结果的完整链路

100 个例子里,真正撑起后续绝大部分操作的是三类:坐标系处理、矢量叠加分析、地图输出。这三类只要跑通一次,剩下的练习基本是换数据重做。下面按实际操作的顺序拆,每一步都落到具体参数上,包括那些手册里往往一笔带过、但实际决定成败的设置。

3.1 坐标系:地理坐标转投影坐标,为什么结果会偏几百米

这是整套资料里最容易埋雷的一节。地理坐标系(比如常见的经纬度那套)单位是度,投影坐标系单位是米。在经纬度数据上直接算面积、做缓冲区、量距离,得到的结果全是错的,而且错得不动声色——面积字段照样有数,只是这个数没有物理意义。

正确的处理链路是三步。第一,先看清数据当前是什么坐标系。在内容列表里右键图层进 Properties,看 Source 里的 Geographic Coordinate System 和 Projected Coordinate System 分别是什么。如果只有前者,说明是地理坐标系。第二,如果数据本身没有坐标系信息(显示为 Unknown),先用 Define Projection 给它“贴上标签”,注意这个工具只写元数据、不动坐标值,用错了会把数据彻底搞乱。第三,才是用 Project 做真正的坐标转换。

Project 工具的关键参数只有四个:Input Dataset 选待转数据,Output Dataset 选输出路径,Output Coordinate System 选目标投影,Geographic Transformation 在地理坐标系之间转换时才需要填(同一基准面下可以留空)。目标投影怎么选,取决于研究区位置:国内常用的是高斯-克吕格 3 度带或 6 度带,带号按中央经线算;跨区域大范围分析用 Albers 等积投影更合适。

参数填什么说明
Input Dataset待转换的要素类或栅格栅格要用 Project Raster,不是 Project
Output Dataset落到 out 目录,不覆盖原数据保留原始数据是后悔药
Output Coordinate System目标投影坐标系按中央经线选带号
Geographic Transformation同基准面留空跨基准面必须选七参数或三参数

一个血泪经验:转换完成后不要只看图层能不能显示,一定要打开属性表看 Shape_Area 或 Shape_Length 字段的量级。如果转换前面积是零点几、转换后变成几十万,说明单位从平方度变成了平方米,这是对的;如果转换前后数量级没变,八成是只做了 Define Projection,坐标值根本没动。

3.2 缓冲区与叠加分析:距离、融合、端盖这几个参数怎么填

缓冲区是空间分析里参数最多、也最容易被默认值坑到的工具。它挂在 Analysis Tools 的 Proximity 下面,核心参数有六个,每一个都影响结果形状。

Distance 是缓冲距离,填数值后必须手动选单位。这里有个高频错误:在地理坐标系下填“500 米”,工具会把它当成 500 度来算,结果要么报错要么生成一个包住整个地球的面。正确做法是先投影,或者在 Method 里选 GEODESIC 走测地线计算。

Dissolve Type 决定重叠区域怎么处理。NONE 是每个要素各缓冲各的,重叠部分保留;ALL 是把所有缓冲结果合并成一个整体,重叠区消失;LIST 是按指定字段分组融合。做“某类设施服务范围”这类分析时选 ALL,做“每个点位单独影响范围”时选 NONE,两者结果差异很大。

End Type 和 Side Type 只对线和面有意义。线要素的端盖选 ROUND 得到圆头,选 FLAT 得到平头;面要素的侧类型选 FULL 是内外都缓冲,选 OUTSIDE 只往外扩,选 INSIDE 只往里缩。这几个参数在手册里通常只用一句话带过,但做规划类分析时选错会导致面积统计差出一大截。

参数常见取值踩坑点
Distance数值 + 单位单位不选,默认按数据坐标系单位
Dissolve TypeNONE / LIST / ALLALL 会丢掉要素个体信息
End TypeROUND / FLAT只对线要素生效
Side TypeFULL / LEFT / RIGHT只对面要素生效
MethodPLANAR / GEODESIC大范围、跨带用 GEODESIC
Buffer Distance Field可选字段字段单位要和距离单位一致

缓冲区之后通常接叠加分析。Intersect 用来取两个图层的公共部分,Union 保留全部区域,Erase 是从前者里挖掉后者,Spatial Join 则是把属性按空间关系挂过去。Intersect 的 Join Attributes 参数值得单独说:ALL 保留两个图层的全部字段,KEEP_ALL 只保留输入图层的字段,ONLY_FID 只带要素 ID。字段多了以后属性表会非常难读,做中间步骤时用 ONLY_FID,做最终成果时用 ALL。

XY Tolerance 一般留空让工具自动算,但在两套数据来源不同、精度不一致的情况下,容差过小会导致本该相交的要素被判为不相交,结果直接为空。遇到“明明看着重叠却相交失败”,第一反应应该是查两个图层的坐标系是否一致,第二反应才是调容差。

3.3 符号化与地图整饰:出图前的四项检查

前两类练的是数据处理,这一类练的是把结果讲清楚。符号化本身不难,难的是细节一致性——同一张图里三个图层用了三套色带,图例和图上对不上,比例尺单位写错,这些在正式交付时都是硬伤。

符号化的核心是按字段选渲染方式。唯一值渲染适合分类数据(土地利用类型、行政区),分级色彩适合连续数值(人口密度、坡度),分级符号适合强调数量差异(GDP、产量)。分级方法里,自然断点(Jenks)适合数据分布不均匀的情况,等间隔适合做横向对比,分位数保证每级要素数量接近。手册里通常会指定用哪种,但真正做项目时这套判断逻辑比记住菜单位置更重要。

标注是第二个容易翻车的点。默认标注引擎在要素密集时会大量压盖,需要启用车标注引擎(Maplex),然后调冲突处理、标注压盖、沿线标注这几个选项。字号、晕圈、偏移量这些小参数,决定了图能不能直接拿去用。

布局整饰有四项必查:图名是否与内容一致、图例是否只列了图上真实存在的类别、比例尺单位是否和数据坐标系匹配、指北针和格网有没有漏。这四项里最常出错的是图例——删掉某个图层后图例里还留着它的条目,或者分级色彩只显示了部分级别。

检查项具体看什么常见错误
图名与图层内容、时间范围一致沿用手册默认标题
图例条目数与图上类别数一致删层后没刷新图例
比例尺单位与投影坐标系一致经纬度数据配米制比例尺
指北针/格网正北方向、经纬网间隔旋转数据框后未校准

导出的时候分辨率按用途定:屏幕用 96 或 150 dpi,打印用 300 dpi,出大图用 600 dpi 但文件会明显变大。导出格式优先 PDF 或 TIFF,前者矢量元素不失真,后者兼容性最好。

4. 用 arcpy 把重复动作固化:100 例里最值得脚本化的三类操作

做十几个示例之后你会发现,真正耗时间的不是理解工具,而是同一个工具反复填参数、反复换输入文件。这套资料里有大量“对 N 个图层做同一件事”的练习,正是脚本化的最佳场景。arcpy 不需要你从零学 Python,只要能读懂 for 循环和函数参数,就能把一下午的手工活压到几十秒。

4.1 两种运行方式:ArcMap 内嵌窗口和独立脚本

第一种是在 ArcMap 里打开 Python 窗口,直接敲命令,适合边做边试、快速验证参数。优点是上下文现成,当前地图文档、当前工作空间都能直接拿到;缺点是关掉软件就没了,不适合长期复用。

第二种是写成 .py 文件,用 ArcGIS 自带的 Python 解释器跑。要点是别用系统里另装的那个 Python,版本和库都对不上。解释器路径以你机器上的安装位置为准,通常在 ArcGIS 安装目录下的 Python 文件夹里。独立脚本的好处是可以挂到任务计划里定时跑,也可以放进版本管理。

不管哪种方式,开头三行基本是固定的:导入 arcpy、打开覆盖输出、指定工作空间。arcpy.env.overwriteOutput = True这一行特别关键,不开的话第二次运行会因为输出已存在而报错,反复改脚本时非常折磨。

# -*- coding: utf-8 -*- import arcpy import os # 覆盖已有输出,避免反复调试时报“输出已存在” arcpy.env.overwriteOutput = True # 原始数据目录、输出目录,按自己机器上的实际路径改 src_dir = r"D:\arcgis100\data\vectors" out_dir = r"D:\arcgis100\out" arcpy.env.workspace = src_dir

这三行之后的逻辑说明:src_dir指向手册配套的矢量数据目录,out_dir是自己建的结果目录,两者分开是为了保证原始数据永远不被覆盖。arcpy.env.workspace设成源目录后,后面列要素类就不用写全路径了。

4.2 批量投影 + 批量裁剪:两个脚本覆盖大半练习

批量投影是最值得先写的脚本。它的逻辑是:列出工作空间里所有要素类,逐个投影到目标坐标系,输出到 out 目录并加后缀区分,单个失败不影响整批。

# 目标坐标系:按研究区中央经线选,这里以 3 度带为例 target_srs = arcpy.SpatialReference("CGCS2000 3 Degree GK Zone 39") # 遍历工作空间下所有 shapefile(换成 "*.shp" 可只处理 shapefile) for fc in arcpy.ListFeatureClasses(): name = os.path.splitext(fc)[0] out_fc = os.path.join(out_dir, name + "_prj.shp") # 已存在就跳过,方便断点续跑 if arcpy.Exists(out_fc): continue try: arcpy.Project_management(fc, out_fc, target_srs) print("投影完成: " + fc) except arcpy.ExecuteError: # 单个要素类失败不中断整批,打印错误信息便于定位 print("跳过 " + fc + " -> " + arcpy.GetMessages(2))

逻辑说明:arcpy.SpatialReference()接受坐标系名称或 WKID,用名称时要写全,写错会直接抛异常。ListFeatureClasses()默认只列当前工作空间根目录下的要素类,如果数据分在子文件夹里,要先改工作空间或者用arcpy.da.Walk。try/except包住单个转换,是为了让一个坏文件不至于让整批任务停在一半。arcpy.GetMessages(2)只取错误级别的消息,输出干净。

批量裁剪接着上一步的结果跑。注意ListFeatureClasses的通配符参数可以直接筛出带_prj后缀的文件,省得再判断一次。

# 裁剪边界,一般用手册里的研究区范围面 clip_fc = r"D:\arcgis100\data\boundary.shp" # 只处理上一步投影出来的结果 for fc in arcpy.ListFeatureClasses("*_prj"): out_name = os.path.basename(fc).replace("_prj", "_clip") out_fc = os.path.join(out_dir, out_name) if arcpy.Exists(out_fc): continue try: arcpy.Clip_analysis(fc, clip_fc, out_fc) print("裁剪完成: " + out_name) except arcpy.ExecuteError: print("裁剪失败 " + fc + " -> " + arcpy.GetMessages(2))

参数说明:Clip_analysis的三个位置参数依次是输入要素、裁剪要素、输出要素类。裁剪要素必须是面,且和输入要素在同一坐标系下,否则结果可能为空。os.path.basename取文件名,replace换后缀,这是批量处理里最常见的命名套路。

4.3 跑完怎么验:用 Describe 和要素计数做自检

脚本跑完不代表跑对。批量处理最大的风险是“看起来成功了,其实全是空的”,所以每次批量之后必须有个校验环节。最简单的两条:看输出要素数量是否为 0,看空间参考是否真的是目标坐标系。

sample = os.path.join(out_dir, "study_area_clip.shp") # 描述对象里能拿到空间参考、几何类型、范围 desc = arcpy.Describe(sample) print("坐标系: " + desc.spatialReference.name) print("几何类型: " + desc.shapeType) # 要素计数用 GetCount,返回的是 Result 对象,要转成字符串 count = arcpy.GetCount_management(sample) print("要素数: " + str(count)) # 数量为 0 说明裁剪范围或坐标系有问题,需要回头查 if int(count[0]) == 0: print("警告:结果为空,检查裁剪边界与输入是否同坐标系")

Describe的好处是一次能拿到大量元数据,除了空间参考和几何类型,还能取范围、字段列表、是否含 Z/M 值。批量脚本里我一般会在循环末尾统一打印一次坐标系名,肉眼扫一遍就能发现哪个文件的投影没生效。要素计数为 0 是最典型的失败信号,九成是裁剪边界和输入图层不在同一坐标系,剩下一成是范围压根不重叠。

提示:批量脚本第一次跑,先拿两三个文件试,确认输出路径、命名、坐标系都对,再放开跑全量。直接跑全量然后发现命名规则写错,清理起来比重跑还费时间。

5. 常见问题排查:数据、工具、结果三层的翻车记录

这套资料里的示例本身是经过验证的,出问题基本都出在执行环境上。下面这几条是照着 100 例做下来最容易撞上的,按“现象—原因—解决”记,遇到时对照着查,比重新翻手册快得多。

5.1 数据层:打不开、乱码、显示不全

现象一:双击数据或者拖进地图,提示无法添加,或者图层名后面带个红色感叹号。原因通常是路径里有中文或空格,或者 shapefile 的配套文件不全——一个完整的 shapefile 至少要有 .shp、.shx、.dbf、.prj 四个文件,少一个就会出现能显示但查不了属性、或者干脆打不开的情况。解决办法是把整个数据文件夹复制到纯英文短路径下,比如D:\arcgis100\data,然后检查同名文件是否齐全,.prj 缺失的话坐标系会显示为 Unknown,需要重新定义。

现象二:属性表里的中文字段名或中文值变成问号、乱码。这是 .dbf 文件的编码问题,老版本桌面端对 UTF-8 支持不好。解决办法有两个:一是把数据导入文件地理数据库再操作,gdb 内部用 Unicode 存储,不经过 .dbf;二是在系统区域设置里确认非 Unicode 程序的语言设置与数据来源一致。前者更省事,也是我一直推荐的做法——凡是要长期维护的数据,一律进 gdb。

现象三:要素明明在属性表里有记录,地图上却只显示一部分。先查图层属性里的定义查询(Definition Query)是不是残留了筛选条件,再查比例尺范围(Scale Range)是不是被设成了只在某个比例区间显示。这两个设置在做练习时经常被顺手改掉然后忘掉,表现就是“数据丢了”,实际只是被藏起来了。

5.2 工具层:报错、结果为空、位置偏移

现象四:投影做完,数据位置偏了几百米甚至几公里,形状也变形了。原因基本是把 Define Projection 当成了 Project 用。前者只改元数据标签、不动坐标值,后者才真正做数学变换。判断方法是看转换前后的坐标值有没有变化:没变就是只贴了标签。正确做法是先 Define Projection 把原始坐标系标对,再用 Project 转目标坐标系,两步不能合并。如果原始数据的坐标系标错了,第一步一定要做对,否则后面越转越偏。

现象五:缓冲区结果是一个包住整张图的巨大面,或者直接报错退出。这是在地理坐标系下按米填距离导致的,工具把 500 米当成了 500 度。解决办法是先把数据投影到米制坐标系再缓冲,或者把 Method 参数改成 GEODESIC 走测地线计算。前者更常用,因为后续的面积统计、叠加分析也要求投影坐标系。附带一条:缓冲区做完记得看面积字段量级,单位不对的话一眼就能发现。

现象六:相交分析返回空结果,但两个图层肉眼看着明显有重叠。排查顺序是坐标系 → 范围 → 容差。先确认两个图层的空间参考一致,不一致的先统一;再看两者的范围(Extent)是否真的相交,有时候一个图层被误裁剪过,范围早就变了;最后才怀疑 XY Tolerance,两套不同精度的数据叠加时,把容差调到合理量级能救回一部分结果。空间连接返回空是同一个道理,只是它不报错,更隐蔽。

6. 把这 100 例当自测题用:用已知结果反查自己的操作

手册配的“结果数据”如果只是拿来对比一下颜色和形状,价值浪费了大半。我的用法是把它当成一套带答案的自测题:每做完一个模块,从里面挑两三个示例,把手册合上自己重做一遍,做完再拿结果数据逐项比对。比对不看图好不好看,看四个硬指标——要素数量、属性表字段结构、面积或长度字段的数值量级、坐标系名称。这四项里任何一项对不上,说明中间某一步的参数或数据源选错了,回去定位比重头看手册高效得多。

举一个具体的验证路径。做缓冲区那一例时,我会先用自己跑出来的结果算一次总面积,再打开结果数据算一次,两个数应该在同一量级;如果差出好几倍,多半是 Dissolve Type 选错了(ALL 和 NONE 的面积能差出一大截),或者距离单位没选对。做投影那一例时,我会在结果数据的属性表里找一个已知长度的要素,和自己结果里的同一条要素比长度值,差在百分之几以内算正常,差一个数量级就是单位问题。这种方法比对着图看半天靠谱,因为它把“看起来对”变成了“数值上对”。

还有一个更省事的检查手段:把每个模块的成果统一导进一个文件地理数据库,用 arcpy 批量打印每个要素类的坐标系、要素数、字段数,生成一张对照表。做完一个模块刷新一次,哪一项和前一次对不上,问题就锁定在那个模块里。

# 批量体检:打印目录下所有要素类的坐标系、要素数、字段数 import arcpy, os ws = r"D:\arcgis100\check.gdb" arcpy.env.workspace = ws for fc in arcpy.ListFeatureClasses(): desc = arcpy.Describe(fc) cnt = int(arcpy.GetCount_management(fc)[0]) flds = len(desc.fields) print("{0} | {1} | 要素 {2} | 字段 {3}".format( fc, desc.spatialReference.name, cnt, flds))

这段脚本不长,但每次做完一个模块跑一遍,能提前发现八成以上的低级错误,尤其是坐标系和要素数量这两项。

从那以后我每次拿到一套练习数据,都先把手册目录和数据目录手工对一遍编号,跑通第一个示例、确认结果能复现,再往下推;凡是涉及投影和缓冲区的步骤,一定先看坐标系再看单位,绝不图省事用默认值。希望帮到你。

本文还有配套的精品资源,点击获取