Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Hmos Map Kit Map Polygon

ASecurity

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

2 stars
0 votes
0 copies
0 views
Added 9/22/2026
developmenttypescriptgogitapi

Works with

cliapi

Security Analysis

A100/100

Scanned 9/22/2026

Install to Claude Code

$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 automatically 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.

Download Zip
Files
SUB_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返回

Attribution

IsKenKenYaIsKenKenYa
View sourceMore from IsKenKenYa →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

284072 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2192 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

9881 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →