GIS空间分析怎么做?ArcGIS实战操作全流程(附:练习数据)

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

引言

GIS空间分析怎么做?ArcGIS实战操作全流程(附:练习数据)这篇教程,面向刚开始做空间分析的 GIS 学生、初级 GIS 工程师和空间数据分析人员,目标是把一次完整的 ArcGIS 空间分析任务从“拿到数据”讲到“输出结果图和统计表”。

很多同学会打开 ArcGIS,也知道有缓冲区、叠加分析、空间连接这些工具,但真正做项目时容易卡在三个问题上:数据坐标系不一致、工具参数不知道怎么选、结果不知道怎么验证。本文用一个典型场景来串起来:分析“哪些居民区位于学校服务范围内,并统计各街道可覆盖居民区数量”。

背景

本文的 ArcGIS 空间分析示例可以理解为一个小型选址与服务覆盖分析。你需要准备以下练习数据:

  • schools.shp:学校点数据,字段包含学校名称。
  • communities.shp:居民区面数据,字段包含居民区名称和人口。
  • streets.shp:街道或乡镇边界面数据。
  • roads.shp:道路线数据,可用于制图参考。

如果你没有现成练习数据,可以使用自己城市的公开 POI 点、行政边界和居住区面数据代替。关键不是数据名称完全一致,而是数据类型要对应:点、线、面都要清楚,分析目标也要明确。

本教程以 ArcGIS Pro 的操作逻辑说明,ArcMap 用户也可以参考,因为核心工具名称基本一致,包括投影、缓冲区、裁剪、相交、空间连接和汇总统计。

GIS空间分析 ArcGIS实战操作全流程与练习数据示意图
ArcGIS 空间分析的基本流程:数据准备、坐标系统一、缓冲区分析、叠加分析、统计汇总与结果制图。

原理

GIS空间分析的核心不是“点一下工具”,而是利用空间位置关系回答问题。常见关系包括包含、相交、邻近、距离、重叠和连接。

在本文案例中,我们要回答的问题是:居民区是否位于学校一定服务半径内,以及这些可覆盖居民区分布在哪些街道。这个问题可以拆成三个空间分析动作:

  • 邻近分析:用学校点生成一定距离的缓冲区,表示服务范围。
  • 叠加分析:判断居民区与学校服务范围是否相交。
  • 空间统计:把被覆盖的居民区按街道边界进行统计汇总。

这里要特别注意坐标系。距离和面积计算依赖投影坐标系。如果数据是经纬度坐标,例如 WGS 84,直接做 1000 米缓冲区容易出错。正确做法是先投影到适合本地的投影坐标系,再进行距离类 GIS空间分析。

步骤

步骤一:新建 ArcGIS 工程并导入练习数据

  1. 打开 ArcGIS Pro,新建一个 Map 工程。
  2. 在 Catalog 面板中连接练习数据所在文件夹。
  3. 将 schools.shp、communities.shp、streets.shp、roads.shp 添加到地图中。
  4. 检查图层是否能正常叠加显示,点、线、面位置是否大致匹配。

如果某个图层明显偏移到很远的位置,优先检查坐标系定义,而不是立刻使用移动、编辑等方式手动修正。

步骤二:检查并统一坐标系

在 ArcGIS 中,右键图层,查看 Properties 中的 Source 信息,确认每个图层的 Coordinate System。

建议执行以下检查:

  • 所有图层是否都有明确坐标系。
  • 点、线、面图层是否使用同一坐标系或可正常动态投影。
  • 是否需要计算距离或面积。如果需要,应使用投影坐标系。

如果数据是经纬度坐标,可使用 Project 工具进行投影转换。不要把 Define Projection 当作投影转换工具使用。Define Projection 只是告诉 ArcGIS“这个数据原本是什么坐标系”,不会改变坐标值。

推荐处理逻辑:
1. 图层没有坐标系,但你知道它原本的坐标系:使用 Define Projection。
2. 图层已有正确坐标系,但需要换成米制投影坐标系:使用 Project。
3. 图层显示错位,且坐标系未知:先查数据来源,不要盲目定义。

步骤三:裁剪研究区数据

