init
This commit is contained in:
398
docs/content/41-objbaseattr-shu-xing-suo-yin.md
Normal file
398
docs/content/41-objbaseattr-shu-xing-suo-yin.md
Normal file
@@ -0,0 +1,398 @@
|
||||
ObjBaseAttr 类是 SunvStation 系统中地物对象属性管理的核心组件,提供统一的属性名称注册、索引映射和属性值读写接口。该类通过集中管理所有地物属性的名称与索引映射关系,实现了属性访问的标准化和高效化,支持点、线、面、注记等多种地物类型的属性操作。
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L6-L110)
|
||||
|
||||
## 属性分类体系
|
||||
|
||||
ObjBaseAttr 将地物属性划分为五大类别,每类属性对应不同的功能维度和数据类型。这种分类设计既体现了属性的业务语义,也便于开发者快速定位所需属性。
|
||||
|
||||
### 属性分类概览
|
||||
|
||||
```mermaid
|
||||
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](ObjBaseAttr.py#L38-L44)
|
||||
|
||||
| 属性常量 | 属性名 | 数据类型 | 说明 | 参数支持 |
|
||||
|---------|--------|---------|------|---------|
|
||||
| `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](ObjBaseAttr.py#L46-L70)
|
||||
|
||||
| 属性常量 | 属性名 | 数据类型 | 说明 | 可读写 |
|
||||
|---------|--------|---------|------|-------|
|
||||
| **标识属性** |||||
|
||||
| `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](ObjBaseAttr.py#L72-L85)
|
||||
|
||||
| 属性常量 | 属性名 | 数据类型 | 说明 | 精度 |
|
||||
|---------|--------|---------|------|------|
|
||||
| **面积属性** |||||
|
||||
| `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](ObjBaseAttr.py#L87-L105)
|
||||
|
||||
| 属性常量 | 属性名 | 数据类型 | 说明 | 可读写 |
|
||||
|---------|--------|---------|------|-------|
|
||||
| **字体属性** |||||
|
||||
| `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](ObjBaseAttr.py#L107-L109)
|
||||
|
||||
| 属性常量 | 属性名 | 操作类型 | 说明 |
|
||||
|---------|--------|---------|------|
|
||||
| `reverse` | SSObj_Reverse | 方向反转 | 值为1时执行反转操作 |
|
||||
| `reference` | SSObj_Reference | 引用关系 | 当前未实现 |
|
||||
|
||||
## 核心方法参考
|
||||
|
||||
### 属性索引管理
|
||||
|
||||
ObjBaseAttr 提供三个核心方法用于属性名称与索引的双向映射:
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L111-L178)
|
||||
|
||||
| 方法名 | 功能 | 参数 | 返回值 |
|
||||
|--------|------|------|-------|
|
||||
| `registerObjBaseAttrName(name)` | 注册新属性名到索引表 | name: 属性名(自动去除SSObj_前缀) | 属性索引 |
|
||||
| `get_value_index(field)` | 获取属性名的索引 | field: 属性名(支持SSObj_前缀) | 索引值,未找到返回-1 |
|
||||
| `get_value_index_param(field)` | 解析带参数的属性名 | field: 格式为'属性名(参数)' | (索引, 参数字符串) |
|
||||
|
||||
**命名规范**:属性名在内部存储时自动转换为小写并去除 `SSObj_` 前缀,外部访问时两种形式均可识别。
|
||||
|
||||
### 属性值读写
|
||||
|
||||
#### getGeoValue 方法
|
||||
|
||||
获取单个地物对象的属性值,支持动态参数解析和多类型对象处理。
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L188-L360)
|
||||
|
||||
```python
|
||||
def getGeoValue(map: ScaleMap, geo: GeoBase, field: str) -> str
|
||||
```
|
||||
|
||||
**处理流程**:
|
||||
|
||||
```mermaid
|
||||
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](ObjBaseAttr.py#L362-L624)
|
||||
|
||||
```python
|
||||
def setGeoValue(map: ScaleMap, geoList: GeoBaseList, field: str, value: str)
|
||||
```
|
||||
|
||||
**扩展属性处理**:当属性名以 `[` 开头时,系统将其识别为扩展属性,存储在 MemoData 中。
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L364-L394)
|
||||
|
||||
**颜色值格式支持**:
|
||||
- 颜色号格式:`COLORNO(1)`
|
||||
- RGB格式:`RGB(255,123,224)`
|
||||
- 数值格式:`16777215`(24位颜色值)
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L408-L411)
|
||||
|
||||
## 属性索引值映射表
|
||||
|
||||
为便于直接使用,下表列出了所有属性的实际索引值(基于初始化顺序):
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L13-L36)
|
||||
|
||||
| 索引 | 属性名(无前缀) | 属性常量 |
|
||||
|-----|----------------|---------|
|
||||
| 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`)比直接使用索引值更具可读性和维护性。
|
||||
|
||||
## 使用场景与最佳实践
|
||||
|
||||
### 基础属性访问
|
||||
|
||||
```python
|
||||
# 获取对象面积
|
||||
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](ObjBaseAttr.py#L332-L335)
|
||||
|
||||
### 坐标点操作
|
||||
|
||||
```python
|
||||
# 获取第一个点的X坐标
|
||||
x0 = attr.getGeoValue(map, geo, "SSObj_X(0)")
|
||||
|
||||
# 设置第三个点的Z值为100.0
|
||||
attr.setGeoValue(map, geoList, "SSObj_Z(2)", "100.0")
|
||||
```
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L307-L318)
|
||||
|
||||
### 扩展属性管理
|
||||
|
||||
```python
|
||||
# 设置单个扩展属性
|
||||
attr.setGeoValue(map, geoList, "[自定义属性]", "属性值")
|
||||
|
||||
# 批量设置多个扩展属性
|
||||
attr.setGeoValue(map, geoList, "[属性1,属性2,属性3]", "值1,值2,值3")
|
||||
```
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L364-L394)
|
||||
|
||||
### 注记对象样式控制
|
||||
|
||||
```python
|
||||
# 设置注记字体和大小
|
||||
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.py#L535-L594)
|
||||
|
||||
## 与其他模块的交互
|
||||
|
||||
ObjBaseAttr 作为属性管理中枢,与多个核心模块协同工作:
|
||||
|
||||
```mermaid
|
||||
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](ObjBaseAttr.py#L1-L4)
|
||||
|
||||
**关键依赖**:
|
||||
- `GeoBase`:地物对象基类,提供属性访问方法
|
||||
- `GeoBaseList`:地物对象列表,支持批量操作
|
||||
- `ScaleMap`:地图对象,提供比例尺等上下文信息
|
||||
- `get3DLength`:来自 PySSMath 的三维长度计算函数
|
||||
- `getColorValue`:颜色值解析函数
|
||||
|
||||
Sources: [ObjBaseAttr.py](ObjBaseAttr.py#L336-L340)
|
||||
|
||||
## 参考文档延伸
|
||||
|
||||
要深入了解属性的具体使用场景,可参考以下文档:
|
||||
|
||||
- [获取地物属性值](15-huo-qu-di-wu-shu-xing-zhi):详细说明属性读取的完整流程
|
||||
- [修改地物属性值](16-xiu-gai-di-wu-shu-xing-zhi):批量属性修改的操作指南
|
||||
- [地物基本属性详解](17-di-wu-ji-ben-shu-xing-xiang-jie):属性的业务含义详解
|
||||
- [扩展属性与自定义属性](18-kuo-zhan-shu-xing-yu-zi-ding-yi-shu-xing):MemoData 扩展机制说明
|
||||
- [SSProcessManager 完整 API](40-ssprocessmanager-wan-zheng-api):结合选择集使用属性的示例
|
||||
Reference in New Issue
Block a user