16 KiB
ObjBaseAttr 类是 SunvStation 系统中地物对象属性管理的核心组件,提供统一的属性名称注册、索引映射和属性值读写接口。该类通过集中管理所有地物属性的名称与索引映射关系,实现了属性访问的标准化和高效化,支持点、线、面、注记等多种地物类型的属性操作。
Sources: ObjBaseAttr.py
属性分类体系
ObjBaseAttr 将地物属性划分为五大类别,每类属性对应不同的功能维度和数据类型。这种分类设计既体现了属性的业务语义,也便于开发者快速定位所需属性。
属性分类概览
graph TB
A[ObjBaseAttr 属性体系] --> B[点属性]
A --> C[地物通用属性]
A --> D[几何参量属性]
A --> E[注记属性]
A --> F[操作属性]
B --> B1[SSObj_PointName<br/>坐标点名称]
B --> B2[SSObj_PointCount<br/>坐标点数量]
B --> B3[SSObj_PointType<br/>坐标点类型]
B --> B4[SSObj_X/Y/Z<br/>坐标值]
C --> C1[标识属性<br/>ID, Code, Name]
C --> C2[图形属性<br/>Color, LineType, LineWidth]
C --> C3[变换属性<br/>Angle, ScaleX, ScaleY]
C --> C4[时间属性<br/>CreateTime, ModifyTime]
D --> D1[面积属性<br/>Area, EllipsoidArea]
D --> D2[长度属性<br/>Length, 3DLength]
D --> D3[边界属性<br/>minX, minY, maxX, maxY]
E --> E1[字体属性<br/>FontWidth, FontHeight, FontName]
E --> E2[文本属性<br/>FontString, FontStringCount]
E --> E3[样式属性<br/>Alignment, FontWeight, ItalicAngle]
F --> F1[SSObj_Reverse<br/>方向反转]
F --> F2[SSObj_Reference<br/>引用关系]
点属性索引
点属性用于描述地物对象的坐标点信息,是构成线、面等复杂几何形状的基础元素。此类属性支持通过参数索引访问特定位置的坐标点。
Sources: ObjBaseAttr.py
| 属性常量 | 属性名 | 数据类型 | 说明 | 参数支持 |
|---|---|---|---|---|
pointName |
SSObj_PointName | string | 坐标点名称 | (n) - 第n个点 |
pointCount |
SSObj_PointCount | int | 坐标点数量 | 无 |
pointType |
SSObj_PointType | int | 坐标点类型 | (n) - 第n个点 |
x |
SSObj_X | double | X坐标值 | (n) - 第n个点 |
y |
SSObj_Y | double | Y坐标值 | (n) - 第n个点 |
z |
SSObj_Z | double | Z坐标值 | (n) - 第n个点 |
参数说明:括号内的数字表示坐标点索引(从0开始)。例如 SSObj_X(0) 获取第一个点的X坐标。
地物通用属性索引
通用属性适用于所有地物类型,涵盖了对象标识、图形表现、变换参数和元数据等核心信息。
Sources: ObjBaseAttr.py
| 属性常量 | 属性名 | 数据类型 | 说明 | 可读写 |
|---|---|---|---|---|
| 标识属性 | ||||
id |
SSObj_ID | int | 对象唯一标识 | 只读 |
groupID |
SSObj_GroupID | int | 分组标识 | 可写 |
code |
SSObj_Code | int | 地物编码 | 只读 |
byname |
SSObj_Byname | string | 地物别名 | 可写 |
name |
SSObj_Name | string | 地物名称 | 可写 |
type |
SSObj_Type | string | 对象类型(POINT/LINE/AREA/NOTE) | 只读 |
| 图形属性 | ||||
color |
SSObj_Color | int | 颜色值(支持RGB/COLORNO格式) | 可写 |
lineType |
SSObj_LineType | int | 线型 | 可写 |
lineWidth |
SSObj_LineWidth | int | 线宽 | 可写 |
layerName |
SSObj_LayerName | string | 图层名称 | 只读 |
| 变换属性 | ||||
angle |
SSObj_Angle | double | 旋转角度(度) | 可写 |
scaleX |
SSObj_ScaleX | double | X方向缩放比例 | 可写 |
scaleY |
SSObj_ScaleY | double | Y方向缩放比例 | 可写 |
scaleXY |
SSObj_ScaleXY | double | 统一缩放比例 | 可写 |
| 元数据属性 | ||||
status |
SSObj_Status | int | 对象状态 | 可写 |
dataMark |
SSObj_DataMark | string | 数据标记 | 可写 |
relationID |
SSObj_RelationID | string | 关联标识 | 可写 |
createTime |
SSObj_CreateTime | string | 创建时间(YYYY-MM-DD HH:MM:SS) | 可写 |
modifyTime |
SSObj_ModifyTime | string | 修改时间(YYYY-MM-DD HH:MM:SS) | 可写 |
| 扩展属性 | ||||
hatchStyle |
SSObj_HatchStyle | int | 填充样式 | 可写 |
hatchDensityScale |
SSObj_HatchDensityScale | double | 填充密度比例 | 可写 |
lShapeOffset |
SSObj_LShapeOffset | int | L型偏移 | 可写 |
memoData |
SSObj_MemoData | string | 备注数据 | 可写 |
几何参量属性索引
几何参量属性提供对地物对象空间特征的定量描述,包括面积、长度、边界范围等计算结果。
Sources: ObjBaseAttr.py
| 属性常量 | 属性名 | 数据类型 | 说明 | 精度 |
|---|---|---|---|---|
| 面积属性 | ||||
area |
SSObj_Area | double | 对象面积 | 6位小数 |
ellipsoidArea1 |
SSObj_EllipsoidArea1 | double | 椭球面积1 | - |
ellipsoidArea2 |
SSObj_EllipsoidArea2 | double | 椭球面积2 | - |
| 长度属性 | ||||
length |
SSObj_Length | double | 对象周长/长度 | 6位小数 |
length3D |
SSObj_3DLength | double | 三维长度 | 6位小数 |
| 边界属性 | ||||
minX |
SSObj_minX | double | 最小X坐标 | 6位小数 |
minY |
SSObj_minY | double | 最小Y坐标 | 6位小数 |
maxX |
SSObj_maxX | double | 最大X坐标 | 6位小数 |
maxY |
SSObj_maxY | double | 最大Y坐标 | 6位小数 |
| 标签属性 | ||||
drawAreaLabelStatus |
SSObj_DrawAreaLabelStatus | string | 区域标签状态 | - |
areaLabelX |
SSObj_AreaLabelX | double | 标签X坐标 | - |
areaLabelY |
SSObj_AreaLabelY | double | 标签Y坐标 | - |
注记属性索引
注记属性专用于注记对象(e_Note_Obj),控制字体、文本内容、对齐方式、角度等显示效果。
Sources: ObjBaseAttr.py
| 属性常量 | 属性名 | 数据类型 | 说明 | 可读写 |
|---|---|---|---|---|
| 字体属性 | ||||
fontName |
SSObj_FontName | string | 字体名称 | 可写 |
fontWidth |
SSObj_FontWidth | double | 字体宽度 | 可写 |
fontHeight |
SSObj_FontHeight | double | 字体高度 | 可写 |
fontClass |
SSObj_FontClass | string | 注记分类 | 可写 |
| 文本属性 | ||||
fontString |
SSObj_FontString | string | 注记文本内容 | 可写 |
fontStringCount |
SSObj_FontStringCount | int | 字符串长度 | 只读 |
fontRealHeight |
SSObj_FontRealHeight | double | 实际显示高度 | 只读 |
fontRealLength |
SSObj_FontRealLength | double | 实际显示长度 | 只读 |
| 对齐与定位 | ||||
fontAlignment |
SSObj_FontAlignment | int | 对齐方式 | 可写 |
fontPosType |
SSObj_FontPosType | int | 定位类型 | 可写 |
fontDirection |
SSObj_FontDirection | int | 文字方向 | 可写 |
| 角度属性 | ||||
fontWordAngle |
SSObj_FontWordAngle | double | 单词旋转角度 | 可写 |
fontStringAngle |
SSObj_FontStringAngle | double | 字符串旋转角度 | 可写 |
fontItalicAngle |
SSObj_FontItalicAngle | double | 斜体角度 | 可写 |
fontDownAngle |
SSObj_FontDownAngle | double | 下划线角度 | 可写 |
| 样式属性 | ||||
fontWeight |
SSObj_FontWeight | int | 字体粗细 | 可写 |
fontUnderLine |
SSObj_FontUnderLine | int | 下划线标志 | 可写 |
fontInterval |
SSObj_FontInterval | double | 字符间距 | 可写 |
操作属性索引
操作属性用于触发特定的地物处理操作,而非存储常规属性值。
Sources: ObjBaseAttr.py
| 属性常量 | 属性名 | 操作类型 | 说明 |
|---|---|---|---|
reverse |
SSObj_Reverse | 方向反转 | 值为1时执行反转操作 |
reference |
SSObj_Reference | 引用关系 | 当前未实现 |
核心方法参考
属性索引管理
ObjBaseAttr 提供三个核心方法用于属性名称与索引的双向映射:
Sources: ObjBaseAttr.py
| 方法名 | 功能 | 参数 | 返回值 |
|---|---|---|---|
registerObjBaseAttrName(name) |
注册新属性名到索引表 | name: 属性名(自动去除SSObj_前缀) | 属性索引 |
get_value_index(field) |
获取属性名的索引 | field: 属性名(支持SSObj_前缀) | 索引值,未找到返回-1 |
get_value_index_param(field) |
解析带参数的属性名 | field: 格式为'属性名(参数)' | (索引, 参数字符串) |
命名规范:属性名在内部存储时自动转换为小写并去除 SSObj_ 前缀,外部访问时两种形式均可识别。
属性值读写
getGeoValue 方法
获取单个地物对象的属性值,支持动态参数解析和多类型对象处理。
Sources: ObjBaseAttr.py
def getGeoValue(map: ScaleMap, geo: GeoBase, field: str) -> str
处理流程:
flowchart TD
A[调用 getGeoValue] --> B[解析属性名和参数]
B --> C{属性索引是否存在?}
C -->|否| D[返回空字符串]
C -->|是| E{对象类型?}
E -->|注记对象| F[处理注记专用属性]
E -->|通用对象| G[处理公共基本属性]
F --> H{有值返回?}
G --> H
H -->|是| I[返回属性值]
H -->|否| J[处理坐标点属性]
J --> K{有值返回?}
K -->|是| I
K -->|否| L[处理几何量属性]
L --> I
参数支持示例:
SSObj_X(0)→ 获取第一个点的X坐标SSObj_PointName(2)→ 获取第三个点的名称SSObj_Area→ 获取对象面积
setGeoValue 方法
批量设置多个地物对象的属性值,支持扩展属性和基本属性的统一处理接口。
Sources: ObjBaseAttr.py
def setGeoValue(map: ScaleMap, geoList: GeoBaseList, field: str, value: str)
扩展属性处理:当属性名以 [ 开头时,系统将其识别为扩展属性,存储在 MemoData 中。
Sources: ObjBaseAttr.py
颜色值格式支持:
- 颜色号格式:
COLORNO(1) - RGB格式:
RGB(255,123,224) - 数值格式:
16777215(24位颜色值)
Sources: ObjBaseAttr.py
属性索引值映射表
为便于直接使用,下表列出了所有属性的实际索引值(基于初始化顺序):
Sources: ObjBaseAttr.py
| 索引 | 属性名(无前缀) | 属性常量 |
|---|---|---|
| 0 | angle | self.angle |
| 1 | area | self.area |
| 2 | arealabelx | self.areaLabelX |
| 3 | arealabely | self.areaLabelY |
| 4 | byname | self.byname |
| 5 | code | self.code |
| 6 | color | self.color |
| 7 | createdata | self.createTime |
| 8 | datamark | self.dataMark |
| 9 | drawarealabelstatus | self.drawAreaLabelStatus |
| 10 | ellipsoidarea1 | self.ellipsoidArea1 |
| 11 | ellipsoidarea2 | self.ellipsoidArea2 |
| 12 | fontalignment | self.fontAlignment |
| 13 | fontclass | self.fontClass |
| 14 | fontdownangle | self.fontDownAngle |
| 15 | fontheight | self.fontHeight |
| 16 | fontitalicangle | self.fontItalicAngle |
| 17 | fontinterval | self.fontInterval |
| 18 | fontname | self.fontName |
| 19 | fontpos | self.fontPosType |
| 20 | fontrealheight | self.fontRealHeight |
| 21 | fontreallength | self.fontRealLength |
| 22 | fontstring | self.fontString |
| 23 | fontstringangle | self.fontStringAngle |
| 24 | fontstringcount | self.fontStringCount |
| 25 | fontunderline | self.fontUnderLine |
| 26 | fontwidth | self.fontWidth |
| 27 | fontwordangle | self.fontWordAngle |
| 28 | groupid | self.groupID |
| 29 | hatchdensityscale | self.hatchDensityScale |
| 30 | hatchstyle | self.hatchStyle |
| 31 | id | self.id |
| 32 | lshapeoffset | self.lShapeOffset |
| 33 | length | self.length |
| 34 | length3d | self.length3D |
| 35 | layername | self.layerName |
| 36 | linetype | self.lineType |
| 37 | linewidth | self.lineWidth |
| 38 | max | self.maxX |
| 39 | maxy | self.maxY |
| 40 | memodata | self.memoData |
| 41 | minx | self.minX |
| 42 | miny | self.minY |
| 43 | modifydata | self.modifyTime |
| 44 | name | self.name |
| 45 | pointcount | self.pointCount |
| 46 | pointname | self.pointName |
| 47 | pointtype | self.pointType |
| 48 | reference | self.reference |
| 49 | relationid | self.relationID |
| 50 | reverse | self.reverse |
| 51 | scale | self.scaleX |
| 52 | scalex | self.scaleX |
| 53 | scaley | self.scaleY |
| 54 | scalexy | self.scaleXY |
| 55 | status | self.status |
| 56 | type | self.type |
| 57 | x | self.x |
| 58 | y | self.y |
| 59 | z | self.z |
注意:索引值按属性名字母顺序排序,通过 valueNames.sort() 维护。使用属性常量(如 attr.area)比直接使用索引值更具可读性和维护性。
使用场景与最佳实践
基础属性访问
# 获取对象面积
area_value = attr.getGeoValue(map, geo, "SSObj_Area")
# 修改对象颜色(支持多种格式)
attr.setGeoValue(map, geoList, "SSObj_Color", "RGB(255,0,0)")
attr.setGeoValue(map, geoList, "SSObj_Color", "16711680") # 红色
Sources: ObjBaseAttr.py
坐标点操作
# 获取第一个点的X坐标
x0 = attr.getGeoValue(map, geo, "SSObj_X(0)")
# 设置第三个点的Z值为100.0
attr.setGeoValue(map, geoList, "SSObj_Z(2)", "100.0")
Sources: ObjBaseAttr.py
扩展属性管理
# 设置单个扩展属性
attr.setGeoValue(map, geoList, "[自定义属性]", "属性值")
# 批量设置多个扩展属性
attr.setGeoValue(map, geoList, "[属性1,属性2,属性3]", "值1,值2,值3")
Sources: ObjBaseAttr.py
注记对象样式控制
# 设置注记字体和大小
attr.setGeoValue(map, geoList, "SSObj_FontName", "宋体")
attr.setGeoValue(map, geoList, "SSObj_FontHeight", "12.5")
# 设置注记旋转角度
attr.setGeoValue(map, geoList, "SSObj_FontStringAngle", "30.0")
Sources: ObjBaseAttr.py
与其他模块的交互
ObjBaseAttr 作为属性管理中枢,与多个核心模块协同工作:
graph LR
A[ObjBaseAttr] --> B[PySSCore<br/>GeoBase/GeoBaseList]
A --> C[PySSMath<br/>几何计算函数]
A --> D[PySSMap<br/>ScaleMap]
B --> E[提供地物对象]
C --> F[3D长度计算]
D --> G[地图比例尺]
A --> H[SSProcessManager]
H --> I[选择集管理]
I --> A[属性读写]
Sources: ObjBaseAttr.py
关键依赖:
GeoBase:地物对象基类,提供属性访问方法GeoBaseList:地物对象列表,支持批量操作ScaleMap:地图对象,提供比例尺等上下文信息get3DLength:来自 PySSMath 的三维长度计算函数getColorValue:颜色值解析函数
Sources: ObjBaseAttr.py
参考文档延伸
要深入了解属性的具体使用场景,可参考以下文档:
- 获取地物属性值:详细说明属性读取的完整流程
- 修改地物属性值:批量属性修改的操作指南
- 地物基本属性详解:属性的业务含义详解
- 扩展属性与自定义属性:MemoData 扩展机制说明
- SSProcessManager 完整 API:结合选择集使用属性的示例