初始化
This commit is contained in:
249
tools/core/test_script.py
Normal file
249
tools/core/test_script.py
Normal file
@@ -0,0 +1,249 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
测试脚本
|
||||
用于测试ArcGIS Pro图层属性和标注功能
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import traceback
|
||||
import arcpy
|
||||
|
||||
|
||||
def log(message):
|
||||
"""日志输出函数"""
|
||||
print(message)
|
||||
|
||||
|
||||
def test_arcgis_environment():
|
||||
"""测试ArcGIS Pro环境"""
|
||||
log("=== ArcGIS Pro环境信息 ===")
|
||||
log(f"Python版本: {sys.version}")
|
||||
log(f"Python路径: {sys.executable}")
|
||||
log(f"当前工作目录: {os.getcwd()}")
|
||||
log(f"ArcPy版本: {arcpy.GetInstallInfo()['Version']}")
|
||||
log(f"ArcPy产品: {arcpy.GetInstallInfo()['ProductName']}")
|
||||
|
||||
# 当前环境设置
|
||||
log("\n=== ArcGIS环境设置 ===")
|
||||
log(f"工作空间: {arcpy.env.workspace}")
|
||||
log(f"输出坐标系统: {arcpy.env.outputCoordinateSystem}")
|
||||
log(f"覆盖输出: {arcpy.env.overwriteOutput}")
|
||||
|
||||
|
||||
def test_layer_properties(layer_path):
|
||||
"""测试图层属性"""
|
||||
log(f"\n=== 图层属性测试: {layer_path} ===")
|
||||
|
||||
if not arcpy.Exists(layer_path):
|
||||
log(f"错误: 图层不存在 - {layer_path}")
|
||||
return
|
||||
|
||||
try:
|
||||
# 创建图层对象
|
||||
log("尝试创建图层对象...")
|
||||
layer = arcpy.mp.Layer(layer_path)
|
||||
log(f"成功创建图层: {layer.name}")
|
||||
|
||||
# 图层基本属性
|
||||
log("\n图层基本属性:")
|
||||
log(f"名称: {layer.name}")
|
||||
log(f"数据源类型: {type(layer.dataSource).__name__ if hasattr(layer, 'dataSource') else 'N/A'}")
|
||||
log(f"长名称: {layer.longName if hasattr(layer, 'longName') else 'N/A'}")
|
||||
|
||||
# 图层类型
|
||||
log("\n图层类型判断:")
|
||||
log(f"是要素图层: {layer.isFeatureLayer if hasattr(layer, 'isFeatureLayer') else 'N/A'}")
|
||||
log(f"是栅格图层: {layer.isRasterLayer if hasattr(layer, 'isRasterLayer') else 'N/A'}")
|
||||
log(f"是图形图层: {layer.isGroupLayer if hasattr(layer, 'isGroupLayer') else 'N/A'}")
|
||||
|
||||
# 支持的属性
|
||||
log("\n支持的属性:")
|
||||
properties = [
|
||||
'LABELCLASSES', 'SHOWLABELS', 'NAME', 'DATASOURCE', 'DEFINITIONQUERY',
|
||||
'VISIBLE', 'TRANSPARENCY', 'BRIGHTNESS', 'CONTRAST', 'SYMBOLOGY'
|
||||
]
|
||||
|
||||
for prop in properties:
|
||||
try:
|
||||
support = hasattr(layer, prop.lower()) or (hasattr(layer, 'supports') and layer.supports(prop))
|
||||
log(f"{prop}: {'支持' if support else '不支持'}")
|
||||
except Exception as e:
|
||||
log(f"{prop}: 检查失败 - {str(e)}")
|
||||
|
||||
# 尝试获取标注类
|
||||
log("\n标注类测试:")
|
||||
try:
|
||||
if hasattr(layer, 'listLabelClasses'):
|
||||
label_classes = layer.listLabelClasses()
|
||||
log(f"找到 {len(label_classes)} 个标注类")
|
||||
|
||||
# 显示每个标注类的信息
|
||||
for i, lc in enumerate(label_classes):
|
||||
log(f"标注类 #{i+1}: {lc.name if hasattr(lc, 'name') else 'N/A'}")
|
||||
log(f" 表达式: {lc.expression if hasattr(lc, 'expression') else 'N/A'}")
|
||||
log(f" SQL查询: {lc.SQLQuery if hasattr(lc, 'SQLQuery') else 'N/A'}")
|
||||
log(f" 可见: {lc.showClassLabels if hasattr(lc, 'showClassLabels') else 'N/A'}")
|
||||
else:
|
||||
log("图层不支持listLabelClasses方法")
|
||||
|
||||
# 检查标注状态
|
||||
if hasattr(layer, 'showLabels'):
|
||||
log(f"标注显示状态: {layer.showLabels}")
|
||||
else:
|
||||
log("图层没有showLabels属性")
|
||||
except Exception as e:
|
||||
log(f"获取标注类时出错: {str(e)}")
|
||||
|
||||
# 使用arcpy.da.Describe获取详细信息
|
||||
log("\narcpy.da.Describe描述信息:")
|
||||
try:
|
||||
desc = arcpy.da.Describe(layer)
|
||||
for key in desc:
|
||||
# 跳过复杂对象
|
||||
if isinstance(desc[key], (dict, list, tuple)):
|
||||
log(f"{key}: [复杂类型]")
|
||||
else:
|
||||
log(f"{key}: {desc[key]}")
|
||||
except Exception as e:
|
||||
log(f"获取Describe信息时出错: {str(e)}")
|
||||
|
||||
except Exception as e:
|
||||
log(f"测试图层属性时出错: {str(e)}")
|
||||
log(traceback.format_exc())
|
||||
|
||||
|
||||
def test_annotation_conversion(map_path, layer_name, output_folder):
|
||||
"""测试标注转注记功能"""
|
||||
log(f"\n=== 标注转注记测试: {map_path}, 图层: {layer_name} ===")
|
||||
|
||||
if not arcpy.Exists(map_path):
|
||||
log(f"错误: 地图文档不存在 - {map_path}")
|
||||
return
|
||||
|
||||
# 确保输出文件夹存在
|
||||
if not os.path.exists(output_folder):
|
||||
os.makedirs(output_folder)
|
||||
|
||||
try:
|
||||
# 打开地图文档
|
||||
log(f"打开地图文档...")
|
||||
aprx = arcpy.mp.ArcGISProject(map_path)
|
||||
|
||||
# 获取活动地图
|
||||
log(f"获取地图...")
|
||||
maps = aprx.listMaps()
|
||||
if not maps:
|
||||
log("错误: 地图文档中没有地图")
|
||||
return
|
||||
|
||||
target_map = maps[0] # 默认使用第一个地图
|
||||
log(f"使用地图: {target_map.name}")
|
||||
|
||||
# 查找指定图层
|
||||
log(f"查找图层: {layer_name}")
|
||||
layers = target_map.listLayers(layer_name)
|
||||
if not layers:
|
||||
log(f"错误: 找不到图层 {layer_name}")
|
||||
return
|
||||
|
||||
label_layer = layers[0]
|
||||
log(f"找到图层: {label_layer.name}")
|
||||
|
||||
# 测试图层属性
|
||||
test_layer_properties(label_layer)
|
||||
|
||||
# 尝试开启标注
|
||||
try:
|
||||
if hasattr(label_layer, 'showLabels'):
|
||||
log(f"当前标注状态: {label_layer.showLabels}")
|
||||
label_layer.showLabels = True
|
||||
log(f"已开启标注,新状态: {label_layer.showLabels}")
|
||||
except Exception as e:
|
||||
log(f"设置标注状态时出错: {str(e)}")
|
||||
|
||||
# 尝试执行标注转注记
|
||||
log("\n执行标注转注记...")
|
||||
try:
|
||||
anno_name = f"{label_layer.name}_Anno"
|
||||
output_anno = os.path.join(output_folder, anno_name)
|
||||
|
||||
# 检查是否已存在
|
||||
if arcpy.Exists(output_anno):
|
||||
log(f"注记已存在: {output_anno},将尝试删除")
|
||||
arcpy.management.Delete(output_anno)
|
||||
|
||||
# 执行转换
|
||||
log("使用ConvertLabelsToAnnotation...")
|
||||
arcpy.cartography.ConvertLabelsToAnnotation(
|
||||
target_map,
|
||||
[label_layer],
|
||||
output_folder,
|
||||
"FEATURE_LINKED",
|
||||
"STANDARD",
|
||||
None,
|
||||
None,
|
||||
None
|
||||
)
|
||||
log("ConvertLabelsToAnnotation执行成功")
|
||||
|
||||
except Exception as e:
|
||||
log(f"执行标注转注记时出错: {str(e)}")
|
||||
log(traceback.format_exc())
|
||||
|
||||
# 尝试替代方案
|
||||
try:
|
||||
log("\n尝试使用LabelFeatures替代方案...")
|
||||
arcpy.cartography.LabelFeatures(
|
||||
in_features=label_layer,
|
||||
out_geodatabase=output_folder
|
||||
)
|
||||
log("LabelFeatures执行成功")
|
||||
except Exception as e2:
|
||||
log(f"LabelFeatures也失败: {str(e2)}")
|
||||
|
||||
except Exception as e:
|
||||
log(f"测试标注转注记时出错: {str(e)}")
|
||||
log(traceback.format_exc())
|
||||
finally:
|
||||
if 'aprx' in locals():
|
||||
del aprx
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
parser = argparse.ArgumentParser(description='ArcGIS Pro图层和标注功能测试')
|
||||
parser.add_argument('--message', default='测试消息', help='测试消息')
|
||||
parser.add_argument('--count', type=int, default=1, help='重复次数')
|
||||
parser.add_argument('--map', help='地图文档路径(.aprx)')
|
||||
parser.add_argument('--layer', help='图层名称')
|
||||
parser.add_argument('--layer_path', help='图层文件路径(.lyrx)')
|
||||
parser.add_argument('--output', help='输出文件夹')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 输出系统信息
|
||||
test_arcgis_environment()
|
||||
|
||||
# 输出测试消息
|
||||
for i in range(args.count):
|
||||
log(f"\n{i+1}. {args.message}")
|
||||
|
||||
# 如果提供了图层文件路径,测试图层属性
|
||||
if args.layer_path:
|
||||
test_layer_properties(args.layer_path)
|
||||
|
||||
# 如果提供了地图文档、图层名称和输出文件夹,测试标注转注记
|
||||
if args.map and args.layer and args.output:
|
||||
test_annotation_conversion(args.map, args.layer, args.output)
|
||||
|
||||
# 退出前打印完成消息
|
||||
log("\n测试脚本执行完成")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user