首页 > 其他分享 >ArcMap批量附色操作,并保存mxd

ArcMap批量附色操作,并保存mxd

时间:2024-09-07 16:24:58浏览次数:12  
标签:Layer color arcpy mapping poly ArcMap mxd 附色

ArcMap批量附色操作,并保存mxd

1、对单文件操作

1、保存当前ArcMap中打开的shp文件为mxd文件

打开label_shp_root中的任意一个shp文件夹

image-20240905223954234

保存成mxd文件

image-20240905224127626

2、对当前在arcmap中打开的shp文件应用color配色

color配色是手动设置好一个shp文件夹的配色方案并保存成mxd文件

image-20240905224334797

应用color.mxd的配色方案后

image-20240905224520580

2、批量操作

1、shp文件保存为mxd文件(递归遍历文件夹及其子文件夹)

这里我设置num_folders_to_process = 5,保存了前5个

image-20240905224802435

image-20240905224920335

2、批量应用配色方案(对result文件夹中的mxd应用color配色)

image-20240905225424894

函数保存在ipynb文件。

核心函数

arcpy.mapping.UpdateLayer

image-20240905230345668

label_shp_root文件夹中的全部shp文件进行批量配色结果:

image-20240906124549152

代码

点击查看代码
#### 1、shp文件保存为mxd文件(递归遍历文件夹及其子文件夹)
import os
import arcpy
main_workspace = r"D:/desktop/label_shp_root"
result_folder = r"D:/desktop/label_shp_root_mxd"

if not os.path.exists(result_folder):
    os.makedirs(result_folder)

# 指定要处理的子文件夹数量
num_folders_to_process = 50


folders_processed = 0 # 初始化计数器
subfolders = [os.path.join(main_workspace, d) for d in os.listdir(main_workspace) if os.path.isdir(os.path.join(main_workspace, d))]

for subfolder in subfolders:
    if folders_processed >= num_folders_to_process:
        break  # 如果达到指定数量,停止遍历
    
    # 获取子文件夹名称
    subfolder_name = os.path.basename(subfolder)
    print("[processing subfolder]: ", subfolder_name)  # 打印正在处理的子文件夹名称
    
    # 构建对应的mxd文件路径
    mxd_path = os.path.join(result_folder, "{}.mxd".format(subfolder_name))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]

    # 遍历子文件夹中的所有shp文件
    for filename in os.listdir(subfolder):
        if filename.endswith(".shp"):
            # 构建完整的文件路径
            shp_path = os.path.join(subfolder, filename)
            # 添加shp文件到地图文档
            layer = arcpy.mapping.Layer(shp_path)
            arcpy.mapping.AddLayer(df, layer)  
    # 保存mxd文件
    mxd.saveACopy(mxd_path)

    # 清空所有图层
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

    folders_processed += 1  # 更新计数器

# 提示完成
print("success processed {} subfolders, saved in {}".format(folders_processed, result_folder))


####  2、批量应用配色方案(对result文件夹中的mxd应用color配色)
import os
import arcpy
# PATH
ROOT_PATH = r'D:/desktop/label_shp_root'
RESULT_MXD_PATH = r'D:/desktop/label_shp_root_mxd'
RESULT_MXD_COLORED_PATH = r'D:/desktop/label_shp_root_mxd_colored'  # 新的文件夹路径
MXD_PATH = r"D:/desktop/color.mxd" # color.mxd的路径

if not os.path.exists(RESULT_MXD_COLORED_PATH):
    os.makedirs(RESULT_MXD_COLORED_PATH)

# 获取color图层
color_GT_room_poly = "GT_room_poly"   
color_label_poly = "label_poly"
color_poly = "poly"
color_edges = "edges"
color_vertexes = "vertexes"
color_achor = "achor"
color_GT_bound = "GT_bound"
mxd_path = MXD_PATH


