GIS空间分析怎么做?ArcGIS实战操作全流程(附:练习数据)
引言
GIS空间分析怎么做?ArcGIS实战操作全流程(附:练习数据)这篇教程,面向刚开始做空间分析的 GIS 学生、初级 GIS 工程师和空间数据分析人员,目标是把一次完整的 ArcGIS 空间分析任务从“拿到数据”讲到“输出结果图和统计表”。
很多同学会打开 ArcGIS,也知道有缓冲区、叠加分析、空间连接这些工具,但真正做项目时容易卡在三个问题上:数据坐标系不一致、工具参数不知道怎么选、结果不知道怎么验证。本文用一个典型场景来串起来:分析“哪些居民区位于学校服务范围内,并统计各街道可覆盖居民区数量”。
背景
本文的 ArcGIS 空间分析示例可以理解为一个小型选址与服务覆盖分析。你需要准备以下练习数据:
- schools.shp:学校点数据,字段包含学校名称。
- communities.shp:居民区面数据,字段包含居民区名称和人口。
- streets.shp:街道或乡镇边界面数据。
- roads.shp:道路线数据,可用于制图参考。
如果你没有现成练习数据,可以使用自己城市的公开 POI 点、行政边界和居住区面数据代替。关键不是数据名称完全一致,而是数据类型要对应:点、线、面都要清楚,分析目标也要明确。
本教程以 ArcGIS Pro 的操作逻辑说明,ArcMap 用户也可以参考,因为核心工具名称基本一致,包括投影、缓冲区、裁剪、相交、空间连接和汇总统计。

原理
GIS空间分析的核心不是“点一下工具”,而是利用空间位置关系回答问题。常见关系包括包含、相交、邻近、距离、重叠和连接。
在本文案例中,我们要回答的问题是:居民区是否位于学校一定服务半径内,以及这些可覆盖居民区分布在哪些街道。这个问题可以拆成三个空间分析动作:
- 邻近分析:用学校点生成一定距离的缓冲区,表示服务范围。
- 叠加分析:判断居民区与学校服务范围是否相交。
- 空间统计:把被覆盖的居民区按街道边界进行统计汇总。
这里要特别注意坐标系。距离和面积计算依赖投影坐标系。如果数据是经纬度坐标,例如 WGS 84,直接做 1000 米缓冲区容易出错。正确做法是先投影到适合本地的投影坐标系,再进行距离类 GIS空间分析。
步骤
步骤一:新建 ArcGIS 工程并导入练习数据
- 打开 ArcGIS Pro,新建一个 Map 工程。
- 在 Catalog 面板中连接练习数据所在文件夹。
- 将 schools.shp、communities.shp、streets.shp、roads.shp 添加到地图中。
- 检查图层是否能正常叠加显示,点、线、面位置是否大致匹配。
如果某个图层明显偏移到很远的位置,优先检查坐标系定义,而不是立刻使用移动、编辑等方式手动修正。
步骤二:检查并统一坐标系
在 ArcGIS 中,右键图层,查看 Properties 中的 Source 信息,确认每个图层的 Coordinate System。
建议执行以下检查:
- 所有图层是否都有明确坐标系。
- 点、线、面图层是否使用同一坐标系或可正常动态投影。
- 是否需要计算距离或面积。如果需要,应使用投影坐标系。
如果数据是经纬度坐标,可使用 Project 工具进行投影转换。不要把 Define Projection 当作投影转换工具使用。Define Projection 只是告诉 ArcGIS“这个数据原本是什么坐标系”,不会改变坐标值。
推荐处理逻辑:
1. 图层没有坐标系,但你知道它原本的坐标系:使用 Define Projection。
2. 图层已有正确坐标系,但需要换成米制投影坐标系:使用 Project。
3. 图层显示错位,且坐标系未知:先查数据来源,不要盲目定义。
步骤三:裁剪研究区数据
如果练习数据范围较大,建议先用街道边界或研究区边界裁剪数据,减少后续分析计算量。
- 打开 Geoprocessing 面板。
- 搜索 Clip 工具。
- Input Features 选择 communities.shp。
- Clip Features 选择研究区边界或 streets.shp。
- 输出为 communities_clip。
道路、学校点数据也可以按同样方式裁剪。点数据裁剪后,只保留研究区内学校,避免缓冲区分析把研究区外的学校也纳入计算。
步骤四:创建学校服务缓冲区
打开 Buffer 工具,输入 schools_clip,设置缓冲距离。例如使用 1000 meters,表示学校 1 公里服务范围。
| 参数 | 建议设置 | 说明 |
|---|---|---|
| Input Features | schools_clip | 学校点图层 |
| Distance | 1000 Meters | 服务半径,可按业务要求调整 |
| Dissolve Type | Dissolve All 或 No Dissolve | 只关心整体覆盖范围可合并;要保留每所学校范围则不合并 |
| Output Feature Class | school_buffer_1000m | 输出缓冲区图层 |
如果分析目标是“哪些居民区被任意学校覆盖”,可以选择 Dissolve All。如果还要统计每个居民区对应哪所学校,建议不要合并缓冲区,并保留学校名称字段。
步骤五:叠加分析居民区与学校缓冲区
接下来判断居民区是否落在学校服务范围内。常用工具有 Intersect、Spatial Join 和 Select Layer By Location。
本案例推荐两种做法:
- 如果要生成被覆盖居民区的新面图层,使用 Intersect。
- 如果只想给居民区添加是否覆盖、覆盖学校数量等属性,使用 Spatial Join。
使用 Intersect 的基本设置如下:
- 搜索并打开 Intersect 工具。
- Input Features 选择 communities_clip 和 school_buffer_1000m。
- Output Feature Class 设置为 communities_in_school_buffer。
- 运行后检查输出图层,结果应为与学校缓冲区相交的居民区部分。
如果你不希望居民区面被切割,而是保留完整居民区边界,可以改用 Select Layer By Location 选择与缓冲区相交的居民区,再导出选中要素。
步骤六:按街道统计覆盖居民区数量
要统计每个街道内有多少被学校服务范围覆盖的居民区,可以使用 Spatial Join。
- 打开 Spatial Join 工具。
- Target Features 选择 streets.shp。
- Join Features 选择被覆盖居民区图层,例如 communities_selected 或 communities_in_school_buffer。
- Join Operation 选择 Join one to one。
- Match Option 选择 Intersect 或 Contains,具体取决于居民区是否完全落在街道内。
- 输出为 street_school_service_count。
运行后,检查输出字段中的 Join_Count。这个字段通常表示每个街道匹配到的居民区数量。你可以用它做分级设色图,展示学校服务覆盖较多和较少的街道。
步骤七:制作专题图并导出结果
完成 GIS空间分析后,不要只停留在生成图层。实际工作中还需要把结果表达清楚。
- 对 school_buffer_1000m 设置半透明蓝色填充。
- 对 communities_in_school_buffer 设置醒目的橙色或红色边界。
- 对 street_school_service_count 使用 Join_Count 字段做分级设色。
- 添加道路图层作为背景参考,但颜色要浅,避免抢占主题。
- 在 Layout 中添加标题、图例、比例尺、指北针和数据来源说明。
- 导出为 PNG、PDF 或 JPEG,用于报告或课程作业。
建议同时导出属性表为 Excel 或 CSV,方便后续写报告时引用统计结果。
常见坑
坑一:经纬度坐标直接做缓冲区
这是 ArcGIS 空间分析中最常见的问题之一。经纬度单位是度,不是米。即使软件允许输入距离,也可能因为坐标系不合适导致结果不准确。做距离和面积分析前,应优先投影到本地适用的投影坐标系。
坑二:把 Define Projection 当成 Project
Define Projection 是定义坐标系,Project 是坐标转换。前者不会改变坐标值,后者才会真正生成新坐标。如果数据本身坐标系是错的,盲目 Define Projection 只会让错位问题更严重。
坑三:Intersect 后居民区被切碎
Intersect 会按照几何重叠区域切割要素。如果你需要的是完整居民区列表,不应该直接使用 Intersect 作为最终结果。更合适的方法是 Select Layer By Location 或 Spatial Join。
坑四:没有检查空结果
工具运行成功不代表分析正确。如果输出结果为空,可能是坐标系错位、研究区裁剪错误、缓冲距离太小、匹配关系选错,或者输入图层没有空间重叠。
坑五:忽略拓扑和几何错误
面数据如果存在自相交、空几何、缝隙或重叠,叠加分析可能失败或产生异常结果。正式分析前建议运行 Repair Geometry 或 Check Geometry。
方法比较
| 方法 | 适合场景 | 优点 | 注意事项 |
|---|---|---|---|
| Buffer | 分析距离范围、服务半径、影响范围 | 直观,适合邻近分析 | 必须注意投影坐标系和距离单位 |
| Intersect | 提取两个图层真正重叠的空间区域 | 结果几何精确,适合叠加分析 | 可能切割原始面要素 |
| Spatial Join | 把空间关系转换为属性字段 | 适合统计数量、匹配属性 | Match Option 要根据业务关系选择 |
| Select Layer By Location | 按空间关系筛选要素 | 保留原始要素形状,适合快速筛选 | 需要手动导出选中结果 |
| Summary Statistics | 按字段汇总数量、人口、面积 | 适合生成统计表 | 需要提前准备分组字段 |
对于初学者,建议先掌握 Buffer、Select Layer By Location、Spatial Join 这三个工具。它们已经可以完成很多常见 GIS空间分析任务,例如服务区判断、设施覆盖、行政区统计和资源分布分析。
检查清单
在提交成果前,可以按下面的清单逐项检查,避免 ArcGIS 空间分析结果看起来正常但实际有误。
- 研究问题是否明确,例如“统计每个街道被学校服务覆盖的居民区数量”。
- 输入数据类型是否正确,点、线、面是否与分析目标匹配。
- 所有图层是否有正确坐标系。
- 距离和面积分析是否使用投影坐标系。
- 是否先裁剪到研究区,避免无关数据干扰。
- Buffer 距离单位是否正确。
- Intersect、Spatial Join、Select Layer By Location 的空间关系是否选对。
- 输出结果是否存在空值、重复记录或异常数量。
- 是否抽查了几个样本要素,确认地图结果和属性表一致。
- 专题图是否包含标题、图例、比例尺、指北针和数据来源。
FAQ
ArcGIS 空间分析一定要用 ArcGIS Pro 吗?
不一定。ArcMap 也可以完成缓冲区、叠加分析、空间连接等操作。但 ArcGIS Pro 是当前更推荐的工作环境,界面、工程管理和制图输出更适合新项目。本文流程在 ArcGIS Pro 中更容易复现。
GIS空间分析前为什么必须检查坐标系?
因为空间分析依赖位置、距离和面积。如果坐标系错误,图层可能错位;如果使用经纬度坐标直接计算距离,缓冲区和面积结果可能不准确。坐标系检查是所有 ArcGIS 实战操作的第一步。
练习数据没有学校点和居民区面怎么办?
可以替换为类似数据。例如把学校点换成医院、消防站、公交站,把居民区面换成小区、地块或行政村。只要问题仍然是“某类设施服务范围覆盖哪些区域”,本文的 ArcGIS 空间分析流程仍然适用。
Buffer 的距离应该设置多少?
距离应由业务规则决定。学校服务范围可以用 500 米、1000 米或 15 分钟步行范围表示。本文使用 1000 米只是练习示例。正式项目中,建议引用规划标准、行业规范或研究假设,并在报告中说明。
Intersect 和 Spatial Join 应该选哪个?
如果你需要得到真实重叠区域,选择 Intersect。如果你更关心“谁和谁有空间关系”以及统计数量,选择 Spatial Join。对于居民区覆盖分析,若要保留完整居民区边界,Spatial Join 或 Select Layer By Location 通常更合适。
为什么输出结果数量比预期多?
常见原因是一个居民区同时与多个学校缓冲区相交,导致重复匹配。可以检查是否使用了 Dissolve All,或者在统计前按居民区唯一 ID 去重。空间连接和叠加分析都可能产生一对多关系,不能只看工具是否成功运行。
ArcGIS 空间分析结果怎么验证?
建议从三个层面验证:第一,在地图上随机抽查要素位置;第二,打开属性表检查 Join_Count、面积、距离等字段是否合理;第三,和原始数据数量对比,确认没有异常丢失或重复。
结论
完整的 GIS空间分析流程应包括数据准备、坐标系统一、工具选择、参数设置、结果验证和成果表达,而不是只运行一个工具。本文用 ArcGIS 演示了从练习数据导入到学校服务范围分析、居民区叠加筛选、街道统计和专题图输出的完整操作路径。
如果你是初学者,建议先把本文案例完整做一遍,再尝试修改缓冲距离、替换设施类型、改变统计单元。这样可以更快理解 ArcGIS 空间分析的底层逻辑,也能在课程作业、项目制图和实际业务分析中减少出错。