You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ArcMap中创建动态叠加网格及多面要素批量生成网格的技术问询

批量为多面要素生成动态尺寸网格(ArcMap 10.7)

别担心,完全可以实现你要的批量动态网格生成需求!针对ArcMap 10.7的环境,我整理了两种实用方案,还会帮你衔接Data Driven Pages的地图集制作:

方案一:用ModelBuilder可视化批量处理(适合非代码用户)

如果不想写代码,用ModelBuilder就能搞定批量迭代和条件判断:

  1. 先给面要素加面积字段
    • 打开Calculate Field工具,给你的面要素类添加一个Area_M2字段(类型选双精度),表达式用!shape.area@squaremeters!,确保面积单位是平方米。
  2. 构建迭代+条件判断的模型
    • 拖入Iterate Feature Selection工具,设置迭代你的面要素类,按每个要素单独处理。
    • 拖入Calculate Value工具,写个简单的判断逻辑:比如def get_grid_size(area): return 100 if area > 1000000 else 50(这里的阈值和尺寸你可以自己改),输入变量选刚才的Area_M2字段。
    • Grid Index Features工具拖进来,设置Extent为迭代出来的单个要素,Grid WidthGrid Height关联Calculate Value的输出结果。
    • 最后用Append工具把每个要素生成的网格合并到一个总要素类里,记得保留原面要素的ID或名称字段,方便后续关联。
  3. 运行模型
    • 确保模型里的临时数据路径设置正确,点击运行就能自动为每个面生成对应尺寸的网格。

方案二:用Python脚本自动化处理(适合批量大、效率要求高的场景)

如果你的面要素数量很多,写个ArcPy脚本会更高效,代码示例如下:

import arcpy
import os

# 配置参数,这里根据你的实际情况修改
workspace = r"C:\YourProject\YourGDB.gdb"
input_polygons = "YourAreaFeatures"
output_grid = "DynamicGrid_Output"
# 定义面积阈值(平方米)和对应网格尺寸(米)
size_rules = [
    (500000, 200),   # 面积>50万㎡,用200米网格
    (100000, 100),   # 面积>10万㎡且<=50万㎡,用100米网格
    (0, 50)          # 面积<=10万㎡,用50米网格
]

# 环境设置
arcpy.env.workspace = workspace
arcpy.env.overwriteOutput = True

# 创建输出网格要素类,保留原要素ID关联字段
spatial_ref = arcpy.Describe(input_polygons).spatialReference
arcpy.CreateFeatureclass_management(workspace, output_grid, "POLYGON", spatial_reference=spatial_ref)
arcpy.AddField_management(output_grid, "Original_OID", "LONG")

# 遍历每个面要素生成网格
with arcpy.da.SearchCursor(input_polygons, ["OID@", "SHAPE@", "SHAPE@AREA"]) as cursor:
    for oid, poly_shape, area in cursor:
        # 匹配对应的网格尺寸
        grid_width = grid_height = size_rules[-1][1]  # 默认用最小尺寸
        for threshold, size in size_rules:
            if area > threshold:
                grid_width = grid_height = size
                break
        
        # 生成单个要素的临时网格
        temp_grid = arcpy.CreateScratchName("temp_grid", workspace=workspace)
        arcpy.GridIndexFeatures_cartography(
            out_feature_class=temp_grid,
            in_features=poly_shape,
            grid_width=grid_width,
            grid_height=grid_height,
            starting_page_number=1
        )
        
        # 关联原要素ID并合并到总输出
        arcpy.AddField_management(temp_grid, "Original_OID", "LONG")
        arcpy.CalculateField_management(temp_grid, "Original_OID", oid)
        arcpy.Append_management(temp_grid, output_grid, "NO_TEST")
        
        # 清理临时数据
        arcpy.Delete_management(temp_grid)

print(f"动态网格生成完成!结果已保存到 {os.path.join(workspace, output_grid)}")

脚本使用注意:

  • 记得替换workspaceinput_polygons等参数为你的实际路径和要素类名
  • 调整size_rules里的阈值和尺寸,匹配你的业务需求
  • 如果原面要素是地理坐标系(比如WGS84),建议先转成投影坐标系(比如UTM),不然面积计算会出错

衔接Data Driven Pages制作地图集

生成网格后,就可以设置Data Driven Pages了:

  1. 打开布局视图,右键点击内容列表里的网格要素类,选择Data Driven Pages > Set Up Data Driven Pages
  2. 选择网格要素类作为索引图层,设置页码字段(可以在生成网格时添加,或者用Grid Index Features自动生成的PageNumber字段)
  3. Overview选项卡,添加你的原面要素类作为概览图层,设置高亮样式(比如用红色边框高亮当前网格对应的区域)
  4. 调整详细地图的范围,确保每个页面刚好覆盖对应的网格
  5. 最后导出地图集即可,支持导出为PDF、图片等格式

小技巧

  • 生成网格时,可以给每个网格添加原面要素的名称字段,这样地图集的标题可以动态显示区域名称
  • 如果需要统一网格的对齐方式,可以在Grid Index Features里设置Grid Origin参数

内容的提问来源于stack exchange,提问作者brian_foley

火山引擎 最新活动