利用python代码执行地理信息数据处理,提高工作效率(一)

**

引言

**
本文通过ArcPy代码脚本实自动化修改ArcGIS地图文档(MXD)布局中的文本内容,或者进行更新图层属性和符号系统,实现大批量文件内容的修改。

1.1 利用ArcPy 修改地图文档布局视图的文本内容:

import arcpy  
# 使用arcpy.mapping.MapDocument函数加载ArcGIS地图文档(MXD)  
# 注意:这里的'ur'应该是'r'的误用,应为原始字符串前缀以避免反斜杠的转义问题  
# 但为了保持原样,我在注释中指出  
mxd = arcpy.mapping.MapDocument(ur'D:\AA自然资源确权\08大改(沿用原始宗界址点)\宗地图工程\610923102201JA00034.mxd')   
  
# 遍历地图文档(MXD)布局中的所有文本元素  
for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):    
    # 检查当前文本元素的文本内容是否为"丈量人"  
    if elm.text == "丈量人":    
        # 如果是,则将其文本内容修改为"制图人"  
        elm.text = "制图人"    
        # 注意:以下两行在修改布局文本元素时通常不是必需的,  
        # 因为它们用于刷新视图和目录树,而这些更改是直接在MXD文件中进行的  
        # arcpy.RefreshActiveView()  # 尝试刷新当前的活动视图(通常不需要)  
        # arcpy.RefreshTOC()  # 尝试刷新目录树(同样,通常不需要)  
    # 检查当前文本元素的文本内容是否为"丈量日期"(注意:这里不需要elif,因为可能有两个不同的文本元素)  
    if elm.text == "丈量日期":    
        # 如果是,则将其文本内容修改为"制图日期"  
        elm.text = "制图日期"    
        # 同样,这里的刷新操作也不是必需的  
        # arcpy.RefreshActiveView()    
        # arcpy.RefreshTOC()      
# 保存对地图文档(MXD)所做的更改  
mxd.save()    
# 释放与地图文档(MXD)对象关联的资源(尽管Python的垃圾收集器最终会处理这些资源,但显式删除是一个好习惯)  
del mxd

1.2 利用ArcPy 修改多个地图文档布局视图的文本内容遍,历指定文件夹中的所有MXD文件:

# 导入必要的库  
import arcpy  # 导入ArcGIS的Python库,用于自动化地理数据处理  
import os  # 导入Python的os模块,用于与操作系统交互,如文件路径操作等  
# 设置需要遍历的文件夹路径
folder_path = ur"F:\文件夹路径"  # 使用原始字符串,避免反斜杠引起的转义问题  
  
# 遍历文件夹中的所有文件  
for filename in os.listdir(folder_path):  
    # 检查文件是否是MXD文件(ArcGIS地图文档)  
    if filename.endswith(".mxd"):  
        # 构建MXD文件的完整路径  
        mxd_path = os.path.join(folder_path, filename)  
          
        # 打开MXD文件  
        mxd = arcpy.mapping.MapDocument(mxd_path)  
          
        # 遍历MXD中的所有文本元素  
        for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):  
            # 如果文本元素的内容是“制图人”,则修改为“小仙女”  
            if elm.text == "制图人":  
                elm.text = "小仙女"  
                # 刷新活动视图和目录树(注意:这些刷新在这里可能不是必需的,因为只是修改了文本)  
                arcpy.RefreshActiveView()  
                arcpy.RefreshTOC()  
            # 如果文本元素的内容是“制图日期”,则修改为“好日子”  
            if elm.text == "制图日期":  
                elm.text = "好日子"  
                # 刷新活动视图和目录树(同上,可能不是必需的)  
                arcpy.RefreshActiveView()  
                arcpy.RefreshTOC()  
        mxd.save()      # 保存修改后的MXD文件  
        del mxd        # 释放MXD对象占用的资源  
``

**

1.3 利用ArcPy遍历指定文件夹中的所有MXD文件,并在每个MXD文件中查找名为“地类图斑”的图层。如果找到这样的图层,代码会将这些图层的可见性设置为False,即隐藏它们

**

# 导入必要的库  
import arcpy  # 导入ArcGIS的Python库,用于处理地理数据  
import os  # 导入Python的os模块,用于文件路径操作  
  
