简介:这份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 = r"D:\data\raw_shp" # 输出文件夹 output_folder = r"D:\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 = r"D:\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 = r"D:\data\projected_shp\facilities.shp" output_fc = r"D:\data\analysis\buffer_all.shp" # 假设facilities.shp里有一个字段service_radius,单位是米 distance_field = "service_radius" # 先做不融合的缓冲区,便于检查 arcpy.Buffer_analysis(input_fc, r"D:\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 = r"D:\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 = r"D:\data\projected_shp\points.shp" output_raster = r"D:\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(r"D:\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.mapping,ArcGIS Pro用的是arcpy.mp,接口不同。classField必须是数值字段。numClasses建议3到7。颜色不会自动变,需要在图层属性里选色带。参数上,如果字段有大量重复值,自然间断点可能报错,换分位数。
4.2 图例、比例尺、指北针:出图整饰的四个固定动作
出图整饰不是随便拖几个元素上去。图例要检查字段名是否和图层一致,分类是否完整。比例尺要选对单位,投影坐标系用米或千米,地理坐标系用度分秒。指北针只在北朝上时加,如果旋转了地图,指北针要跟着转。标题要写清楚分析内容、时间、数据来源。我一般会先放图例,再放比例尺,最后放指北针和标题,避免遮挡。导出时分辨率至少300dpi,格式用PNG或PDF,PDF矢量更清晰。
下面这段代码演示用ArcPy导出地图,设置分辨率和格式。
import arcpy mxd = arcpy.mapping.MapDocument(r"D:\data\analysis\map.mxd") output_pdf = r"D:\data\analysis\final_map.pdf" output_png = r"D:\data\analysis\final_map.png" # 导出PDF,分辨率300 arcpy.mapping.ExportToPDF(mxd, output_pdf, resolution=300) # 导出PNG,分辨率300 arcpy.mapping.ExportToPNG(mxd, output_png, resolution=300) 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 = r"D:\data" output_folder = r"D:\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(r"D:\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, resolution=300) # 清理 del mxd print("完成: " + region)逻辑说明:replaceDataSource要求工作空间类型和路径正确,shp用SHAPEFILE_WORKSPACE。os.path.dirname和os.path.basename拆分路径。参数上,如果模板里的图层名和代码里不一致,会报错,要先确认。这段脚本适合区域数量不多的情况,如果上百个,建议用多进程。
我自己的习惯是:任何重复三次以上的制图操作,一定写成脚本或模型。血泪经验是,手动操作多了,总有一次忘了改坐标系或者忘了融合,图就废了。希望帮到你。
本文还有配套的精品资源,点击获取