ArcGIS Pro空间数据预处理:面向机器学习的GIS特征工程与坐标系统一 📅 发布时间:2026/8/25 19:39:10 👁 浏览次数: 在实际的地理信息系统GIS和空间数据分析项目中原始的空间数据如矢量、栅格很少能直接用于机器学习模型训练。数据中可能包含坐标系统不一致、属性字段缺失、空间分布不均、尺度差异巨大等问题这些问题会直接导致模型训练失败或结果不可靠。空间数据预处理正是为了解决这些问题将原始地理数据转化为适合机器学习算法“消化”的标准化、规范化格式。本文将以 ArcGIS Pro 作为核心工具系统性地讲解面向机器学习的空间数据预处理全流程。无论你是 GIS 分析师、数据科学家还是希望将空间分析能力融入机器学习项目的开发者本文都将提供一个从概念到实践的可操作指南。我们将从理解空间数据的特殊性开始逐步完成数据加载、坐标系统一、数据清洗、特征工程、样本划分等一系列关键步骤最终生成可直接用于 Scikit-learn、PyTorch 等主流机器学习框架的数据集。整个过程将结合 ArcGIS Pro 的可视化界面和 ArcPy 脚本确保操作可复现逻辑可理解。1. 理解空间数据预处理的特殊性与传统的表格数据预处理相比空间数据预处理的核心在于处理其固有的“空间”属性。这不仅仅是多了一列经度和纬度那么简单它涉及到空间关系、坐标参考系统、拓扑规则等一系列独特的概念。忽略这些特殊性直接套用传统数据处理流程是许多空间机器学习项目失败的首要原因。1.1 空间数据的核心要素空间数据通常由两部分构成几何信息和属性信息。几何信息定义了要素如点、线、面在地球表面的位置和形状属性信息则以表格形式记录了每个要素的非空间特征如人口、温度、类别。对于机器学习而言我们需要从这两部分信息中提取有效的特征几何衍生特征从几何信息中计算得出如多边形的面积、周长、中心点坐标线的长度、方向点与点之间的距离、密度等。这些特征是空间数据独有的。空间关系特征描述要素之间的空间交互如一个点是否落在某个多边形内空间连接一个要素的邻居有哪些空间自相关到最近道路的距离等。属性特征即属性表中的原始字段需要进行传统的标准化、归一化、编码等处理。1.2 坐标系一切空间分析的基石坐标系不一致是空间数据融合时最常见的“坑”。一个使用 WGS 1984 地理坐标系单位度的数据与另一个使用 UTM 投影坐标系单位米的数据无法进行直接的距离计算或叠加分析。地理坐标系 (GCS)基于球面用经纬度表示位置。适用于全球尺度但距离和面积计算不精确。投影坐标系 (PCS)将球面投影到平面用米、英尺等单位表示位置。适用于区域分析能进行精确的几何计算。预处理关键步骤在开始任何分析前必须将所有数据投影到同一个、适合研究区域的投影坐标系下。在 ArcGIS Pro 中可以使用“投影”工具。1.3 空间数据预处理的通用流程一个完整的面向机器学习的空间数据预处理流程可以概括为以下几个阶段后续章节将详细展开数据获取与加载收集并导入各类空间数据。坐标系统一与数据对齐确保所有数据在同一空间参考下。数据清洗与质量检查处理几何错误、属性空值、异常值。特征工程从几何和属性中构造、选择和转换特征。样本创建与划分生成训练、验证、测试集并注意空间自相关带来的“数据泄漏”风险。数据导出将处理好的数据转换为机器学习框架可读的格式如 CSV、NumPy 数组、GeoPackage。2. 环境准备与核心工具在开始实操前需要准备好软硬件环境并熟悉我们将要使用的主要工具。2.1 软件与许可ArcGIS Pro版本建议为 3.0 或更高。需要拥有有效的 ArcGIS 许可如通过组织账号或个人试用版。确保安装时勾选了“Python”组件这将自动安装 ArcGIS Pro 内置的 Python 环境通常包含arcpy库和基础的数据科学包。Python 环境可选但推荐虽然 ArcGIS Pro 内置了 Python但对于更复杂的机器学习流水线你可能希望使用独立的 Conda 环境。可以通过 ArcGIS Pro 自带的“Python 命令提示符”来管理环境。2.2 ArcGIS Pro 中的关键工具窗格目录窗格用于浏览和管理地理数据库、文件夹连接中的数据集。内容窗格管理当前地图中的图层控制图层的显示顺序、符号化等。地理处理窗格这是执行所有分析工具的入口。可以通过搜索框快速找到工具如“投影”、“融合”、“要素转点”等。Python 窗格可以直接编写和运行 Python 代码调用arcpy库。这对于自动化重复性预处理任务至关重要。2.3 初始项目设置打开 ArcGIS Pro创建一个新的“地图”项目。在“目录”窗格中右键点击“文件夹”添加一个连接到你的工作文件夹的链接。所有数据和处理结果都将存放在此。将你的原始数据如 Shapefile、File Geodatabase、TIFF 影像等拖拽或导入到地图视图中。3. 坐标系统一与数据基础处理这是预处理的第一步也是确保后续所有空间计算正确的关键。3.1 检查并统一坐标系检查坐标系在“内容窗格”中右键点击某个图层选择“属性”切换到“源”选项卡。这里可以看到该图层的当前坐标系信息。确定目标坐标系选择的标准是对于需要进行距离、面积计算或机器学习建模的区域性研究必须使用投影坐标系。例如研究中国区域常用WGS 1984 UTM Zone 50N。执行投影方法一界面操作在“地理处理”窗格中搜索“投影”工具。设置输入数据集、输出位置并在“输出坐标系”参数中选择或输入你确定的目标坐标系。方法二Python脚本在 Python 窗格中运行以下代码实现批量投影。import arcpy import os # 设置工作空间和输出坐标系 arcpy.env.workspace rC:\YourData\RawData.gdb # 输入地理数据库或文件夹 output_coordinate_system arcpy.SpatialReference(32650) # 例如WGS84 UTM 50N EPSG:32650 # 列出所有要素类 feature_classes arcpy.ListFeatureClasses() for fc in feature_classes: output_name f{fc}_Projected output_path os.path.join(rC:\YourData\Processed.gdb, output_name) # 执行投影 arcpy.management.Project(fc, output_path, output_coordinate_system) print(f已投影: {fc} - {output_name})注意Project工具会创建新的数据集原始数据保持不变。对于栅格数据使用“投影栅格”工具。3.2 处理空值字段搜索词中提到了“将部分字段值空变成0”这是一个典型的数据清洗需求。空值NULL在机器学习中可能导致计算错误通常需要填充或删除。识别空值在图层属性表中空值单元格显示为空。使用字段计算器填充右键点击需要填充的字段列标题选择“计算字段”。在“字段计算器”对话框中编写 Python 表达式。例如将名为Population字段的空值填充为 0# 表达式 def fill_null(value): return value if value is not None else 0在“表达式”框中输入fill_null(!Population!)。使用arcpy批量处理import arcpy fc rC:\YourData\Processed.gdb\Cities_Projected field Population # 使用更新游标 with arcpy.da.UpdateCursor(fc, [field]) as cursor: for row in cursor: if row[0] is None: # 判断是否为空 row[0] 0 # 填充为0 cursor.updateRow(row) print(空值填充完成。)决策点填充为0并非唯一选择。对于数值字段也可以填充为均值、中位数对于类别字段可以填充为“未知”类别。选择取决于业务逻辑。4. 特征工程从空间数据中构造有效特征特征工程是机器学习的灵魂对于空间数据尤其如此。我们需要将空间信息转化为数值型特征。4.1 几何特征提取直接从要素的几何形状中计算特征。要素类型可提取特征对应工具ArcGIS Pro说明面 (Polygon)面积、周长、中心点(X,Y)、最小外接矩形参数计算几何属性工具面积和周长是基础但重要的特征。中心点坐标可用于后续的空间关系计算。线 (Polyline)长度、起点/终点坐标、方向计算几何属性工具长度是核心特征。方向如道路走向在某些模型中可能有用。点 (Point)坐标(X, Y, Z)属性表中已存在最直接的特征。对于三维点Z值可能是重要特征。操作示例为面要素添加面积字段在内容窗格中右键点击面图层选择“属性表”。点击表左上角的“添加”按钮新建一个双精度字段命名为Area_sqkm。右键点击新字段列标题选择“计算字段”。在“字段计算器”中选择“Python”表达式框内输入!shape.areasquarekilometers!。这将使用几何对象的area属性并以平方千米为单位计算。4.2 空间关系特征构造描述一个要素与其周边环境的关系。缓冲区分析计算每个要素周围一定距离内的区域。例如计算每个商店500米缓冲区内的居民点数量。工具“缓冲区”工具。生成特征缓冲距离本身可作为特征或者将缓冲区与其他图层叠加进行统计见下一点。空间连接将一个图层的属性连接到另一个图层基于空间关系相交、包含、最近。工具“空间连接”工具。示例将人口普查区块面的人口密度属性连接到其中的犯罪事件点点上。这样每个犯罪点就拥有了所在区块的人口密度特征。关键设置匹配选项选择“INTERSECT”相交或“WITHIN”内部。近邻分析计算每个要素到另一个图层中最近要素的距离。工具“近邻分析”工具。生成特征输出字段NEAR_DIST即为最近距离是一个强大的特征。例如建筑物到最近消防站的距离。密度计算计算点或线要素在单位面积内的密度核密度估计。工具“核密度分析”工具。生成特征输出的栅格图层其像元值即为密度。可以将该栅格值提取到点要素上作为特征使用“提取多值至点”工具。4.3 属性特征变换与编码对属性表中的原始字段进行处理。标准化/归一化当特征量纲不同时如面积是数万人口密度是小数必须进行缩放。这通常在导出数据后在 Python 中使用sklearn.preprocessing.StandardScaler或MinMaxScaler完成。但在 ArcGIS Pro 中可以先通过字段计算进行初步处理如取对数。类别变量编码将文本型类别如城市类型“大城市”、“中等城市”、“小城市”转换为数值。有序编码如果类别有顺序可手动映射为1,2,3。独热编码如果类别无顺序需要创建多个二进制字段。这通常在 Python 中用pd.get_dummies()处理更便捷。在 ArcGIS Pro 中可以先用“频数”工具查看唯一值再通过多个“计算字段”步骤创建。5. 创建机器学习样本与处理栅格数据5.1 从矢量数据创建样本假设我们有一个面图层如土地利用类型我们需要创建样本点来训练一个分类模型。创建随机点使用“创建随机点”工具在研究区域范围内生成一定数量的随机点。提取值到点使用“多值提取至点”工具将作为特征的各种栅格图层如高程栅格、植被指数栅格的值提取到这些随机点上。添加标签如果这些点需要标注类别如实地调查的土地利用类型可以手动编辑属性表或通过空间连接从已有的分类面图层获取标签。5.2 栅格数据处理与“重心迁移”模型准备搜索词中提到了“有栅格图怎么做重心迁移模型分析”。这通常指分析某个现象如人口、经济的空间重心随时间的变化轨迹。数据准备你需要同一区域、不同时间点的多幅栅格图例如1990、2000、2010年的人口密度栅格。确保它们具有相同的范围、像元大小和坐标系。可以使用“裁剪”和“重采样”工具进行统一。计算重心对于每一年的栅格其重心坐标 (Xc, Yc) 可以通过加权平均计算权重是每个像元的属性值如人口数。公式概念:Xc Σ(Value_i * X_i) / Σ(Value_i)Yc Σ(Value_i * Y_i) / Σ(Value_i)其中Value_i是第 i 个像元的值(X_i, Y_i)是该像元的中心点坐标。在 ArcGIS Pro 中的实现使用“栅格转点”工具将栅格转换为点要素。每个点具有原始栅格值 (grid_code) 和坐标。使用“计算字段”添加两个新字段WeightedX和WeightedY。WeightedX !grid_code! * !shape.extent.XMin! !shape.extent.width! / 2(计算像元中心X)WeightedY !grid_code! * !shape.extent.YMin! !shape.extent.height! / 2(计算像元中心Y)注意更精确的做法是直接使用!shape.centroid.X!和!shape.centroid.Y!获取点坐标。右键点击图层打开“属性表”查看“统计”信息分别对grid_code、WeightedX、WeightedY字段求和。手动计算Xc Sum(WeightedX) / Sum(grid_code)Yc Sum(WeightedY) / Sum(grid_code)。自动化与建模上述过程可以通过 Python 脚本循环处理多个年份的栅格将计算出的重心坐标保存为新的点要素类从而形成“重心迁移”轨迹。这个轨迹点图层本身就可以作为空间模式分析的对象或者作为特征输入到其他模型中。5.3 样本划分与空间交叉验证重要警告由于空间自相关相近位置的特征相似传统的随机划分训练集/测试集会导致严重的数据泄漏——模型在测试集上表现很好仅仅因为它“见过”旁边位置的数据。解决方案空间交叉验证空间分块将研究区域划分为若干空间块如网格、行政区划。按块划分确保属于同一空间块的所有样本要么全在训练集要么全在测试集。这样能更真实地评估模型预测新区域的能力。工具可以手动创建网格面“创建渔网”工具然后使用“空间连接”为每个样本点分配其所属的网格ID。最后在 Python 中使用sklearn.model_selection.GroupKFold并以网格ID作为分组参数进行交叉验证。6. 数据导出与后续机器学习流程衔接预处理完成后需要将数据从 ArcGIS Pro 的环境中导出供 Python 机器学习库使用。6.1 导出为表格格式导出属性表右键点击要素图层选择“数据” - “导出表格”。保存为 CSV 格式。关键步骤确保导出的 CSV 包含了所有构造好的特征字段以及作为预测目标的标签字段如果有。6.2 在 Python 中读取与处理在 Jupyter Notebook 或 Python 脚本中import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, GroupKFold from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.impute import SimpleImputer # 1. 读取数据 df pd.read_csv(r‘C:\YourData\processed_samples.csv‘) # 2. 分离特征 (X) 和标签 (y) # 假设 ‘LandUseType‘ 是我们要预测的标签 X df.drop(columns[‘LandUseType‘, ‘SampleID‘, ‘BlockID‘]) # 去掉标签和ID列 y df[‘LandUseType‘] # 3. 处理缺失值如果在ArcGIS中未完全处理 imputer SimpleImputer(strategy‘median‘) # 用中位数填充数值特征 X_numeric imputer.fit_transform(X.select_dtypes(include[np.number])) # 4. 标准化数值特征 scaler StandardScaler() X_scaled scaler.fit_transform(X_numeric) # 5. 编码类别特征如果有 # encoder OneHotEncoder(sparse_outputFalse, handle_unknown‘ignore‘) # X_categorical encoder.fit_transform(X.select_dtypes(include[‘object‘])) # 将处理后的数值和类别特征合并... # 6. 考虑空间自相关的数据集划分 groups df[‘BlockID‘] # 之前分配的空间块ID gkf GroupKFold(n_splits5) for train_index, test_index in gkf.split(X_scaled, y, groupsgroups): X_train, X_test X_scaled[train_index], X_scaled[test_index] y_train, y_test y[train_index], y[test_index] # 在此折上进行模型训练和评估7. 常见问题排查与最佳实践7.1 常见问题排查表问题现象可能原因检查与解决步骤工具运行失败报坐标系错误输入数据坐标系未定义或不一致1. 检查所有输入图层的坐标系属性。2. 使用“定义投影”工具为无坐标系数据定义正确坐标系。3. 使用“投影”工具统一坐标系。空间连接后结果为空空间关系匹配条件设置错误或要素间无交集1. 检查“匹配选项”是否合适如想包含点应用“INTERSECT”而非“WITHIN”。2. 放大视图检查两个图层在空间上是否真的有重叠。导出的 CSV 在 Python 中读取为乱码或坐标错误编码问题或字段类型问题1. 在 ArcGIS Pro 导出时选择“UTF-8”编码。2. 在 Python 中指定编码pd.read_csv(..., encoding‘utf-8‘)。3. 检查坐标字段是否被正确识别为数值型float。模型在训练集上表现好在测试集上极差空间数据泄漏训练和测试样本空间相邻采用空间交叉验证确保训练集和测试集在空间上是分离的。栅格计算如重心结果明显偏离栅格像元值包含 NoData 或异常值1. 使用“设为空函数”或“重分类”工具处理 NoData 和异常值。2. 在计算前检查栅格统计信息最小值、最大值、均值。7.2 最佳实践清单始于清晰的业务问题预处理的所有步骤都应与最终要解决的机器学习问题分类、回归、聚类紧密相关。避免构造无关特征。建立可复现的流程尽量使用 Python 脚本 (arcpy) 记录所有预处理步骤而不是完全依赖手动点击。这便于追溯、修改和分享。版本化管理数据对原始数据、中间处理数据和最终样本数据做好版本标记。可以使用不同的文件地理数据库或文件夹结构来区分。可视化检查每一步在关键预处理步骤如投影、空间连接、缓冲区分析后将结果加载到地图中直观检查是否正确。人的空间直觉是强大的调试工具。理解工具参数不要盲目使用默认参数。例如缓冲区分析的“融合类型”、重采样时的“重采样技术”都会对结果产生重大影响。查阅工具帮助文档。特征可解释性构造的特征应具有明确的物理或业务意义。这不仅能提升模型的可信度也有助于在模型表现不佳时进行诊断。性能考量处理大规模栅格或海量矢量时操作可能非常耗时。考虑使用“影像分析”窗格进行栅格链式处理或使用arcpy的并行处理参数 (parallelProcessingFactor)。空间数据预处理是连接 GIS 世界与机器学习算法的桥梁其质量直接决定了模型性能的上限。一个稳健的预处理流程需要兼顾空间数据的特殊性坐标系、拓扑、自相关和机器学习数据的通用要求完整性、一致性、无量纲。通过 ArcGIS Pro 强大的空间分析工具与 Python 灵活的数据处理能力相结合我们可以系统化、自动化地完成这项任务为构建可靠的空间预测与分类模型打下坚实基础。下一步你可以尝试将处理好的数据接入更复杂的模型如随机森林、梯度提升树甚至深度学习模型并持续迭代特征工程以追求更高的模型性能。