for mxd_file in os.listdir(RESULT_MXD_PATH):


    mxd = arcpy.mapping.MapDocument(mxd_path)
    df = arcpy.mapping.ListDataFrames(mxd)[0]

    origin_GT_room_poly_Layer = arcpy.mapping.ListLayers(mxd, color_GT_room_poly)[0]
    origin_label_poly_Layer = arcpy.mapping.ListLayers(mxd, color_label_poly)[0]
    origin_poly_Layer = arcpy.mapping.ListLayers(mxd, color_poly)[0]
    origin_edges_Layer = arcpy.mapping.ListLayers(mxd, color_edges)[0]
    origin_vertexes_Layer = arcpy.mapping.ListLayers(mxd, color_vertexes)[0]
    origin_achor_Layer = arcpy.mapping.ListLayers(mxd, color_achor)[0]
    origin_GT_bound_Layer = arcpy.mapping.ListLayers(mxd, color_GT_bound)[0]
    print('======get all origin color layers========')

    print(mxd_file)
    if mxd_file.endswith(".mxd"):
        # 构建完整的mxd文件路径
        full_mxd_path = os.path.join(RESULT_MXD_PATH, mxd_file)
        # 打开mxd文件
        mxd2 = arcpy.mapping.MapDocument(full_mxd_path)
        df2 = arcpy.mapping.ListDataFrames(mxd2)[0]

        GT_room_poly_Layer = arcpy.mapping.ListLayers(mxd2, "GT_room_poly", df2)[0]
        label_poly_Layer = arcpy.mapping.ListLayers(mxd2, "label_poly", df2)[0]
        poly_Layer = arcpy.mapping.ListLayers(mxd2, "poly", df2)[0]
        edges_Layer = arcpy.mapping.ListLayers(mxd2, "edges", df2)[0]
        vertexes_Layer = arcpy.mapping.ListLayers(mxd2, "vertexes", df2)[0]

        arcpy.mapping.UpdateLayer(df, GT_room_poly_Layer, origin_GT_room_poly_Layer, True)
        arcpy.mapping.UpdateLayer(df, label_poly_Layer, origin_label_poly_Layer, True)
        arcpy.mapping.UpdateLayer(df, poly_Layer, origin_poly_Layer, True)
        arcpy.mapping.UpdateLayer(df, edges_Layer, origin_edges_Layer, True)
        arcpy.mapping.UpdateLayer(df, vertexes_Layer, origin_vertexes_Layer, True)
        
        # 将修改后的mxd文件保存到新文件夹中
        new_mxd_path = os.path.join(RESULT_MXD_COLORED_PATH, mxd_file)
        print(new_mxd_path)
        mxd2.saveACopy(new_mxd_path)

        # 清空地图文档中的所有图层
        mxd = arcpy.mapping.MapDocument("CURRENT")
        df = arcpy.mapping.ListDataFrames(mxd)[0]
        for lyr in arcpy.mapping.ListLayers(mxd):
            arcpy.mapping.RemoveLayer(df, lyr)

    print('============success process =========================')
    
print('All mxd files in result folder have been updated with color layers and saved to the new folder.')

data数据增强

1、在这里进行数据加载(但是感觉代码入侵了)

image-20240907000105735

或者是直接对label_shp_root进行数据变换,将文件夹大小变为原来6倍

2、但是发现实际上就是对所有点vertices进行同样操作(x,y 变换,也完全可以只x+1这样就是平移操作)

所以实际上只需要在这里进行数据复制5份(然后对vertieces进行简单操作)即可

image-20240907003251665

总感觉怪怪的,好像没有什么实际的操作

运行train.py

到第六个epoch 8%进度时候,内存爆了

image-20240907072832322

使用增强后的数据集

image-20240907125116939

bug。。。

vscode不能用了

image-20240907161258670

pycharm也出问题了

image-20240907161323891

标签:Layer,color,arcpy,mapping,poly,ArcMap,mxd,附色
From: https://www.cnblogs.com/sherioc/p/18401837

