免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 549|回复: 7
收起左侧

[技术交流] 以下是一个使用ArcPy生成各比例尺下标准图幅图框,并在图框属性上自动标注标准图幅

[复制链接]

1

主题

265

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
20
发表于 2024-5-23 11:39 | 显示全部楼层 |阅读模式
import arcpy

# 设置工作空间和输出路径
workspace = r"C:\path\to\your\workspace"
output_folder = r"C:\path\to\your\output\folder"

# 定义比例尺列表
scales = [100000, 50000, 25000, 10000, 5000, 2500, 1000]

# 遍历比例尺列表
for scale in scales:
    # 创建空的地图文档
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    df.spatialReference = arcpy.SpatialReference(4326)  # WGS84坐标系

    # 设置图幅大小和行列数
    if scale == 100000:
        width = 6
        height = 4
    elif scale == 50000:
        width = 12
        height = 4
    elif scale == 25000:
        width = 24
        height = 4
    elif scale == 10000:
        width = 60
        height = 4
    elif scale == 5000:
        width = 120
        height = 4
    elif scale == 2500:
        width = 240
        height = 4
    elif scale == 1000:
        width = 600
        height = 4

    # 计算图幅范围
    xmin = -180
    ymin = -90
    xmax = xmin + width * 6
    ymax = ymin + height * 4

    # 创建矩形要素类
    rectangle = arcpy.Polygon(arcpy.Array([arcpy.Point(xmin, ymin),
                                           arcpy.Point(xmax, ymin),
                                           arcpy.Point(xmax, ymax),
                                           arcpy.Point(xmin, ymax)]), df.spatialReference)

    # 创建图幅图层
    feature_class = arcpy.CreateFeatureclass_management(workspace, f"Standard_Scale_{scale}.shp", "POLYGON", spatial_reference=df.spatialReference)
    arcpy.AddField_management(feature_class, "图幅号", "TEXT")

    # 插入图幅要素
    with arcpy.da.InsertCursor(feature_class, ["SHAPE@", "图幅号"]) as cursor:
        for row in range(height):
            for col in range(width):
                # 计算图幅范围
                xmin = -180 + col * 6
                ymin = -90 + row * 4
                xmax = xmin + 6
                ymax = ymin + 4

                # 创建矩形要素
                rectangle = arcpy.Polygon(arcpy.Array([arcpy.Point(xmin, ymin),
                                                       arcpy.Point(xmax, ymin),
                                                       arcpy.Point(xmax, ymax),
                                                       arcpy.Point(xmin, ymax)]), df.spatialReference)

                # 插入图幅要素
                cursor.insertRow((rectangle, f"{col+31}{row+1}"))

    # 保存地图文档
    mxd.saveACopy(f"{output_folder}\\Standard_Scale_{scale}.mxd")

    # 释放资源
    del mxd, df, feature_class, cursor


2

主题

5588

铜板

1

好友

助理工程师

Rank: 5Rank: 5

积分
331
发表于 2024-5-27 16:06 | 显示全部楼层
感谢分享
回复

使用道具 举报

3

主题

888

铜板

1

好友

助理工程师

Rank: 5Rank: 5

积分
160
发表于 2024-5-28 16:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

6

主题

8662

铜板

28

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1127
发表于 2024-5-29 09:30 | 显示全部楼层
看看学习一下
回复 支持 反对

使用道具 举报

14

主题

6775

铜板

14

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1580
发表于 2024-5-30 15:45 | 显示全部楼层
请问怎么使用呢?
回复 支持 反对

使用道具 举报

9

主题

4202

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1262
QQ
发表于 2024-6-18 10:15 | 显示全部楼层
地信网这平台很给力,应多推广
回复 支持 反对

使用道具 举报

29

主题

3万

铜板

68

好友

地信专家组

Rank: 14Rank: 14Rank: 14Rank: 14

积分
5187

精华勋章宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章地信专家组VIP勋章贡献勋章名人堂勋章成就学员勋章

发表于 2024-6-18 10:55 | 显示全部楼层
回复

使用道具 举报

3

主题

1万

铜板

11

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4502
发表于 2024-6-18 12:34 | 显示全部楼层
多谢分享!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表