
简介这份源码包面向使用ArcGIS Pro进行空间数据分析、希望借助Jupyter Notebook提升交互式编程效率的GIS从业者与学习者。资源围绕ArcGIS Pro自带Python3环境的调用展开涵盖启动Jupyter、生成配置文件、修改c.NotebookApp.notebook_dir以永久固定工作目录以及在ArcGIS Pro的Python环境中直接打开Jupyter到指定目录等关键环节帮助读者解决默认路径不便管理、工作目录频繁切换等实际问题。压缩包共3个文件以inscode项目配置、html页面与gitignore忽略规则为主整体约4KB结构轻量便于快速导入与二次整理。目前已有99人学习下载。对于希望把ArcPy脚本、空间数据处理与交互式笔记结合起来的用户这份源码可作为环境配置与项目组织的参考起点也适合作为GIS软件开发中包管理与代码组织方式的入门示例。1. ArcGIS Pro 里那个 Jupyter Notebook到底值不值得用很多人装了 ArcGIS Pro 两三年从来没点开过分析选项卡里那个 Jupyter Notebook 按钮。原因很朴素ArcPy 在 PyCharm 里跑得好好的为什么要跑到 Pro 里面去写代码我一开始也是这个想法直到有一次做一批宗地数据的批量拓扑检查在外部 IDE 里反复调arcpy.Exists和路径改一次跑一次光等 Pro 启动就耗掉大半个下午。后来换成在 Pro 内置的 Notebook 里写地图就摆在旁边改一行跑一行中间结果直接叠到当前视图上那半天省下来的时间让我彻底改了习惯。ArcGIS Pro 使用 Jupyter Notebook 这件事本质是把 Python 分析环境嵌进了 GIS 桌面端。它解决的不是能不能跑 ArcPy的问题——外部 IDE 当然能跑——而是分析过程和空间上下文脱节的问题。你在 Notebook 里算出来的临时图层可以直接add_layer到当前地图你在地图上选中的要素可以在 Notebook 里用MapView直接读出来。适合谁适合那些日常在 Pro 里做数据处理、批量出图、模型调试又不想在 IDE 和 Pro 之间来回切的人。不适合纯做后端服务、跑无人值守脚本的场景那种还是老老实实用独立 Python 环境。2. 环境怎么搭从 Pro 自带解释器到独立 conda 环境2.1 先搞清楚 Pro 用的是哪个 PythonArcGIS Pro 每个大版本绑一个特定的 conda 环境路径通常在安装目录下的bin\Python\envs\arcgispro-py3。这个环境里预装了 arcpy、numpy、pandas、matplotlib 这些但没有jupyter、scikit-learn、gdal 这些第三方库。很多人第一次打开 Notebook 发现 import 报错就是因为默认内核指向的就是这个精简环境。先确认你的环境路径。在 Pro 的 Python 命令提示符里执行# 查看当前激活的 conda 环境信息 conda info --envs # 输出里带星号的就是 Pro 默认环境路径类似 # C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3逻辑说明conda info --envs列出所有环境星号标记当前激活的。Pro 自带的 Python 命令提示符启动时已经激活了arcgispro-py3所以这一步能直接看到它的绝对路径。参数上没什么可调的关键是记住这个路径后面克隆环境要用。2.2 克隆环境而不是直接装包直接在arcgispro-py3里pip install是血泪教训。Pro 升级时会重置这个环境你装的东西全没了更糟的是有些包版本冲突会导致 Pro 本身启动异常。正确做法是克隆一份# 克隆 Pro 默认环境命名为 my_gis_env conda create --name my_gis_env --clone arcgispro-py3 # 激活新环境 conda activate my_gis_env # 装 Jupyter 和常用分析库 conda install jupyter jupyterlab scikit-learn -c esri -c conda-forge逻辑说明--clone会把 arcpy 及其依赖完整复制过来保证地理处理功能可用。-c esri指定 Esri 的 conda 频道某些 arcpy 相关包只有这个频道有。-c conda-forge是社区频道scikit-learn 这类通用库从这里装版本更新。参数上环境名自己定但别用中文和空格。装完后在 Pro 的工程 → Python → 管理环境里把这个新环境添加进去设为活动环境。2.3 在 Pro 里绑定内核环境建好了不代表 Notebook 就用它。Pro 的 Notebook 内核选择在界面右上角点开下拉能看到所有已注册的 conda 环境。如果没出现去工程设置 → Python → 环境管理器里刷新一下。选中my_gis_env后新建的 Notebook 就会用这个内核。验证是否绑定成功跑一段import arcpy import sys print(sys.executable) # 应该指向 my_gis_env 下的 python.exe print(arcpy.GetInstallInfo()[Version]) # 打印 Pro 版本逻辑说明sys.executable是最直接的证据如果它指向arcgispro-py3而不是my_gis_env说明内核没切对。GetInstallInfo返回一个字典包含版本、安装路径等信息用来确认 arcpy 能正常初始化。这一步过了环境就算搭稳了。3. 在 Notebook 里操作地图MapView 和图层联动3.1 拿到当前工程的 Map 对象Pro 的 Notebook 和普通 Jupyter 最大的区别是它能通过arcpy.mp直接访问当前打开的工程。核心入口是ArcGISProjectimport arcpy # CURRENT 表示当前打开的工程不用写死路径 aprx arcpy.mp.ArcGISProject(CURRENT) # 列出工程里所有地图 for m in aprx.listMaps(): print(m.name) # 取第一个地图 m aprx.listMaps()[0]逻辑说明ArcGISProject(CURRENT)是 Pro Notebook 特有的写法在外部 IDE 里必须传.aprx文件的绝对路径。listMaps()返回地图对象列表顺序和工程里地图标签的排列一致。参数上如果工程里有多个地图建议用listMaps(地图名)按名称过滤比索引可靠。3.2 把分析结果直接加到地图上这是内置 Notebook 最爽的地方。算完一个临时要素类不用手动拖进地图# 假设 out_fc 是前面某个分析生成的要素类路径 out_fc rC:\project\data.gdb\buffer_result # 加到当前地图放在最上层 lyr m.addDataFromPath(out_fc) # 改个显眼的符号颜色RGB lyr.symbology.renderer.symbol.color {RGB: [255, 0, 0, 50]}逻辑说明addDataFromPath接受本地路径、GDB 路径甚至 URL返回一个 Layer 对象。symbology.renderer.symbol.color用 RGBA 字典控制颜色第四个值 50 是透明度0-100。参数上注意如果图层已经存在重复添加会报错稳妥做法是先判断m.listLayers(out_fc)是否为空。3.3 读取地图上的选择集反过来用户在地图上框选了几个要素Notebook 里能直接拿到# 获取当前地图视图 mv aprx.activeView # 读取选择集返回要素 OID 列表 selected mv.getSelectedFeatures() for feat in selected: print(feat.getSelectionSet())逻辑说明activeView返回当前激活的 MapView 或 LayoutView。getSelectedFeatures()返回一个 FeatureLayer 对象getSelectionSet()拿到选中的 OID 列表。参数上如果当前没有选择返回空列表不会报错。这个能力在做交互式标注、手动修正分类结果时特别有用。4. 避坑与排查那些让 Notebook 卡死的操作4.1 内核重启后变量全丢现象跑了一长串分析中间改了个参数想重跑结果手滑点了重启内核所有变量归零前面半小时白跑。原因Jupyter 内核重启会清空内存这是设计行为不是 bug。Pro 的 Notebook 也不例外。解决把耗时的中间结果落盘成 GDB 要素类或 pickle 文件别只留在内存里。我一般会在关键步骤后加一句arcpy.CopyFeatures_management(temp_lyr, r...\checkpoint.gdb\step3)重启后从 checkpoint 读回来不用从头跑。4.2 中文路径导致 arcpy 报错现象arcpy.analysis.Buffer报 000732: 数据集不存在或不受支持但路径明明是对的。原因arcpy 对中文路径的支持一直不完整尤其是涉及栅格和某些地理处理工具时。Notebook 的工作目录如果含中文临时文件也会出问题。解决工程路径、GDB 路径、输出路径全部用英文和数字。如果数据源本身在中文目录下先arcpy.CopyFeatures_management拷到英文临时目录再处理。这个坑没有后悔药只能提前规避。4.3 内存不释放跑到后面越来越慢现象循环处理几百个要素类前几十个很快后面越来越卡最后内存爆掉。原因arcpy 的游标和图层对象不会自动回收尤其在 Notebook 里反复创建da.SearchCursor而不关闭。解决用with语句管理游标或者显式del加gc.collect()。另外每处理完一批就arcpy.management.Delete掉中间临时数据。我习惯在循环里每 50 次加一次gc.collect()虽然土但管用。4.4 Notebook 保存的 .ipynb 和 Pro 工程不同步现象在 Pro 里改了 Notebook关掉工程再打开发现改动没保存或者 Notebook 文件损坏打不开。原因Pro 的 Notebook 是嵌入在工程里的.ipynb文件实际存在工程目录下的notebooks文件夹。如果工程没正常保存就强制关闭Notebook 的写入可能中断。解决养成手动 CtrlS 的习惯别依赖自动保存。重要分析步骤跑通后把代码复制一份到独立的.py文件里备份。另外Notebook 文件不要用外部编辑器同时打开容易冲突。4.5 第三方库版本和 arcpy 冲突现象装了新版 pandas 后arcpy 的某些工具开始报奇怪的 numpy 版本错误。原因arcpy 对 numpy 版本有硬性依赖Pro 每个版本绑定的 numpy 版本是固定的。用 pip 强行升级 numpy 会破坏 arcpy。解决在克隆环境里装包时优先用 conda 而不是 pipconda 会做依赖求解。如果必须用 pip装完后跑一遍conda list numpy确认版本没被改。已经冲突了就重建环境别试图修。5. 进阶技巧把 Notebook 当分析流水线用前面讲的都是单次交互但 Notebook 真正的价值在于可重复的分析流水线。我现在的习惯是每个数据处理任务建一个 Notebook按数据读取 → 清洗 → 分析 → 出图 → 导出分段每段一个 Markdown 标题。这样三个月后回头看或者交给同事接手打开就知道每一步在干什么。一个具体的技巧是用%run魔法命令拆分代码。把通用函数写在一个utils.py里Notebook 开头%run utils.py这样多个 Notebook 共享同一套工具函数改一处全生效。比复制粘贴强太多。另一个是参数化。把路径、阈值、输出名称这些写在 Notebook 最上面的一个 cell 里用大写变量名标记# 参数区 INPUT_FC rC:\project\data.gdb\parcels BUFFER_DIST 50 Meters OUTPUT_FC rC:\project\data.gdb\parcels_buffer # 逻辑说明所有可调参数集中在一处跑之前只改这一段下面的代码不用动。参数名用大写是约定一眼能认出。BUFFER_DIST带单位字符串是 arcpy 的要求不能只写数字。验证流水线是否可靠我的做法是换一台机器、换一份同类数据从头跑一遍。如果不用改任何代码就能出结果说明参数化做到位了。如果报错看报错在哪一段把那段的条件判断补上。最后说个我自己的教训别在 Notebook 里写超过 200 行的单个 cell。Pro 的 Notebook 编辑器对长 cell 的响应会变慢而且调试时定位困难。我一般控制在 50 行以内超了就拆。这个习惯让我少熬了好几个夜。希望帮到你。本文还有配套的精品资源点击获取