相关文章

  • 【Python&GIS】基于Arcpy修改mxd版本
        我们在使用ArcGIS时有时候保存或别人发过来的mxd工程文件会打不开,大概率是因为mxd保存的版本不一样,ArcGIS可以使用高版本打开低版本保存的mxd,反之则不行,所以今天给大家分享一下如何修改mxd版本。原创作者:RS迷途小书童博客地址:https://blog.csdn.net/m0_56729804......
  • ArcMap分别求取矢量要素各区域的面积
      本文介绍基于ArcMap软件,自动批量计算矢量图层中各个要素的面积的方法。  一次,遇到一个问题,需要分别计算ArcMap软件中一个图层的所有面要素的面积。如图,这个图层中包括多个省级行政区矢量面要素,现在需要分别计算其中每一个要素各自的面积。  这里有一个方便的办法。 ......
  • ArcMap连接SQL Server2014与导入数据
    打开SOLServer2014ManagementStudio鼠标右键当前实例【属性】,查看并复制当前实例【名称】。在ArcMap的【目录】窗口中展开【数据库连接】,鼠标双击【添加数据库连接】,弹出【数据库连接】对话框【数据库平台】选择SQLServer,【实例】文本框中输入步骤1中获得的......
  • Arcmap简化面操作.
     简化面操作能移除面要素中的曲线段环.使其在遍历要素JSON时,使用rings,(当有曲线换时,是  curveRings属性) 1.打开“简化面”工具.  (英文搜索:  SimplifyPolygon)     2.执行简化.>注意! 需要设置容差.容差设置精度值越小,越贴近原始......
  • 遥感影像监督分类:ArcMap实现
      本文介绍在ArcMap软件中,基于最大似然法实现栅格遥感影像监督分类的方法。  在文章遥感影像的监督分类与分类后处理:ENVI实现中,我们介绍了基于ENVI软件实现遥感影像监督分类的具体操作方法;本文则介绍基于ArcMap软件实现同样的遥感影像监督分类的方法。  首先,在ArcMap软件上......
  • ArcMap中Cut Polygons Tool工具将一个面图层切割为多个部分
      本文介绍在ArcGIS下属ArcMap软件中,通过“CutPolygonsTool”工具,对一个面要素矢量图层加以手动分割,从而将其划分为指定形状的多个部分的方法。  对于一个面要素矢量文件,有时我们需要对其加以划分,通过手动勾勒新的线条的方式,将其中原本的一个面分割为多个指定的小区域;本文就......
  • ArcMap生成矢量面的外接圆或外接矩形
      本文介绍在ArcMap软件中,基于一个面图层,绘制其中面要素的最小外接矩形、最小外接圆等的方法。  首先,我们来看一下本文需要实现的需求。现有一个面要素图层,其中包含多个面要素,如下图所示。我们希望绘制这个面要素图层的最小外接矩形——既包括这个完整的面要素图层的最小外接......
  • ArcMap属性表出现乱码情况的解决
      本文介绍ArcMap软件打开图层的属性表后,出现字段中汉字乱码情况的解决方法。  有时在使用ArcMap软件时,会发现一些图层的属性表中,原本应该是中文的字段却出现乱码的情况;如下图所示,其中NAME99一栏应该是图层中各个要素对应的汉语名称,但却出现了数字、符号等乱码。  针对这......
  • ArcMap将0作为遥感影像的NoData无效值
      本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法。  在处理栅格图像时,有时会发现如下图所示的情况——我们对某一个区域的栅格数据进行分类着色后,其周边区域(即下图中浅蓝色的区域)原本应该不被着色;但由于这一区域的像元数值不是NoData值,而是0值,导......
  • ArcMap属性表汉字乱码的一种解决方案
      本文介绍ArcMap软件打开图层的属性表后,出现字段中汉字乱码情况的解决方法。  有时在使用ArcMap软件时,会发现一些图层的属性表中,原本应该是中文的字段却出现乱码的情况;如下图所示,其中NAME99一栏应该是图层中各个要素对应的汉语名称,但却出现了数字、符号等乱码。  针对这......