简介:基于ArcGIS的Python编程秘籍(第二版)配套数据文件,面向希望借助Python提升GIS数据处理效率的开发者与地理信息分析人员。资源以ArcGIS Python API为核心,汇集了可供直接运行的代码脚本、练习用矢量与栅格数据、地图文档及成果样例,能支撑地理处理、地图自动化、数据格式转换等典型场景的动手实践。压缩包共435个文件,大小约136.1MB,以py脚本、Shapefile系列文件(shp/dbf/shx等)、地理数据库gdbtable、mxd地图文档和lyr图层文件为主体,同时附有pdf说明与txt笔记,便于对照学习。资源发布以来已有1260人学习使用。通过书中实例与配套数据相结合,读者可快速掌握空间分析任务编写、地图批量出图、常见格式互转等技能,是一套适合自学与培训的实操型参考资料。 先聊一个容易被忽略的事:这套“基于ArcGIS的Python编程秘籍第二版”的配套数据文件包,在很多人手里其实只走了两步——解压,然后放在硬盘某处吃灰。真正让它产生价值的起点,是你先把这些示例数据当成“另一本教材”来读。
我自己刚开始学arcpy那阵子,最头疼的从来不是语法,而是“代码里写的那条路径到底指向哪”。书上的脚本逻辑都懂,但手边没有对应的shp、gdb或者栅格,写出来的代码根本没法验证。这套数据文件存在的意义,就是帮你把“能看懂”变成“能跑通”。它适合正在啃ArcGIS Python的自学者、刚入职需要快速上手批处理空间数据的从业者,以及那些想把零散操作整理成流程化脚本的GIS工程师。
1. 这套数据文件包的价值与整体结构拆解
1.1 为什么一本编程书要单独带一个zip
很多不熟悉GIS的人会觉得,编程书嘛,核心是代码,数据只是配角。但GIS开发完全是另一回事——arcpy里百分之八十的报错都是数据问题:坐标系对不上、字段名写错、要素类里存在空几何、路径带中文导致读取失败。如果没有一套“标准答案级”的干净数据,你根本没法判断是自己代码写错了,还是数据本身有问题。
所以就出现了这种组织形式:书讲代码,zip提供练习数据。压缩包里的文件一般会按照章节归纳,比如ch03_cursor、ch05_buffer、ch10_mapping,每一章对应的数据都放在自己的文件夹里。你只要不改变目录结构,直接按书里的相对路径跑,基本能无缝复现每一个案例。
我自己拿到压缩包的第一件事,是先看根目录里有没有说明文档。有不少作者会在README里写清楚数据的坐标系、数据来源、字段含义,这些东西比代码还重要,因为后面你改造脚本时,必须知道每个字段代表什么业务含义。
1.2 数据包里一般能扒出哪些典型素材
从实际操作来看,这类配套数据文件通常涵盖四类内容:
- 矢量数据:点、线、面要素类,比如道路、宗地、采样点、行政区边界,用于练习字段计算、查询、空间连接。
- 栅格数据:DEM、遥感影像、土地利用分类结果,用于练习裁剪、镶嵌、重采样和栅格计算。
- 地理数据库:gdb里的要素数据集、拓扑规则、关系类,用于练习数据管理和版本化相关操作。
- 脚本依赖文件:部分案例需要的外部表格、CSV、JSON,甚至符号化用的lyrx文件。
这四类素材基本对应了日常GIS自动化最常用的场景。所以这套数据包不只是“书的附赠品”,它更像是一套覆盖GIS数据全生命周期的练习沙盘。建议拿到手之后,先把每个文件夹下的数据在ArcMap或者ArcGIS Pro里打开看一眼,了解每个图层大概长什么样,再开始写代码。这样可以显著减少后面调试时的茫然感。
2. 动手跑数据前,先解决环境和路径这两个拦路虎
2.1 让Python解释器对上ArcGIS的版本
这是所有新手最容易卡壳的地方。ArcGIS Desktop 10.x系列自带的Python是2.7,且是32位版本;ArcGIS Pro则使用独立的conda环境,默认是Python 3。你在这套数据包配套的代码最终用哪个环境,取决于书上写的是Desktop还是Pro的写法。
实际判断很简单,打开Python窗口或者命令行,跑一句话:
import arcpy print(arcpy.GetInstallInfo()['Version'])如果报错找不到arcpy,说明当前解释器不是ArcGIS内置的Python环境。Desktop用户必须使用ArcGIS安装目录下的python.exe,一般是C:\Python27\ArcGIS10.x\python.exe;Pro用户则建议使用开始菜单里的“Python Command Prompt”,或者打开Pro自带的Notebook环境,那个已经预装好了arcpy。
顺便提一句,网上关于“arcgis desktop 10.8.2与win11不兼容”的讨论很多。我的建议是:如果系统是Win11,优先选择ArcGIS Pro而不是Desktop,Pro在Win11下稳定得多。如果单位强制用Desktop,至少把补丁打到最新,并且尽量用管理员权限运行安装程序。但环境这块,我更推荐用Pro,因为Python 3的生态系统比Python 2舒服太多,第三方库随便装。
2.2 解压与目录规划:看似简单实则最影响体验
zip解压本身没有难度,但路径规划直接影响你后续所有脚本能不能跑通。我有几个坚持了很多年的习惯:
第一,解压路径不要带空格和中文,且不要太深。比如D:\Data\arcpy_book\chsamples这样的结构就比较稳。原因在于很多老版本的arcpy对中文路径支持很差,特别是Desktop时代的工具,路径一复杂就会莫名其妙报“Failed to execute”或者“Invalid parameter”。
第二,单独建一个输出目录。把所有的脚本输出都写到result文件夹里,不要和原始数据混在一起。arcpy里面很多工具默认会覆盖输出,如果输出路径指到了原始数据文件夹,跑完一遍你的练习数据就废了,再想重来只能重新解压。
import os base = r"D:\Data\arcpy_book\chsamples" out = os.path.join(base, "result") if not os.path.exists(out): os.makedirs(out)第三,解压后第一时间检查数据是否完整。看看每个文件夹下面有没有该有的文件,比如shapefile至少要包含shp、shx、dbf三个文件,缺一个就加载不了。压缩包如果是从网盘或者社区转存的,很容易出现下载不完整的情况,文件大小对不上就要重新下载。
3. 核心实操:把数据包里的代码跑出真东西
3.1 字段计算与属性整理:最容易被忽视的实用性
很多学arcpy的人一上来就盯着缓冲区、裁剪这些空间分析,其实日常工作中用得最多的反而是属性表操作。字段计算这一块,书里通常会讲两种方式:CalculateField工具和UpdateCursor。我的经验是,只要涉及逐行判断、多字段联算,或者需要把计算异常单独记录,就直接用da.UpdateCursor,不要用CalculateField硬凑表达式。
这里有个很多人问过的问题:文本型字段怎么等于空。界面操作里清空字段会有各种不便,但用Python就非常干净:
import arcpy fc = r"D:\Data\arcpy_book\chsamples\ch3\parcels.shp" with arcpy.da.UpdateCursor(fc, ["LANDUSE_CODE"]) as cursor: for row in cursor: row[0] = None cursor.updateRow(row)注意这里不能赋空字符串,要赋None,否则在ArcGIS里字段显示的不是空值,而是一个长度为零的字符串。数据库查询时这两种状态差别很大,NULL用“IS NULL”能查出来,空字符串查不出来。类似的坑还包括字段类型转换,比如你从Excel读进来的面积字段是文本型,要先转成浮点数才能做比较:
area_val = float(row[0]) if area_val > 1000: row[1] = "large" else: row[1] = "small"这个场景在数据包里特别常见,因为不少练习数据就是从外部表格转过来的,字段类型比较杂乱。遇到这种数据,别急着骂,先写个脚本批量检查字段类型,再决定要不要做转换。
3.2 空间分析与批处理:从手动点按钮到一行循环
空间分析是这套数据包的另一个重头戏。缓冲区、裁剪、空间连接、叠加分析,每一样都有对应的arcpy工具。脚本化的优势在于循环,手动操作几十次的东西,代码几行就能跑完。比如你有一个道路图层,想生成多个距离的缓冲区并分别存成独立文件:
distances = [100, 300, 500] for d in distances: output = rf"D:\Data\arcpy_book\chsamples\result\buffer_{d}m.shp" arcpy.Buffer_analysis(roads, output, d, dissolve_option="ALL")很多刚接触的朋友会问,怎么知道每个工具需要传什么参数?两个办法,一个是看函数签名的提示,另一个是我比较推荐的:先在ArcGIS Pro的“地理处理”窗口手动跑一遍,然后在“结果”窗口里查看该工具对应的Python片段。这个片段是系统自动生成的,参数顺序绝对正确,直接复制进来改成循环就行。这个方法我用了十年,几乎能解决所有工具调用参数不熟的场景。
同样的思路可以扩展到裁剪影像、按属性批量导出要素类等场景。比如“arcgis裁剪影像”这种需求,手动操作时要点半天,用代码就变成了一个循环:
for fc in feature_classes: arcpy.Clip_management(rast, "", output_path, "", "ClippingGeometry", "NO_MAINTAIN_EXTENT")3.3 制图导出与拓扑检查:数据包后半段的进阶玩法
数据文件里到了靠后的章节,基本就是制图导出和拓扑检查了。批处理出图是很多单位的刚需,每天或者每周固定出图,手动一张张导出的确很折磨人。arcpy的制图模块可以让这个流程自动化:打开mxd或者aprx,遍历指定的图层,替换数据源,调整比例尺,然后批量导出png或者pdf。
拓扑检查也是必须掌握的实战技能。空间数据几何错误是常态,哪怕看起来正常的shp,也可能存在自相交、悬挂点、重复要素等问题。arcpy里可以通过拓扑规则来检查,也可以用数据管理工具箱里的工具逐个排查。我之前用数据包里的一个宗地图层做过练习,跑完拓扑检查后列出了一大片自相交错误,原因就是原始数据在数字化时顶点顺序乱掉了。
几何问题排查出来之后,我推荐用Repair Geometry工具做修复。这个工具能解决大部分几何异常情况,但注意它是直接修改源数据的,操作之前一定要备份。这也正好回应了前面说的“单独建输出目录”的建议,修改前复制一份到result目录下,再怎么折腾都不心疼。
4. 常见问题与排查技巧实录
4.1 解压失败、zip损坏与文件缺失
现实中下载数据文件zip,最常遇到的坑就是解压报错。有一种错误提示是“could not find eocd”,看到这个基本上可以判断压缩包本身不完整。eocd是zip文件的结尾标记,文件传输中断、储存空间不足都可能导致压缩包缺尾。
处理方法是先看文件大小,和来源页面上标注的大小做对比;然后用7-Zip打开测试压缩包的完整性,而不是直接用系统自带解压工具。如果确认损坏,重新下载。下载时换一个浏览器或者下载工具,很多时候是断点续传导致的问题。还有一个很容易被忽略的点:下载下来如果是zip.zip这种双重后缀,多半是浏览器插件或者某些中转站偷偷改了文件名,先改回正常的zip后缀再解压。
4.2 路径、坐标系和面积异常问题
跑数据包练习时,如果脚本报“Cannot open dataset”,先检查路径分隔符。Windows下建议使用原始字符串,比如r"D:\Data\file.shp",或者统一用斜杠/,不要用反斜杠加转义。这个错误我见过太多次,代码本身没问题,就是路径写法不规范。
面积出现负值也是一个高频问题。面要素的面积为负,通常是几何的顶点顺序不对。arcpy脚本可以直接修复:
arcpy.RepairGeometry_management(in_features)修复前先确认数据是否需要投影,不同的坐标系下计算出的面积单位完全不同。数据包里的数据一般会标注坐标系,如果你发现跑出来的结果和书上对不上,先检查arcpy.env.outputCoordinateSystem有没有设置正确。
4.3 License、占用锁和“文件被锁”问题
跑脚本时如果提示许可不够或者无法初始化,首先确认你的ArcGIS授权是否正常,License管理器是否已经启动。很多人遇到“license管理器启动不了”,重启服务或者重新安装License程序就能解决,但也有可能是版本和系统不兼容,这时候建议直接切换到Pro环境,Pro的授权方式简单很多。
另一个高频问题就是文件被占用。脚本报“xxx is locked by another application”时,优先检查ArcMap或Pro是否还开着这个数据。只要地图文档里引用了某个要素类,脚本就删不掉或者写不进去。最简单的办法就是关掉界面程序再跑脚本,或者把中间数据放in_memory,绕开磁盘锁定的问题:
temp_fc = r"in_memory\temp_result" arcpy.Buffer_analysis(roads, temp_fc, "100 meters")in_memory数据在内存里跑,速度更快,不会占用文件锁,但是会话结束就没了,最终结果记得复制到磁盘。
5. 把这套资料用出价值的方法论
5.1 三步学习法:跑通、改造、重写
现在我自己的习惯是,任何教程数据拿到手,都要走完三步才叫真的学会。第一步,老老实实照着书把代码敲一遍,跑出一个和书上一样的结果,这一步的目标是“跑通”。第二步,改参数。比如缓冲距离从100改成150,裁剪范围换一个面要素,看看输出有什么变化。这一步的目标是理解参数对结果的影响。第三步,关掉书,只看数据,从头写一个相同功能的脚本。这一步才是真正检验你有没有学会的东西。
很多人买完这套数据包,卡在第一步:跑通后觉得“哦原来如此”,然后把代码关了。过两个礼拜再看,手生得不行。原因就是少了改造和重写这两步。
5.2 把示例脚本沉淀成自己的工具库
数据包里最值得收集的,其实是那些具有通用性的脚本模板。比如批量字段整理的代码、按属性导出的代码、批处理出图的代码。这些脚本只要稍微改改业务逻辑,就能变成日常工作里的自动化工件。
我自己从类似的资料里整理了一个“脚本库”文件夹,里面按功能分了类:数据整理、空间分析、制图导出、质量检查。每次在项目里遇到重复性劳动,先翻翻脚本库,能直接改的就别从头写。这个习惯帮我省了大量时间。
5.3 最后分享一个扩展思路
等你把这套数据包完全吃透之后,可以尝试把最后一个综合案例改造成一个可以接收参数的工具脚本,然后用ArcGIS的Script Tool向导把它包装成一个自定义工具。这样你就完成了从“写脚本”到“写工具”的跨越,之后在模型构建器里就能像调用系统工具一样调用你自己的脚本,整个项目的复用性和可维护性都会上一个台阶。我在实际工作中最受用的,就是这类从教程数据到生产工具一步步打磨出来的过程。
本文还有配套的精品资源,点击获取