如果练习数据范围较大,建议先用街道边界或研究区边界裁剪数据,减少后续分析计算量。

  1. 打开 Geoprocessing 面板。
  2. 搜索 Clip 工具。
  3. Input Features 选择 communities.shp。
  4. Clip Features 选择研究区边界或 streets.shp。
  5. 输出为 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。如果还要统计每个居民区对应哪所学校,建议不要合并缓冲区,并保留学校名称字段。

步骤五:叠加分析居民区与学校缓冲区

接下来判断居民区是否落在学校服务范围内。常用工具有 IntersectSpatial JoinSelect Layer By Location

本案例推荐两种做法:

  • 如果要生成被覆盖居民区的新面图层,使用 Intersect
  • 如果只想给居民区添加是否覆盖、覆盖学校数量等属性,使用 Spatial Join

使用 Intersect 的基本设置如下:

  1. 搜索并打开 Intersect 工具。
  2. Input Features 选择 communities_clip 和 school_buffer_1000m。
  3. Output Feature Class 设置为 communities_in_school_buffer。
  4. 运行后检查输出图层,结果应为与学校缓冲区相交的居民区部分。

如果你不希望居民区面被切割,而是保留完整居民区边界,可以改用 Select Layer By Location 选择与缓冲区相交的居民区,再导出选中要素。

步骤六:按街道统计覆盖居民区数量

要统计每个街道内有多少被学校服务范围覆盖的居民区,可以使用 Spatial Join

  1. 打开 Spatial Join 工具。
  2. Target Features 选择 streets.shp。
  3. Join Features 选择被覆盖居民区图层,例如 communities_selected 或 communities_in_school_buffer。
  4. Join Operation 选择 Join one to one。
  5. Match Option 选择 Intersect 或 Contains,具体取决于居民区是否完全落在街道内。
  6. 输出为 street_school_service_count。

运行后,检查输出字段中的 Join_Count。这个字段通常表示每个街道匹配到的居民区数量。你可以用它做分级设色图,展示学校服务覆盖较多和较少的街道。

步骤七:制作专题图并导出结果

完成 GIS空间分析后,不要只停留在生成图层。实际工作中还需要把结果表达清楚。

  1. 对 school_buffer_1000m 设置半透明蓝色填充。
  2. 对 communities_in_school_buffer 设置醒目的橙色或红色边界。
  3. 对 street_school_service_count 使用 Join_Count 字段做分级设色。
  4. 添加道路图层作为背景参考,但颜色要浅,避免抢占主题。
  5. 在 Layout 中添加标题、图例、比例尺、指北针和数据来源说明。
  6. 导出为 PNG、PDF 或 JPEG,用于报告或课程作业。

建议同时导出属性表为 Excel 或 CSV,方便后续写报告时引用统计结果。

常见坑

坑一:经纬度坐标直接做缓冲区

这是 ArcGIS 空间分析中最常见的问题之一。经纬度单位是度,不是米。即使软件允许输入距离,也可能因为坐标系不合适导致结果不准确。做距离和面积分析前,应优先投影到本地适用的投影坐标系。

坑二:把 Define Projection 当成 Project

Define Projection 是定义坐标系,Project 是坐标转换。前者不会改变坐标值,后者才会真正生成新坐标。如果数据本身坐标系是错的,盲目 Define Projection 只会让错位问题更严重。

坑三:Intersect 后居民区被切碎

Intersect 会按照几何重叠区域切割要素。如果你需要的是完整居民区列表,不应该直接使用 Intersect 作为最终结果。更合适的方法是 Select Layer By Location 或 Spatial Join。

坑四:没有检查空结果

工具运行成功不代表分析正确。如果输出结果为空,可能是坐标系错位、研究区裁剪错误、缓冲距离太小、匹配关系选错,或者输入图层没有空间重叠。

坑五:忽略拓扑和几何错误

面数据如果存在自相交、空几何、缝隙或重叠,叠加分析可能失败或产生异常结果。正式分析前建议运行 Repair GeometryCheck 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 空间分析的底层逻辑,也能在课程作业、项目制图和实际业务分析中减少出错。