2026/9/18 14:15:56

GIS栅格叠加学校选址分析:从因子权重到加权叠加的完整实现

GIS栅格叠加学校选址分析:从因子权重到加权叠加的完整实现 简介这份文档是河北联合大学城市地理信息系统设计课程的完整项目报告面向地理信息系统、城市规划及相关专业的学生与从业者围绕基于GIS的学校选址分析展开帮助读者掌握从数据准备到适宜性评价的全流程方法。资源包共1个doc文件大小约1.21MB内容涵盖项目背景、软件选型、调查分析、数据提取与重分类、适宜区分析及结论报告等章节结构完整、层次清晰。项目以ArcGIS、QGIS等平台为工具系统讲解缓冲区分析、叠加分析、网络分析等空间分析方法并针对人口密度、交通便利性、坡度、现有学校分布和土地利用类型等关键因素进行量化与可视化。读者可借此了解如何设置空间分析环境、统一坐标系统、重分类坡度与距离数据集并生成选址适宜性评价图最终形成可参考的选址建议。目前已有419人学习适合作为课程设计、毕业设计或公共服务设施规划项目的实操范本。1. 从一份课程设计说起栅格叠加选址到底在算什么很多 GIS 课程设计最后都落到“选址”两个字上但真正动手做过的人会发现难点不在软件点哪个按钮而在于把“哪里适合建学校”这句人话翻译成一组可计算的栅格图层。这份河北联合大学的《基于 GIS 的学校选址分析》课程设计用的就是最经典的一套思路把坡度、娱乐场所距离、现有学校距离、土地利用四类因子各自重分类到统一等级再按权重做栅格叠加最后得到一张适宜性分级图。它不依赖复杂模型ArcGIS 的 Spatial Analyst 模块就能跑通适合刚接触空间分析的学生也适合想复习栅格叠加逻辑的从业者。下面按数据准备、因子生成、重分类、加权合并的顺序拆一遍重点讲清每一步的参数含义和容易翻车的地方。2. 选址因子与数据准备四类图层怎么组织2.1 因子选取与权重分配这套模型选了四个因子权重在原文里写得很明确距娱乐设施 0.5距现有学校 0.25土地利用类型和地势位置各 0.125。权重加起来正好是 1这是加权叠加的基本要求否则最终评分没有可比性。因子数据形式权重适宜性方向距娱乐场所距离点→栅格距离0.5越近越适宜距现有学校距离点→栅格距离0.25越远越适宜土地利用类型面→栅格0.125按地类赋值坡度地势DEM→坡度栅格0.125越平缓越适宜娱乐场所权重给到 0.5是因为原文把“与现有娱乐设施相配套”当成学生生活便利性的主要指标。这个权重是否合理可以讨论但作为课程设计它至少做到了权重可解释、可复现。2.2 数据源与格式要求原文列了四份数据娱乐场所 rec_sites点、现有学校 school点、土地利用 landuse面、地面高程 DEM面。注意这里 DEM 被描述成面状要素实际栅格 DEM 本身就是规则格网按面处理没问题。常见做法是先把所有数据统一到同一投影坐标系和同一像元大小。如果坐标系不一致欧式距离算出来的单位可能是度而不是米距离分级的阈值就完全错了。我一般会在 ArcCatalog 里逐个检查图层的空间参考确认是投影坐标系比如 UTM 或高斯克吕格而不是地理坐标系。2.3 空间分析环境的三个关键设置在 ArcToolbox 右键【环境】里有三项必须设工作空间指定当前会话和临时数据的输出路径避免结果散落到默认地理数据库里找不到。处理范围选“与图层 landuse 相同”保证所有输出栅格的边界一致否则叠加时会出现边缘 NoData。栅格分析像元大小同样选“与图层 landuse 相同”像元大小不一致会导致重采样距离和坡度值都会失真。提示环境设置是在 ArcToolbox 层面生效的如果中途换了工程或重启软件记得重新确认一遍这是新手最常踩的坑。3. 坡度与欧式距离三个连续因子的生成3.1 从 DEM 提取坡度栅格坡度用【Spatial Analyst 工具】|【表面分析】|【坡度】生成。输入 dem输出 slope。关键参数是输出测量单位一般选 DEGREE度范围 0 到 90。如果选 PERCENT_RISE得到的是百分比坡度后续重分类的断点就要跟着换两者不能混用。# ArcPy 方式生成坡度等价于工具箱里的坡度工具 import arcpy from arcpy.sa import Slope arcpy.CheckOutExtension(Spatial) dem rC:\gis_project\data\dem.tif slope Slope(dem, DEGREE) slope.save(rC:\gis_project\output\slope)逻辑说明Slope对每个像元用邻域窗口拟合平面算出最大变化率方向的角度。DEGREE表示输出单位是度。保存前建议先arcpy.env.workspace设好路径避免相对路径写到默认数据库。3.2 欧式距离的两个易错点娱乐场所距离和学校距离都用【距离分析】|【欧式距离】。输入分别是 rec_sites 和 school输出 dis_recsites、dis_school。from arcpy.sa import EucDistance dis_rec EucDistance(rC:\gis_project\data\rec_sites.shp) dis_rec.save(rC:\gis_project\output\dis_recsites) dis_sch EucDistance(rC:\gis_project\data\school.shp) dis_sch.save(rC:\gis_project\output\dis_school)参数说明欧式距离默认输出像元大小继承环境设置最大距离不填则计算到范围边界。两个易错点一是输入点图层如果有重复点或空几何距离栅格会出现异常值二是输出范围如果没锁定两次距离分析的边界可能不同叠加时对不齐。3.3 距离方向与适宜性方向的对应关系这里有个反直觉的地方娱乐场所距离越近越适宜学校距离越远越适宜两个因子的适宜性方向是相反的。重分类时必须分别处理不能套用同一张重分类表。很多同学在这里直接把两个距离图层用同一个分级方案重分类结果学校旁边反而成了高适宜区逻辑就反了。4. 重分类把连续值翻译成 1 到 10 的等级4.1 重分类坡度数据集坡度重分类的目标是把陡坡降权、缓坡提权。原文没有给出具体断点常见做法是按等间距或自然断点分 5 到 10 级坡度越小赋值越高。比如 0 到 2 度给 102 到 5 度给 8依次递减超过 25 度给 1 或直接设为 NoData。from arcpy.sa import Reclassify # 坡度重分类断点 0,2,5,10,15,25,90 对应等级 10,8,6,4,2,1 remap_slope arcpy.sa.RemapRange([[0, 2, 10], [2, 5, 8], [5, 10, 6], [10, 15, 4], [15, 25, 2], [25, 90, 1]]) slope_reclass Reclassify(rC:\gis_project\output\slope, Value, remap_slope) slope_reclass.save(rC:\gis_project\output\reclass_slope)逻辑说明RemapRange用左闭右开区间映射[0,2,10]表示 0 到 2 度赋 10。断点要根据研究区实际坡度分布调整如果整个区域都在 5 度以下用 25 度做断点就没有区分度。4.2 重分类娱乐场所与学校距离两个距离图层都按等间距分 10 级。娱乐场所距离最近赋 10、最远赋 1学校距离最远赋 10、最近赋 1。等间距的间隔用最大距离除以 10 得到。# 娱乐场所距离近高远低 remap_rec arcpy.sa.RemapRange([[0, 500, 10], [500, 1000, 9], [1000, 1500, 8], [1500, 2000, 7], [2000, 2500, 6], [2500, 3000, 5], [3000, 3500, 4], [3500, 4000, 3], [4000, 4500, 2], [4500, 5000, 1]]) rec_reclass Reclassify(rC:\gis_project\output\dis_recsites, Value, remap_rec) # 学校距离远高近低注意等级方向相反 remap_sch arcpy.sa.RemapRange([[0, 500, 1], [500, 1000, 2], [1000, 1500, 3], [1500, 2000, 4], [2000, 2500, 5], [2500, 3000, 6], [3000, 3500, 7], [3500, 4000, 8], [4000, 4500, 9], [4500, 5000, 10]]) sch_reclass Reclassify(rC:\gis_project\output\dis_school, Value, remap_sch)参数说明断点值 500、1000 这些是示例实际要用研究区距离栅格的最大值来定。如果最大距离只有 3000 米用 5000 米做上限会导致后面几级没有像元白白浪费等级。4.3 重分类土地利用数据集土地利用是离散类型重分类时按地类代码赋值。原文明确要删除 water、wetland、grass 三类勾选【将缺失值更改为 NoData】这样水体和湿地直接不参与选址。# 土地利用重分类假设地类代码 1 住宅、2 商业、3 工业、4 水体、5 湿地、6 草地 remap_land arcpy.sa.RemapValue([[1, 10], [2, 8], [3, 4], [4, NODATA], [5, NODATA], [6, NODATA]]) land_reclass Reclassify(rC:\gis_project\data\landuse, LU_CODE, remap_land) land_reclass.save(rC:\gis_project\output\reclass_landuse)逻辑说明RemapValue按具体值映射NODATA表示该类别输出为空。住宅和商业用地适宜性高工业用地降权水体和湿地直接排除。地类代码要以实际属性表为准不能照搬示例。注意重分类后四个图层的等级体系必须统一在 1 到 10 之间否则加权叠加时量纲不一致权重就失去意义了。5. 加权叠加与适宜区验证栅格计算器怎么用对5.1 栅格计算器的加权公式四个重分类图层准备好后用【地图代数】|【栅格计算器】做加权求和。公式是# 加权叠加权重 0.5 / 0.25 / 0.125 / 0.125 from arcpy.sa import Raster rec Raster(rC:\gis_project\output\reclass_rec) sch Raster(rC:\gis_project\output\reclass_sch) land Raster(rC:\gis_project\output\reclass_landuse) slope Raster(rC:\gis_project\output\reclass_slope) suitability rec * 0.5 sch * 0.25 land * 0.125 slope * 0.125 suitability.save(rC:\gis_project\output\suitability)逻辑说明每个重分类图层值域 1 到 10加权后最终评分也在 1 到 10 之间。权重之和为 1 保证了这一点。如果某个像元在土地利用重分类里是 NoData加权结果也会是 NoData这正是我们排除水体和湿地的目的。5.2 结果分级与适宜区提取叠加结果是一张连续评分栅格需要再分一次级才能输出“适宜区”图。常见做法是按自然断点分 3 到 5 类或者直接按评分阈值切大于 7 为高适宜5 到 7 为中适宜小于 5 为低适宜。# 按阈值提取高适宜区 high_suit suitability 7 high_suit.save(rC:\gis_project\output\high_suitability)参数说明阈值 7 不是固定的要看评分分布直方图。如果大部分像元集中在 5 到 6阈值 7 可能只剩零星几个像元说明权重或重分类断点需要调整。5.3 验证与常见翻车点验证这套结果我一般会做三件事一是把高适宜区和现有学校位置叠在一起看如果高适宜区大量落在现有学校旁边说明学校距离因子的方向或权重有问题二是检查 NoData 区域是否合理水体和湿地应该成片缺失三是看坡度因子有没有被距离因子淹没因为坡度权重只有 0.125如果坡度重分类等级差异太小它对最终结果几乎没有影响。一个具体的技巧是把四个重分类图层分别和最终适宜性图做相关性分析用 Band Collection Statistics 看哪个因子贡献最大。如果发现娱乐场所距离的相关系数远高于其他三个说明 0.5 的权重确实主导了结果这时候要么调整权重要么在报告里说明这是有意为之。选址分析没有唯一正确答案但每一步的参数选择都要能说清楚理由这才是这份课程设计真正想训练的东西。本文还有配套的精品资源点击获取