Skip to content
Back to skills

Hmos Map Kit Map Polygon

ASecurity

在地图上绘制多边形覆盖物+支持填充颜色、边框样式、空心洞+仅支持Stage模型+适用于标识封闭区域、行政区域边界场景

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
developmenttypescriptgogitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 22, 2026

npx -y skills add IsKenKenYa/skills --skill hmos-map-kit-map-polygon --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hmos Map Kit Map Polygon?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hmos Map Kit Map Polygon
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/iskenkenya-hmos-map-kit-map-polygon/badge)](https://www.skillsdirectory.com/skills/iskenkenya-hmos-map-kit-map-polygon)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hmos-map-kit-map-polygon
description: 在地图上绘制多边形覆盖物+支持填充颜色、边框样式、空心洞+仅支持Stage模型+适用于标识封闭区域、行政区域边界场景
---

# 地图多边形绘制技能

## 功能描述

在HarmonyOS地图上绘制多边形覆盖物,用于标识小区、学校、商圈等封闭区域范围,以及呈现省、市、区县等行政区域边界。支持自定义填充颜色、边框颜色、边框宽度、拐角样式,支持设置空心洞,支持大地曲线绘制模式。

**核心能力**:
- 绘制多边形覆盖物
- 自定义填充和边框样式
- 设置空心洞
- 支持点击事件
- 支持大地曲线模式

## 使用场景

### 触发词
- "绘制多边形"
- "添加多边形"
- "地图多边形"
- "标识区域范围"
- "行政区域边界"

### 能做
- 在地图上绘制封闭多边形区域
- 设置多边形填充颜色和边框样式
- 在多边形内设置空心洞
- 更新已添加多边形的属性(顶点、颜色、样式等)
- 查询多边形属性(顶点、颜色、样式等)
- 设置多边形点击事件响应

### 绝不做
- 不绘制非封闭区域(少于3个顶点的多边形)
- 不在非Stage模型环境下使用
- 不处理超出纬度范围[-85.2, 85.2]的顶点坐标
- 不绘制顶点坐标异常的多边形

### 补充
- 仅支持Stage模型
- 需要先初始化MapComponent并获取MapComponentController
- 多边形顶点纬度必须在[-85.2, 85.2]范围内
- API起始版本:4.1.0(11),支持元服务API

## 调用规范和规则

### 输入约束
- **顶点数量**:至少3个顶点组成封闭多边形
- **纬度范围**:顶点纬度必须在[-85.2, 85.2]范围内
- **颜色格式**:ARGB格式(如0xff00DE00),异常值按默认值处理
- **边框宽度**:取值范围[0, ∞),单位px,默认值10
- **zIndex范围**:整数,默认值0,异常值按默认值处理

### 执行约束
- **调用模式**:异步Promise调用
- **执行时机**:必须在MapComponent初始化回调中或自定义方法中执行
- **错误处理**:必须捕获Promise异常并处理错误码

### 内容约束
- **禁止生成**:禁止在未初始化地图控制器前调用addPolygon
- **禁止操作**:禁止使用超出纬度范围的顶点坐标
- **禁止依赖**:禁止使用未声明的模块(必须导入@kit.MapKit和@kit.BasicServicesKit)

### 降级约束
- **地图初始化失败**:提示用户检查地图配置参数
- **多边形添加失败**:检查顶点坐标是否合法,检查参数格式是否正确
- **权限不足**:提示用户申请必要权限

## 调用流程和步骤

### 步骤1:准备阶段

**前置校验**:
1. 验证MapComponent是否已初始化完成
2. 验证MapComponentController是否可用
3. 验证顶点坐标数组是否包含至少3个点
4. 验证顶点纬度是否在[-85.2, 85.2]范围内

**参数准备**:
```typescript
import { MapComponent, mapCommon, map } from '@kit.MapKit';
import { AsyncCallback } from '@kit.BasicServicesKit';

let polygonOptions: mapCommon.MapPolygonOptions = {
  points: [
    { longitude: 118.78, latitude: 31.975 },
    { longitude: 118.78, latitude: 31.985 },
    { longitude: 118.79, latitude: 31.985 },
    { longitude: 118.79, latitude: 31.975 }
  ],
  clickable: true,
  fillColor: 0xff00DE00,
  geodesic: false,
  strokeColor: 0xff000000,
  jointType: mapCommon.JointType.DEFAULT,
  strokeWidth: 10,
  visible: true,
  zIndex: 10
};
```

### 步骤2:添加多边形

**示例代码**:
```typescript
async function addMapPolygon(
  mapController: map.MapComponentController,
  options: mapCommon.MapPolygonOptions
): Promise<map.MapPolygon> {
  try {
    const mapPolygon = await mapController.addPolygon(options);
    console.info('MapPolygon added successfully');
    return mapPolygon;
  } catch (error) {
    console.error(`Failed to add mapPolygon, code: ${error.code}, message: ${error.message}`);
    throw error;
  }
}
```

### 步骤3:更新多边形属性

**更新顶点示例**:
```typescript
function updatePolygonPoints(
  mapPolygon: map.MapPolygon,
  newPoints: Array<mapCommon.LatLng>
): void {
  try {
    mapPolygon.setPoints(newPoints);
    console.info('Polygon points updated successfully');
  } catch (error) {
    console.error(`Failed to update points: ${error.message}`);
  }
}
```

**更新颜色示例**:
```typescript
function updatePolygonColors(
  mapPolygon: map.MapPolygon,
  fillColor: number,
  strokeColor: number
): void {
  mapPolygon.setFillColor(fillColor);
  mapPolygon.setStrokeColor(strokeColor);
}
```

### 步骤4:错误处理

```typescript
try {
  let mapPolygon = await this.mapController.addPolygon(polygonOptions);
} catch (error) {
  switch (error.code) {
    case 401:
      console.error('Invalid input parameter: check polygon options format');
      break;
    case 1002601001:
      console.error('The object to be operated does not exist: check mapController state');
      break;
    default:
      console.error(`Unknown error: code ${error.code}, message ${error.message}`);
  }
}
```

### 步骤5:降级处理

```typescript
async function addPolygonWithFallback(
  mapController: map.MapComponentController,
  options: mapCommon.MapPolygonOptions
): Promise<map.MapPolygon | null> {
  try {
    return await mapController.addPolygon(options);
  } catch (error) {
    if (error.code === 401) {
      console.warn('Parameter invalid, using default values');
      const defaultOptions: mapCommon.MapPolygonOptions = {
        points: options.points,
        fillColor: 0x00000000,
        strokeColor: 0xff000000,
        strokeWidth: 10,
        visible: true,
        zIndex: 0
      };
      try {
        return await mapController.addPolygon(defaultOptions);
      } catch (fallbackError) {
        console.error('Fallback failed, cannot add polygon');
        return null;
      }
    }
    console.error('Failed to add polygon');
    return null;
  }
}
```

## 错误码说明

| 错误码 | 说明 | 解决方法 |
|-------|------|---------|
| 401 | Invalid input parameter | 检查polygonOptions参数格式是否正确,顶点数组是否合法 |
| 1002601001 | The object to be operated does not exist | 确认MapComponentController已正确初始化,地图已加载完成 |

**错误码详细信息**:
- **401**:输入参数无效,可能原因:
  - points数组为空或少于3个顶点
  - 顶点纬度超出[-85.2, 85.2]范围
  - 参数类型错误
  
- **1002601001**:操作对象不存在,可能原因:
  - MapComponentController未初始化
  - 地图组件未加载完成
  - 地图控制器已被销毁

## 编译和修复问题

### 依赖声明
```json
{
  "dependencies": {
    "@kit.MapKit": ">=4.1.0(11)",
    "@kit.BasicServicesKit": ">=4.1.0(11)"
  }
}
```

### 环境要求
- **HarmonyOS版本**:>=4.1.0(11)
- **模型约束**:仅支持Stage模型
- **系统能力**:SystemCapability.Map.Core
- **元服务支持**:从版本4.1.0(11)开始支持元服务API

### 常见编译问题

**问题1:导入模块失败**
```
Error: Cannot find module '@kit.MapKit'
```
**解决方法**:确保项目配置正确,HarmonyOS SDK版本>=4.1.0(11),在module.json5中声明依赖

**问题2:MapComponentController未定义**
```
TypeError: Cannot read property 'addPolygon' of undefined
```
**解决方法**:确保在MapComponent初始化回调中执行addPolygon,验证mapController已正确赋值

**问题3:顶点坐标类型错误**
```
Type 'number' is not assignable to type 'LatLng'
```
**解决方法**:确保顶点坐标使用mapCommon.LatLng类型,包含latitude和number属性

## 常见问题与解决方法

### Q1:多边形不显示在地图上
**原因**:可能visible属性设置为false或顶点坐标超出地图可视范围
**解决方法**:
- 检查polygonOptions.visible是否为true
- 检查顶点坐标是否在地图当前可视区域内
- 调用mapController.moveCamera调整地图视角到多边形区域

### Q2:多边形颜色设置无效
**原因**:颜色值格式错误或使用了错误的颜色格式
**解决方法**:
- 使用ARGB格式颜色值(如0xff00DE00)
- 确保颜色值使用number类型
- 不要使用RGB格式(如#00DE00)

### Q3:空心洞渲染异常
**原因**:空心洞坐标贴合多边形边缘
**解决方法**:
- 确保空心洞坐标与多边形边缘保持一定距离
- 验证空心洞坐标数组格式正确
- 避免空心洞顶点与多边形顶点重合

### Q4:点击事件不触发
**原因**:clickable属性未设置为true
**解决方法**:
- 设置polygonOptions.clickable = true
- 使用MapEventManager注册polygon点击事件监听

### Q5:多边形顶点更新后不刷新
**原因**:setPoints方法调用后地图未刷新
**解决方法**:
- 确认setPoints参数格式正确
- 检查新顶点数组是否合法
- 验证地图控制器状态正常

## 输出结果报告

执行完成后输出以下信息:

```json
{
  "status": "success",
  "polygonId": "MapPolygon对象引用",
  "pointsCount": 4,
  "properties": {
    "fillColor": "0xff00DE00",
    "strokeColor": "0xff000000",
    "strokeWidth": 10,
    "visible": true,
    "clickable": true
  },
  "apiUsed": [
    "mapCommon.MapPolygonOptions",
    "map.MapComponentController.addPolygon",
    "map.MapPolygon"
  ],
  "apiVersion": ">=4.1.0(11)"
}
```

## 参考文档

- [API开发指南](references/api-guide.md)
- [API参考 - MapPolygonOptions](references/map-common.md)
- [API参考 - MapComponentController](references/map-map-mapcomponentcontroller.md)
- [API参考 - MapPolygon](references/map-map-mappolygon.md)

## 完整示例代码

- [ArkTS完整示例 - 基本多边形](assets/map_polygon_demo.ets)
- [ArkTS完整示例 - 带空心洞多边形](assets/map_polygon_with_holes_demo.ets)

## 测试用例

### 正向测试用例
- [基本多边形绘制测试](tests/test_positive.ts):测试添加包含4个顶点的矩形多边形,验证多边形成功添加和属性设置正确

### 边界测试用例
- [最小顶点测试](tests/test_boundary.ts):测试添加包含3个顶点的三角形多边形,验证最小顶点数量边界
- [纬度边界测试](tests/test_boundary.ts):测试顶点纬度在[-85.2, 85.2]边界值,验证纬度范围约束

### 异常测试用例
- [无效顶点测试](tests/test_exception.ts):测试顶点少于3个时的错误处理,验证错误码401返回
- [超出纬度范围测试](tests/test_exception.ts):测试顶点纬度超出范围的错误处理,验证异常值处理逻辑
- [地图未初始化测试](tests/test_exception.ts):测试地图控制器未初始化时的错误处理,验证错误码1002601001返回

Files in this skill

  • SUB_SKILL.md10.5 KB
  • assets/map_polygon_demo.ets1.8 KB
  • assets/map_polygon_with_holes_demo.ets2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…