ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ArcMap三步重置默认地理数据库路径,释放C盘空间

ArcMap三步重置默认地理数据库路径,释放C盘空间 C盘又飘红了吧打开ArcMap跑个缓冲区分析眼看着剩余空间蹭蹭往下掉关掉软件再看发现Documents\ArcGIS\Default.gdb已经膨胀到好几十个G。这不是个例我这些年帮同事排查电脑卡顿十个做GIS的至少有六七个都栽在ArcMap的默认地理数据库路径上。默认路径这个概念平时存在感极低但只要你用过地理配准、Excel坐标转点、坐标成面、字段计算器这些操作中间产物和最终结果默认全写到C盘。这篇文章我把在项目里反复验证过的三步重置流程完整整理出来从原理、操作到避坑一次讲透适合所有用ArcMap 10.x系列、C盘空间告急又不敢乱动数据的GIS同行。1. 核心原理ArcMap凭什么往C盘猛写数据1.1 藏得很深的Default.gdbArcMap安装后会在“我的文档”下自动生成一个ArcGIS目录里面带着一个Default.gdb文件地理数据库。这个库的定位就是“什么路径都不指定时的兜底出口”。只要你打开ArcToolbox跑工具比如缓冲区、相交、裁剪、生成泰森多边形只要没有修改环境的“工作空间”输出要素类就会落进这个库。平时你可能根本没注意过它但日积月累它的体积会相当可观。我用TreeSize扫过一次一个只做常规编辑和制图的同事Default.gdb两年攒了20多个G里面全是临时生成的中间图层、半成品面数据有些图层连命名都是默认的buffer_polygon或者Intersect_fc。而且这个库还自带系统索引和内部管理结构消耗空间比同等数据量的shp文件更大。1.2 不只是默认地理数据库还有一套“C盘路径全家桶”很多同学以为改掉Default.gdb就万事大吉其实ArcMap默认写C盘的路径远不止一个。站在数据处理角度看有三层路径在同时起作用默认地理数据库Default Geodatabase就是那个Default.gdb主要用于存放工具执行结果和未指定目标位置的数据。临时工作空间Scratch Workspace对应的是scratch.gdb或scratch文件夹工具运行过程中的中间临时数据会优先写到这里。我的文档与用户配置路径包括ArcMap的缓存、日志、样式、启动画面等也在C盘。不少人只注意到第一个忽略了临时工作空间。跑大数据量工具时真正的空间压力往往来自scratch.gdb。我曾经帮人排查一个C盘被“吃”掉的案例最后发现罪魁祸首是scratch.gdb里的一个arcpy脚本循环生成的临时栅格数据短时间内直接把C盘干到只剩几百M。1.3 哪些高频操作最容易踩中默认路径结合日常GIS操作习惯下面这些动作基本都是默认路径的重度使用者地理配准一边配准一边会生成控制点相关临时图层如果在这之前执行过其他工具缓存与临时输出也会写到默认库。Excel经纬度坐标导入成点、CAD到GIS坐标转换这些操作通常会先经过“创建要素类”或“生成点”的过程不指定输出路径就直接落到默认库。字段计算器批量取整、统计、表面分析、DEM分割等空间分析工具大量中间栅格和临时矢量会频繁写临时工作空间。这些操作加在一起C盘压力自然就上来了。特别是随手关掉软件前不做清理临时数据残留会越积越多。我自己早期带项目的时候就见过一个新人用“字段计算器”循环取整跑了几百个图层生成的中间数据把C盘填满最后CAD导入都失败。这种问题改掉默认路径后基本能根绝。2. 动手前的准备工作别急着改先备份和体检2.1 先搞清楚C盘空间到底被谁占了我建议在动手前先用TreeSize、SpaceSniffer或者WizTree这类磁盘分析工具扫一遍C盘重点找到“用户目录\Documents\ArcGIS”这个目录同时记录一下里面Default.gdb、scratch.gdb分别占了多少空间。这样改完之后对比才有依据。如果你的系统里“我的文档”已经被重定向到D盘或E盘那默认地理数据库可能不在C盘这种情况下C盘爆满的原因往往是AppData缓存、临时文件或系统更新不要盲目改ArcMap先区分清楚问题来源。这也是我踩过的一个判断坑绕了不少弯路。2.2 备份数据最稳妥的方式是ArcCatalog复制很多人图省事直接在资源管理器里把Default.gdb整个文件夹复制到D盘这种做法风险不低。文件地理数据库内部有复杂的索引、关系类、拓扑关系而且ArcMap打开时gdb可能存在活动锁直接拷贝经常出现复制一半报错或者复制完后要素类打不开、坐标系信息丢失的情况。正确做法是关闭所有ArcMap和ArcCatalog窗口重新打开ArcCatalog在目录树里展开旧Default.gdb用全选要素类后“复制”再在目标目录中“粘贴”。ArcCatalog的复制粘贴会完整保留要素类的字段属性、投影坐标系、空间参考和索引。数据量大的时候这个过程可能比较慢但值得等。2.3 提前规划好新路径和命名新库放哪最好提前想清楚。我一般建议这么规划如果数据以项目制为主在D盘或者E盘建立一层“GIS_Database”总目录再按项目细分比如D:\GIS_Database\ProjectA.gdb。如果只是想解决默认路径占C盘问题那建一个D:\GIS_Database\Default.gdb就够了。临时工作空间对应建一个D:\GIS_Temp\scratch.gdb方便定期清理。路径规划有个容易被忽略的细节尽量全英文路径不要带空格、中文和特殊符号。因为部分ArcToolbox工具调用的模型脚本对中文路径支持并不完美尤其是一些第三方插件和arcpy脚本在中文路径下会出现莫名其妙的错误。我见过一个ArcGIS 10.2的老项目就是因为路径里带中文导致“地理配准”窗口反复崩溃改成英文后问题再没出现过。新库建好后在ArcCatalog里能看到完整的要素类列表确认无误再进入下一步。3. 三步重置ArcMap默认地理数据库路径3.1 第一步迁移旧数据到新地理数据库先把旧库里的有效数据迁移出来。操作路径很直接在ArcCatalog中展开“默认地理数据库”选定需要的要素类右键选择“复制”。然后在计划好的目标文件夹上右键选择“粘贴”等待进度条走完。这里我特别提醒两句复制时如果弹窗提示“要素类正在被锁定”说明有ArcMap文档或编辑会话还开着必须全部关闭再操作。如果旧库里有些数据是临时中间产物比如之前用工具生成的中间结果确认不需要的话可以直接放弃不必浪费时间迁移。迁移完毕之后用ArcCatalog再预览一下新库里的数据能否正常打开确认字段和坐标系没丢这步就算完成了。如果数据量特别大建议分批次迁移每次复制一部分要素类避免一次性操作时间过长导致中断。3.2 第二步修改ArcMap的默认地理数据库路径新的数据库建好、数据迁好之后正式进入改路径环节。打开ArcMap点菜单栏的“地理处理”下拉菜单中选择“地理处理选项”。弹出的窗口里能看到第一项是“默认地理数据库”右侧有个文件夹图标和路径框。点击浏览选择刚建好的D:\GIS_Database\Default.gdb确定即可。同一窗口里还有“临时工作空间”这个也建议一起改掉。把临时工作空间指向D盘或E盘的scratch.gdb。如果还没有这个库就在ArcCatalog中新建一个文件地理数据库命名为scratch.gdb或者随意叫temp.gdb。修改完之后顺便检查一下“后台处理”和“覆盖工具输出结果”的设置一般保持默认即可。然后点确定。这里要补充一个重要提醒ArcMap环境设置中的“工作空间”优先级高于“地理处理选项”中的默认值。如果你的当前地图文档加载过自定义环境或者ArcToolbox工具的参数页底部打开了“环境”面板里面设置了“当前工作空间”或“暂存工作空间”那工具输出仍然会写入环境指定的位置而不是你刚改的默认路径。出现这种情况时要在“地理处理”菜单下的“环境”对话框中把“工作空间”里的“当前工作空间”和“暂存工作空间”都设为新路径。3.3 第三步验证生效、清理旧路径数据改完之后先别急着删旧数据做一轮完整验证。重启ArcMap看窗口左侧“目录”面板中“默认地理数据库”节点显示的路径是否变成新库路径。然后随便跑一个工具做实测比如给一个面图层做一次缓冲区分析。跑完之后在“目录”中刷新确认输出结果落在新路径下。如果验证通过再回C盘把旧的Documents\ArcGIS\Default.gdb和scratch.gdb清理掉。删除gdb时直接在资源管理器中删除整个文件夹即可但一定要确保所有ArcMap、ArcCatalog进程全部退出否则会提示文件夹被占用强行删除还可能损坏数据。我在实际操作用会先用任务管理器确认没有ArcMap.exe、ArcCatalog.exe进程残留再执行删除这样最稳妥。4. 验证实测用Python环境变量确认重定向4.1 利用arcpy获取运行时环境信息界面上的路径显示不算最可靠的证据我更喜欢用ArcMap自带的Python窗口来验证。点击ArcMap工具栏上的“Python”按钮打开Python窗口输入下面几行代码import arcpy arcpy.env.workspace arcpy.env.scratchWorkspace arcpy.env.scratchGDB每行输入回车后窗口会直接输出当前环境的实际路径。如果输出的路径已经指向D盘新库和临时目录说明ArcMap的重定向已经完全生效。这个技巧在项目里有个实际价值你在写arcpy脚本批量处理数据时如果脚本没有显式设置arcpy.env它会沿用ArcMap当前环境。提前把环境变量捋清楚能避免脚本大量输出写到C盘的老问题。我自己写数据处理脚本时习惯在脚本开头固定import arcpy arcpy.env.workspace rD:\GIS_Database\Default.gdb arcpy.env.scratchWorkspace rD:\GIS_Temp\scratch.gdb这样无论谁运行脚本、系统环境怎么变输出路径都是可控的。4.2 空间释放效果对比我拿一台统计过空间的机器做了实测数据如下项目迁移前迁移后Documents\ArcGIS目录占用18.6G约0.4GDefault.gdb占用11.2G0Gscratch.gdb占用6.9G0GD盘新增占用0G约18.9GC盘可用空间提升基线约18G处理大数据量的速度方面把工作目录从C盘机械盘挪到D盘SSD后跑一个涉及几百万条记录的空间连接耗时从原来的17分钟左右降到了9分钟左右。这个提速来自磁盘I/O的改善以及C盘空间充裕后系统不再频繁触发磁盘清理行为。数据量越大这种重定向带来的收益越明显。做栅格分析、DEM分割这类大文件操作时中间文件如果写满C盘导致系统盘空间不足可能直接导致工具执行失败。路径迁移后这类故障也少了很多。实测下来只要C盘能保持20G以上的空闲空间ArcMap整体运行稳定性都会有明显提升。5. 常见问题与排查技巧实录5.1 改了默认地理数据库重启后又变回C盘路径这种情况多半不是ArcMap设置本身的问题而是“我的文档”路径被系统重定向到了别的磁盘或者工作环境中存在组策略对ArcGIS用户配置的强制锁定。排查思路是先在ArcMap里重新走一遍地理处理选项把默认地理数据库设为新路径并点确定然后关掉ArcMap后立刻打开看一次。如果能保持新路径说明设置生效只是某些文档级环境覆盖没清理干净。如果每次都自动变回去重点检查“我的文档”位置属性以及Windows用户配置文件目录是否正常。打开系统的“文档”属性看“位置”选项卡如果显示路径在C:\Users\用户名\Documents那是正常如果显示的是网络路径或其他盘符就要注意ArcMap对默认库的写入受该路径影响解决方向在于调整系统“文档”重定向。5.2 迁移后打开要素类提示出错或形状数与表记录数不一致这两个问题在数据迁移场景里很常见本质都和数据复制方式有关。如果在资源管理器里直接复制gdb文件夹复制过程可能因为活动锁或文件占用丢失部分数据文件导致要素类的实际记录数和属性表记录数对不上或者打开时报“要素类出错”和“无法读取数据集”。遇到这种情况先检查源库是否还在。如果源库数据完好回到ArcCatalog中重新执行一次复制粘贴并且复制前确认没有任何ArcMap文档、编辑会话、SDE连接占用该库。复制完成后给要素类重新计算一次“XY容差”和“字段属性”必要时用“修复几何”工具扫描一下import arcpy arcpy.management.RepairGeometry(rD:\GIS_Database\Default.gdb\your_fc)修复之后再次打开属性表对比记录数基本都能恢复一致。如果还不行考虑把数据先导出成shp再导回gdb这种“两级跳”方式有时候能绕开损坏的索引结构。5.3 想彻底把C盘空间释放干净还需要清理哪里路径改完之后C盘还有几个ArcMap关联位置值得检查C:\Users\用户名\AppData\Local\ESRI存放ArcGIS缓存、临时文件、日志可以清理。C:\Users\用户名\AppData\Roaming\ESRI存放桌面端配置、ArcMap的扩展配置文件。C:\Users\用户名\Documents\ArcGIS\包含Default.gdb、scratch.gdb以及“ArcMap崩溃日志”“Export临时输出”等文件夹。ArcGIS Online相关缓存如果用过门户和在线地图加载缓存也会占用几个G。清理这些目录时只删明确的临时文件和缓存不要删除整个ESRI配置目录否则ArcMap的许可配置、自定义扩展会受到影响还得重新激活或配置。我建议在清理前先完整退出ArcMap并做一次系统还原点万一误删还能恢复。5.4 ArcMap里复制了不能粘贴多半是这几类原因很多人在数据迁移后突然遇到“复制了不能粘贴”的情况。常见原因有三个目标位置正在被编辑或包含锁定的gdbArcMap会在写入前提示无法打开数据库。源图层和目标库空间参考不一致ArcMap会询问是否添加空间参考如果直接拒绝则粘贴灰置。正在编辑会话中执行跨工作空间复制部分复制粘贴操作规则会受限离开编辑会话后即可恢复。排查时先看界面左下角的状态栏信息然后关掉编辑会话刷新目录面板重新选中复制粘贴。如果还是不行用“导出”功能代替复制粘贴直接导出到目标gdb的要素类效果一样且更稳定。特别提醒跨gdb拷贝时不要开着多个ArcMap窗口同时操作经常造成数据锁冲突。6. 顺手开源一套项目级数据目录管理习惯6.1 用“一个项目一个gdb”代替所有数据堆Default把路径迁出来只是第一步真正治本的是改善数据组织方式。我建议每个项目建立独立的地理数据库不要所有项目共用同一个默认库。目录结构可以参照下面这个模板项目A\01_Data\项目A.gdb存放源数据和基础数据。项目A\02_Map\项目A.mxd存放地图工程文件。项目A\03_Output\存放成果、图表和导出文件。项目A\04_Temp\放临时scratch库属于可随时清空区域。这样有几个直接好处数据追溯清晰项目交接时直接打包目录即可系统盘压力分散平时跑工具时输出目标一目了然不会出现丢在某个默认库里找不到的尴尬。尤其多人协同时每个人都知道数据该放哪个库不会互相覆盖。6.2 重置后别忘了核对工具的环境设置每次打开ArcToolbox工具时参数面板下方都有“环境”按钮点击后能展开“环境设置”。其中“工作空间”一栏下的“当前工作空间”和“暂存工作空间”对输出路径有决定性影响。建议在工程开始之前在“地理处理”菜单的环境设置中统一设置好这两个值。如果你经常用同一个项目模板可以在模板MXD中把环境设置保存为默认。这样每次从模板新建工程输出路径自动指向项目目录下的gdb能省不少手工修改时间。我手上维护的几套标准制图模板就是这么干的组里新来的同事上手也快。6.3 把“我的文档”重定向到非系统盘如果你的C盘空间本身就很紧张还可以考虑把整个“文档”文件夹重定向到D盘或E盘。操作很简单右键“文档”文件夹选择“属性”切到“位置”选项卡输入新路径点击“移动”系统会弹窗询问是否把原目录下文件全部移到新位置选“是”即可。这个操作对ArcMap同样有效因为默认地理数据库始终位于“文档\ArcGIS\Default.gdb”下。重定向后即使未来某个gdb因为误操作又变回默认位置数据也不会落在C盘。重定向唯一要注意的是如果贵单位使用域环境或有统一桌面管理策略可能没有权限修改系统目录这种情况需要联系IT解禁或走审批流程。6.4 长期维护的小习惯定期清理scratch库很多人改了路径后就把这事抛到脑后几个月之后再一看D盘也满了。scratch.gdb和默认库是定时炸弹建议每周或每两周清理一次把临时文件删干净。我自己的习惯是调度一个简单脚本在每周五下午自动刷新scratch.gdb、清空输出目录顺带把地图文档调整后的备份归档到项目文件夹。如果你也是arcpy的常用者还可以在脚本结尾统一执行一段清理代码删除超过7天的临时中间数据避免D盘重复C盘的覆辙。数据整理这件事没有一劳永逸的方案勤打理才是硬道理。我个人体会最深的还是那句话别让ArcMap替你做“默认”决定。路径这种东西前期多花十分钟规划后面能省下几天排查的工夫。记住三步核心操作——迁移、重设、验证配合一套合理的目录习惯C盘爆满这个问题基本就可以告别了。如果你后续想把整套工程目录模板和脚本自动化做出来我也可以再单独写一篇展开讲讲。
返回列表