# 设置需要遍历的文件夹路径  
folder_path = ur"F:\AA测试\04宗地草图"  
  
# 遍历文件夹中的所有文件  
for filename in os.listdir(folder_path):  
    # 检查文件是否以.mxd结尾,即是否是ArcGIS的地图文档文件  
    if filename.endswith(".mxd"):  
        # 构建MXD文件的完整路径  
        mxd_path = os.path.join(folder_path, filename)  
          
        # 打开MXD文件  
        mxd = arcpy.mapping.MapDocument(mxd_path)  
          
        # 在MXD文件中查找名为"地类图斑"的图层  
        lyrs = arcpy.mapping.ListLayers(mxd, "地类图斑")  
          
        # 遍历找到的图层  
        for lyr in lyrs:  
            # 将图层的可见性设置为False,即隐藏图层  
            lyr.visible = False  
          
        # 刷新目录树(TOC)和活动视图(如果这是在ArcMap中运行的脚本,这将有助于立即看到更改)  
        # 注意:如果这是作为独立脚本运行的,这些刷新调用可能不会立即在ArcMap中显示效果  
        arcpy.RefreshTOC()  
        arcpy.RefreshActiveView()  
          
        # 保存对MXD文件所做的更改  
        mxd.save()  
          
        # 释放MXD对象占用的资源  
        del mxd

**

1.4 利用ArcPy遍历修改多个mxd工程文件的一个图层符号(引用一个template.lyr模板符号):

**
注意:请确保将 “C:\path\to\your\folder” 替换为您实际的工作空间路径,并确保 “template.lyr” 文件存在于该文件夹中

import os
import arcpy

# 设置工作空间
workspace = ur"F:\宗地图、宗地草图工程及出图\宗地图工程"

# 遍历文件夹中的所有 MXD 文件
for filename in os.listdir(workspace):
    if filename.endswith(".mxd"):
        mxd_path = os.path.join(workspace, filename)
        
        # 打开 MXD 文件
        mxd = arcpy.mapping.MapDocument(mxd_path)
        
        # 获取名称为 "单元内所有权宗地" 的图层
        for lyr in arcpy.mapping.ListLayers(mxd):
            if lyr.name == "单元内所有权宗地":
                # 创建一个新的符号化图层
                template_layer_path = os.path.join(workspace, "template.lyr")
                
                # 将新的符号化图层应用到原图层
                arcpy.ApplySymbologyFromLayer_management(lyr, template_layer_path)
                
                # 保存 MXD 文件
                mxd.save()
                
        # 关闭 MXD 文件
        del mxd

**

1.5 利用ArcPy遍历批文件夹里的mxd数据框里的XX图层移动到最上层:

**

import os
import arcpy

# 设置工作空间
workspace = ur"F:\01宗地图与宗地草图\01宗地图mxd"

# 遍历文件夹中的所有 MXD 文件
for filename in os.listdir(workspace):
    if filename.endswith(".mxd"):
        mxd_path = os.path.join(workspace, filename)
        
        # 打开 MXD 文件
        mxd = arcpy.mapping.MapDocument(mxd_path)
        
        # 获取数据框
        df = arcpy.mapping.ListDataFrames(mxd)[0]
        
        # 获取'单元内所有权宗地'图层
        layers = arcpy.mapping.ListLayers(mxd, "单元内所有权宗地", df)
        if layers:
            layer = layers[0]
            
            # 从数据框中移除图层
            arcpy.mapping.RemoveLayer(df, layer)
            
            # 将图层添加到第一个位置
            arcpy.mapping.AddLayer(df, layer, "TOP")
        
        # 保存 MXD 文件
        mxd.save()

总结:
1、其实以上代码可以通过chatgpt3.5或者文心一言进行编写,然后通过ArcMap中的python工具进行调试,即使代码运行报错,也可以将报错问题在chatgpt3.5或者文心一言反馈,chatgpt3.5就会根据报错原因进行修改代码;
2、以上代码路径一定要考虑中文编码规则,建议路径不使用中文;
3、以上代码经过项目验证过的,完全可以运行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

30岁一事无成

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值