ArcGIS空间分析制图全流程:从坐标系到出图的避坑指南

📅 发布时间:2026/10/17 16:33:06
ArcGIS空间分析制图全流程:从坐标系到出图的避坑指南
简介这份ARCGIS空间分析制图PPT课件面向地理信息、城乡规划与测绘相关专业的学生及从业者用于系统学习空间分析制图的核心方法与典型应用。内容围绕空间分析专题图展开涵盖专题图简介、常见类型、居民点面积分布图、新建高速公路征地范围专题图、饭店选址区位专题图等模块并延伸至数据融合、数据分割、数据求差、数据更新、缓冲区分析、路径分析、资源分配、连通分析与叠加分析等方法以及符号化、颜色编码、尺度编码等专题图制作技巧。资源包共1个文件为ppt格式大小约8.21MB结构紧凑便于课堂演示与自学查阅。目前已有469人学习浏览适合作为课程配套讲义或实操参考。读者可借此掌握从数据处理、属性关联到专题图整饰的完整流程理解空间分析在城市规划、交通规划、环境监测与资源管理等场景中的落地思路并熟悉ARCGIS平台相关分析功能的操作逻辑。1. 从一份“ARCGIS空间分析制图ppt课件.ppt”说起为什么你照着课件做还是出不了图很多人手里都有一份名为“ARCGIS空间分析制图ppt课件.ppt”的文件可能是别人拷的也可能是某次培训留下的。打开一看步骤写得清清楚楚加载数据、选工具、填参数、点运行、出图。可自己一上手要么工具找不到要么结果全黑要么图例乱成一团。问题不在课件而在于课件只记录了“点哪里”没记录“为什么这样点”以及“参数背后的数据条件”。空间分析制图本质是一条链路数据准备、坐标系统一、分析工具选择、符号化、出图整饰。任何一环数据不匹配后面全崩。这份课件适合谁适合已经会用ArcGIS基本操作、但一做空间分析就翻车的从业者也适合需要把分析结果做成规范图件的人。接下来我不复述课件而是把这条链路拆成能复现的步骤把参数和坑一起讲清楚。2. 数据准备与坐标系统一分析之前必须做对的两件事2.1 为什么坐标系不统一会让所有空间分析结果变成玄学空间分析工具在计算距离、面积、叠加时默认按数据的坐标值直接算。如果两个图层的坐标系不一致比如一个是地理坐标系单位是度一个是投影坐标系单位是米工具不会自动帮你转换而是直接拿度当米算结果就是距离差几十万倍缓冲区要么小得看不见要么大得覆盖整个省。常见做法是在开始任何分析之前先右键图层查看属性确认坐标系。如果要做距离、面积、密度类分析必须统一到投影坐标系并且投影参数要适合研究区域。我一般会选高斯-克吕格或UTM对应带号保证长度变形最小。如果只是做叠加统计至少也要统一到同一个地理坐标系但面积计算仍然不可靠。具体操作上用“投影”工具而不是“定义投影”。定义投影只是给数据贴标签不改变坐标值投影才是真正做数学转换。批量处理时可以用“批量投影”工具或者写一段ArcPy脚本。下面这段脚本演示如何把一个文件夹下所有shp统一投影到目标坐标系并输出到新文件夹。# -*- coding: utf-8 -*- import arcpy import os # 输入文件夹存放待投影的shp input_folder rD:\data\raw_shp # 输出文件夹 output_folder rD:\data\projected_shp # 目标投影坐标系这里以CGCS2000 3度带中央经线120度为例 target_sr arcpy.SpatialReference(4547) # CGCS2000_3_Degree_GK_CM_120E if not os.path.exists(output_folder): os.makedirs(output_folder) arcpy.env.workspace input_folder shp_list arcpy.ListFeatureClasses() for shp in shp_list: out_path os.path.join(output_folder, shp) # 关键使用Project_management而不是DefineProjection_management arcpy.Project_management(shp, out_path, target_sr) print(已投影: shp)逻辑说明arcpy.SpatialReference(4547)里的4547是WKID对应CGCS2000 3度带中央经线120度。不同区域要换WKID不能照抄。Project_management会真正改变几何坐标DefineProjection_management只改元数据。参数上如果输入数据本身没有坐标系Project_management会报错这时需要先用DefineProjection_management补上正确坐标系再投影。输出路径不要和输入同目录避免覆盖。2.2 属性表清洗与字段类型被忽略的制图杀手空间分析结果最终要制图制图要靠属性字段来分类、标注、符号化。如果字段类型不对比如面积字段是文本型分类就做不了如果字段里有空值或异常值图例会出现空白或乱码。常见做法是在分析前检查字段类型数值字段必须是双精度或长整型文本字段用于名称标注。对于空值用字段计算器批量赋一个合理默认值或者单独提取出来检查。我一般会先跑一遍“汇总统计”看每个数值字段的最小值、最大值、平均值判断有没有离谱值。比如人口字段出现负数或者面积字段出现0都要回头查数据源。下面这段代码演示如何用ArcPy检查字段类型并统计空值数量适合在分析前批量筛查。import arcpy fc rD:\data\projected_shp\study_area.shp field_list arcpy.ListFields(fc) for field in field_list: # 只关注数值和文本字段 if field.type in [Double, Single, Integer, SmallInteger, String]: null_count 0 with arcpy.da.SearchCursor(fc, [field.name]) as cursor: for row in cursor: if row[0] is None or (field.type String and row[0].strip() ): null_count 1 print(字段: {0}, 类型: {1}, 空值数: {2}.format(field.name, field.type, null_count))逻辑说明arcpy.da.SearchCursor比老式游标快适合大表。空值判断要区分None和空字符串。如果空值比例超过5%建议单独处理不要直接参与分类。参数上field.type返回的是ArcGIS内部类型名和Python类型不同判断时要用字符串。这段脚本只读不写安全。3. 空间分析工具选型与参数设置缓冲区、叠加、密度到底怎么选3.1 缓冲区分析距离字段和融合选项决定结果形态缓冲区是空间分析制图里最常用的工具但很多人做出来的缓冲区是一堆重叠圆环没法看。核心在三个参数距离、融合类型、侧类型。距离可以固定值也可以来自字段。如果来自字段单位必须和投影坐标系一致否则又是度米混算。融合类型选NONE时每个要素独立成环选ALL时所有缓冲区合并成一个大多边形。制图时如果只想看整体影响范围选ALL如果要区分每个要素的影响选NONE。侧类型FULL是两侧LEFT和RIGHT只对线要素有意义。我一般会先做NONE检查每个环是否合理再决定要不要融合。下面这段代码演示用字段值做缓冲区并融合所有结果适合做服务半径覆盖图。import arcpy input_fc rD:\data\projected_shp\facilities.shp output_fc rD:\data\analysis\buffer_all.shp # 假设facilities.shp里有一个字段service_radius单位是米 distance_field service_radius # 先做不融合的缓冲区便于检查 arcpy.Buffer_analysis(input_fc, rD:\data\analysis\buffer_each.shp, distance_field, FULL, ROUND, NONE) # 再做融合缓冲区 arcpy.Buffer_analysis(input_fc, output_fc, distance_field, FULL, ROUND, ALL) print(缓冲区完成)逻辑说明Buffer_analysis的第三个参数可以是数值也可以是字段名。用字段时字段必须是数值型。ROUND是端点样式还有FLAT和SQUARE制图一般用ROUND。ALL融合会丢失原始要素属性如果后续还要按属性分类应该用NONE然后自己做融合。参数上如果距离字段单位是公里而坐标系是米要先在字段计算器里乘以1000。3.2 叠加分析相交、联合、标识的区别与字段处理叠加分析工具很多相交Intersect、联合Union、标识Identity最容易混。相交只保留所有输入图层重叠的部分属性表包含所有输入字段。联合保留所有输入图层的全部范围重叠部分只出现一次属性表也包含所有字段。标识保留第一个图层的全部范围用第二个图层去切割属性表包含两个图层的字段。制图时如果要做多条件筛选比如同时满足坡度小于15度且土地利用为林地用相交。如果要统计每个区域内的所有地类面积用联合。如果要以某个行政区为底叠加其他图层用标识。字段处理是叠加后的重灾区。多个图层如果有同名字段比如都叫“面积”叠加后会自动加后缀变成“面积”、“面积_1”。制图时引用字段要小心。我一般会在叠加前把关键字段重命名比如“area_landuse”、“area_slope”避免混淆。下面这段代码演示相交后检查字段名并重命名。import arcpy intersect_fc rD:\data\analysis\intersect_result.shp field_list [f.name for f in arcpy.ListFields(intersect_fc)] # 打印所有字段找出带后缀的 for f in field_list: if _1 in f or _12 in f: print(疑似重名字段: f) # 假设要把面积_1重命名为area_slope if 面积_1 in field_list: arcpy.AlterField_management(intersect_fc, 面积_1, area_slope, 坡度面积) print(重命名完成)逻辑说明AlterField_management可以改字段名和别名但不能改类型。重命名后后续符号化和标注都用新名字。参数上如果字段被其他工具引用重命名会断掉引用所以要在分析流程早期做。这段脚本只处理一个字段批量处理可以循环。3.3 密度分析核密度与点密度的选择及搜索半径密度分析用来做热力图核密度Kernel Density和点密度Point Density区别在于核密度会平滑点密度是格网计数。制图时核密度更美观但搜索半径Search Radius决定平滑程度。半径太小热力图碎半径太大热点糊成一片。常见做法是先用默认半径跑一遍看结果分布再调整。默认半径通常基于数据范围自动计算不一定适合。我一般会按研究目的设如果看社区级热点半径500米到1000米如果看城市级3000米到5000米。输出像元大小也要设太大丢细节太小文件巨大。一般设成搜索半径的十分之一左右。下面这段代码演示核密度分析指定搜索半径和输出像元。import arcpy from arcpy.sa import * # 检查Spatial Analyst许可 arcpy.CheckOutExtension(Spatial) input_point rD:\data\projected_shp\points.shp output_raster rD:\data\analysis\kde.tif population_field population # 可选用人口加权 search_radius 1000 # 单位与坐标系一致这里是米 cell_size 100 # 输出像元大小 # 核密度分析 out_kde KernelDensity(input_point, population_field, cell_size, search_radius, SQUARE_METERS) out_kde.save(output_raster) print(核密度完成)逻辑说明KernelDensity是Spatial Analyst工具箱里的工具需要许可。population_field选NONE就是每个点权重相同选字段就是加权。SQUARE_METERS是输出单位还有SQUARE_MAP_UNITS等。参数上cell_size如果设得太小比如10米输出栅格可能几个GB制图时加载都卡。建议先设大一点看效果再逐步缩小。4. 制图符号化与出图整饰让分析结果能直接进报告4.1 分级色彩与分级符号分类方法选错图就白做了分析结果出来后符号化决定读者第一眼看到什么。分级色彩用于面状数据分级符号用于点状数据。分类方法有等间隔、分位数、自然间断点、标准差。等间隔适合分布均匀的数据分位数适合强调排名自然间断点适合找自然分组标准差适合看偏离均值。我一般先用自然间断点看数据分布如果分组不合理再换。分类数量不要超过7级否则图例看不清。颜色用色带时顺序数据用单色渐变分类数据用定性色带。不要用彩虹色带打印出来全是灰。下面这段代码演示用ArcPy修改图层的符号系统设置分级色彩。注意ArcPy不能直接改符号颜色但可以改分类方法和断点颜色需要在ArcMap或ArcGIS Pro里手动调或者用.lyr文件。import arcpy mxd arcpy.mapping.MapDocument(rD:\data\analysis\map.mxd) df arcpy.mapping.ListDataFrames(mxd)[0] lyr arcpy.mapping.ListLayers(mxd, study_area, df)[0] # 设置分级色彩这里用自然间断点5级 lyr.symbologyType GRADUATED_COLORS lyr.classificationMethod NATURAL_BREAKS lyr.numClasses 5 lyr.classField area_landuse arcpy.RefreshActiveView() mxd.save() print(符号系统已更新)逻辑说明这段代码基于ArcMap的arcpy.mappingArcGIS Pro用的是arcpy.mp接口不同。classField必须是数值字段。numClasses建议3到7。颜色不会自动变需要在图层属性里选色带。参数上如果字段有大量重复值自然间断点可能报错换分位数。4.2 图例、比例尺、指北针出图整饰的四个固定动作出图整饰不是随便拖几个元素上去。图例要检查字段名是否和图层一致分类是否完整。比例尺要选对单位投影坐标系用米或千米地理坐标系用度分秒。指北针只在北朝上时加如果旋转了地图指北针要跟着转。标题要写清楚分析内容、时间、数据来源。我一般会先放图例再放比例尺最后放指北针和标题避免遮挡。导出时分辨率至少300dpi格式用PNG或PDFPDF矢量更清晰。下面这段代码演示用ArcPy导出地图设置分辨率和格式。import arcpy mxd arcpy.mapping.MapDocument(rD:\data\analysis\map.mxd) output_pdf rD:\data\analysis\final_map.pdf output_png rD:\data\analysis\final_map.png # 导出PDF分辨率300 arcpy.mapping.ExportToPDF(mxd, output_pdf, resolution300) # 导出PNG分辨率300 arcpy.mapping.ExportToPNG(mxd, output_png, resolution300) print(导出完成)逻辑说明ExportToPDF支持矢量适合打印。ExportToPNG是位图适合插入Word。resolution参数对PDF是有效DPI对PNG是像素密度。参数上如果地图元素超出页面范围导出会截断要在布局视图里检查。5. 避坑与排查空间分析制图最常见的五个翻车现场5.1 工具运行后结果为空或全黑现象点运行后图层加载了但什么都看不到或者全是黑色。原因坐标系不一致导致结果范围跑到别处或者符号化用了默认的黑色填充。解决先缩放至图层看结果在哪再检查坐标系是否统一最后改符号颜色和透明度。5.2 面积计算出现负数或零现象计算几何面积后字段里出现负数或0。原因面要素有自相交或环方向错误或者投影坐标系不适合导致变形。解决用“修复几何”工具先修数据再重新计算面积。如果还有问题换投影。5.3 叠加后属性表字段爆炸现象相交或联合后属性表出现几十个字段分不清哪个是哪个。原因多个输入图层有同名字段工具自动加后缀。解决叠加前重命名字段叠加后只保留需要的字段用“删除字段”工具清理。5.4 核密度结果全是同一个值现象核密度输出栅格所有像元值一样。原因搜索半径设得太大覆盖了整个研究区或者点数据全部重合。解决缩小搜索半径检查点数据是否有重复坐标。5.5 导出地图时图例显示不全现象导出PDF后图例只显示部分分类或者文字被截断。原因图例框太小或者分类太多。解决调整图例框大小减少分类数量或者把图例改成两列。6. 进阶技巧用模型构建器把重复制图流程固化下来如果你经常做同样的空间分析制图比如每月更新一次缓冲区覆盖图手动点工具迟早会烦。模型构建器ModelBuilder可以把整个流程串起来从投影、缓冲区、叠加到符号化、导出一键运行。更进阶的是把模型导出成Python脚本用ArcPy批量处理多个区域。我一般会先搭模型跑通后再导出脚本加循环和参数。这样下次换数据只改输入路径就行。下面这段代码演示用ArcPy批量处理多个区域的缓冲区并导出地图核心是循环和地图文档替换数据源。import arcpy import os # 区域列表 regions [region_a, region_b, region_c] base_folder rD:\data output_folder rD:\data\output for region in regions: # 输入数据 input_fc os.path.join(base_folder, region, facilities.shp) buffer_fc os.path.join(output_folder, region _buffer.shp) # 缓冲区 arcpy.Buffer_analysis(input_fc, buffer_fc, 500 Meters, FULL, ROUND, ALL) # 加载地图文档模板 mxd arcpy.mapping.MapDocument(rD:\data\template.mxd) df arcpy.mapping.ListDataFrames(mxd)[0] # 替换数据源 lyr arcpy.mapping.ListLayers(mxd, buffer_layer, df)[0] lyr.replaceDataSource(os.path.dirname(buffer_fc), SHAPEFILE_WORKSPACE, os.path.basename(buffer_fc)) # 导出 output_pdf os.path.join(output_folder, region _map.pdf) arcpy.mapping.ExportToPDF(mxd, output_pdf, resolution300) # 清理 del mxd print(完成: region)逻辑说明replaceDataSource要求工作空间类型和路径正确shp用SHAPEFILE_WORKSPACE。os.path.dirname和os.path.basename拆分路径。参数上如果模板里的图层名和代码里不一致会报错要先确认。这段脚本适合区域数量不多的情况如果上百个建议用多进程。我自己的习惯是任何重复三次以上的制图操作一定写成脚本或模型。血泪经验是手动操作多了总有一次忘了改坐标系或者忘了融合图就废了。希望帮到你。本文还有配套的精品资源点击获取