expo-gaode-map 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +11 -18
  2. package/build/ExpoGaodeMap.types.d.ts.map +1 -1
  3. package/build/ExpoGaodeMap.types.js +0 -10
  4. package/build/ExpoGaodeMap.types.js.map +1 -1
  5. package/build/ExpoGaodeMapModule.d.ts.map +1 -1
  6. package/build/ExpoGaodeMapModule.js +0 -10
  7. package/build/ExpoGaodeMapModule.js.map +1 -1
  8. package/build/ExpoGaodeMapView.d.ts +13 -19
  9. package/build/ExpoGaodeMapView.d.ts.map +1 -1
  10. package/build/ExpoGaodeMapView.js +133 -30
  11. package/build/ExpoGaodeMapView.js.map +1 -1
  12. package/build/components/overlays/Circle.d.ts +17 -12
  13. package/build/components/overlays/Circle.d.ts.map +1 -1
  14. package/build/components/overlays/Circle.js +22 -23
  15. package/build/components/overlays/Circle.js.map +1 -1
  16. package/build/components/overlays/Cluster.d.ts +3 -15
  17. package/build/components/overlays/Cluster.d.ts.map +1 -1
  18. package/build/components/overlays/Cluster.js +3 -25
  19. package/build/components/overlays/Cluster.js.map +1 -1
  20. package/build/components/overlays/HeatMap.d.ts +3 -14
  21. package/build/components/overlays/HeatMap.d.ts.map +1 -1
  22. package/build/components/overlays/HeatMap.js +3 -24
  23. package/build/components/overlays/HeatMap.js.map +1 -1
  24. package/build/components/overlays/Marker.d.ts +12 -11
  25. package/build/components/overlays/Marker.d.ts.map +1 -1
  26. package/build/components/overlays/Marker.js +12 -21
  27. package/build/components/overlays/Marker.js.map +1 -1
  28. package/build/components/overlays/MultiPoint.d.ts +3 -14
  29. package/build/components/overlays/MultiPoint.d.ts.map +1 -1
  30. package/build/components/overlays/MultiPoint.js +3 -24
  31. package/build/components/overlays/MultiPoint.js.map +1 -1
  32. package/build/components/overlays/Polygon.d.ts +13 -16
  33. package/build/components/overlays/Polygon.d.ts.map +1 -1
  34. package/build/components/overlays/Polygon.js +13 -26
  35. package/build/components/overlays/Polygon.js.map +1 -1
  36. package/build/components/overlays/Polyline.d.ts +12 -14
  37. package/build/components/overlays/Polyline.d.ts.map +1 -1
  38. package/build/components/overlays/Polyline.js +12 -24
  39. package/build/components/overlays/Polyline.js.map +1 -1
  40. package/build/components/overlays/index.d.ts.map +1 -1
  41. package/build/components/overlays/index.js +0 -10
  42. package/build/components/overlays/index.js.map +1 -1
  43. package/build/index.d.ts.map +1 -1
  44. package/build/index.js +0 -10
  45. package/build/index.js.map +1 -1
  46. package/build/modules/AMapLocation.d.ts +47 -10
  47. package/build/modules/AMapLocation.d.ts.map +1 -1
  48. package/build/modules/AMapLocation.js +48 -20
  49. package/build/modules/AMapLocation.js.map +1 -1
  50. package/build/modules/AMapPermissions.d.ts +3 -1
  51. package/build/modules/AMapPermissions.d.ts.map +1 -1
  52. package/build/modules/AMapPermissions.js +3 -11
  53. package/build/modules/AMapPermissions.js.map +1 -1
  54. package/build/modules/AMapSDK.d.ts +5 -4
  55. package/build/modules/AMapSDK.d.ts.map +1 -1
  56. package/build/modules/AMapSDK.js +5 -14
  57. package/build/modules/AMapSDK.js.map +1 -1
  58. package/build/modules/AMapView.d.ts.map +1 -1
  59. package/build/modules/AMapView.js +0 -8
  60. package/build/modules/AMapView.js.map +1 -1
  61. package/build/types/index.d.ts.map +1 -1
  62. package/build/types/index.js +0 -10
  63. package/build/types/index.js.map +1 -1
  64. package/docs/INITIALIZATION.md +0 -7
  65. package/docs/RELEASE_GUIDE.md +178 -0
  66. package/package.json +1 -1
  67. package/src/ExpoGaodeMap.types.ts +1 -10
  68. package/src/ExpoGaodeMapModule.ts +1 -10
  69. package/src/ExpoGaodeMapView.tsx +139 -37
  70. package/src/components/overlays/Circle.tsx +24 -25
  71. package/src/components/overlays/Cluster.tsx +4 -26
  72. package/src/components/overlays/HeatMap.tsx +4 -25
  73. package/src/components/overlays/Marker.tsx +12 -22
  74. package/src/components/overlays/MultiPoint.tsx +4 -25
  75. package/src/components/overlays/Polygon.tsx +14 -28
  76. package/src/components/overlays/Polyline.tsx +13 -25
  77. package/src/components/overlays/index.ts +0 -11
  78. package/src/index.ts +0 -11
  79. package/src/modules/AMapLocation.ts +56 -20
  80. package/src/modules/AMapPermissions.ts +4 -11
  81. package/src/modules/AMapSDK.ts +7 -14
  82. package/src/modules/AMapView.ts +0 -8
  83. package/src/types/index.ts +1 -10
@@ -0,0 +1,178 @@
1
+ # GitHub Release 创建指南
2
+
3
+ 本指南将帮助您在 GitHub 上为 expo-gaode-map 项目创建新的 release。
4
+
5
+ ## 当前版本信息
6
+
7
+ - **当前版本**: 1.0.1
8
+ - **GitHub 仓库**: https://github.com/TomWq/expo-gaode-map
9
+
10
+ ## 创建 Release 的步骤
11
+
12
+ ### 1. 访问 GitHub 仓库
13
+
14
+ 1. 打开您的 GitHub 仓库:https://github.com/TomWq/expo-gaode-map
15
+ 2. 在仓库主页,点击右侧的 **"Releases"** 链接
16
+ 3. 或者直接访问:https://github.com/TomWq/expo-gaode-map/releases
17
+
18
+ ### 2. 创建新 Release
19
+
20
+ 1. 点击 **"Create a new release"** 按钮
21
+ 2. 填写以下信息:
22
+
23
+ #### 标签版本 (Tag version)
24
+ - 格式:`v1.0.1` (遵循语义化版本规范)
25
+ - 建议使用:`v1.0.1` (对应 package.json 中的版本)
26
+
27
+ #### 发布标题 (Release title)
28
+ - 格式:`v1.0.1 - 功能描述`
29
+ - 示例:`v1.0.1 - 初始稳定版本发布`
30
+
31
+ #### 描述信息 (Describe this release)
32
+ 建议包含以下内容:
33
+
34
+ ```markdown
35
+ ## 🎉 expo-gaode-map v1.0.1 发布
36
+
37
+ ### ✨ 新特性
38
+ - 完整的高德地图 React Native 组件库
39
+ - 基于 Expo Modules 开发
40
+ - 支持 Android 和 iOS 平台
41
+ - 提供地图显示、定位、覆盖物等功能
42
+
43
+ ### 🗺️ 主要功能
44
+ - ✅ 完整的地图功能(多种地图类型、手势控制、相机操作)
45
+ - ✅ 精准定位(连续定位、单次定位、坐标转换)
46
+ - ✅ 丰富的覆盖物(Circle、Marker、Polyline、Polygon)
47
+ - ✅ 完整的 TypeScript 类型定义(零 any 类型)
48
+ - ✅ 模块化架构设计
49
+ - ✅ 同时支持声明式组件和命令式 API
50
+ - ✅ 跨平台支持(Android、iOS)
51
+ - ✅ 支持自定义样式和事件监听
52
+ - ✅ 同时支持 React Native 新旧架构(Paper & Fabric)
53
+
54
+ ### 📦 安装方式
55
+ ```bash
56
+ npm install expo-gaode-map
57
+ ```
58
+
59
+ ### 📚 文档
60
+ - [快速开始](https://github.com/TomWq/expo-gaode-map#快速开始)
61
+ - [API 文档](docs/API.md)
62
+ - [使用示例](docs/EXAMPLES.md)
63
+
64
+ ### 🔗 相关链接
65
+ - [高德地图开放平台](https://lbs.amap.com/)
66
+ - [Expo Modules API](https://docs.expo.dev/modules/overview/)
67
+
68
+ ---
69
+
70
+ **注意**: 使用前请确保已获取高德地图 API Key 并完成原生配置。
71
+ ```
72
+
73
+ ### 3. 附加文件 (可选)
74
+
75
+ 您可以选择附加以下文件:
76
+ - 源代码 zip 文件 (GitHub 会自动生成)
77
+ - 构建产物 (如果有的话)
78
+
79
+ ### 4. 发布设置
80
+
81
+ - **预发布 (Pre-release)**: 如果这是测试版本,勾选此项
82
+ - **最新版本 (Set as latest release)**: 保持勾选
83
+ - **讨论 (Create a discussion for this release)**: 可选
84
+
85
+ ### 5. 发布
86
+
87
+ 点击 **"Publish release"** 按钮完成发布。
88
+
89
+ ## 版本号规范建议
90
+
91
+ 遵循语义化版本规范 (SemVer):
92
+
93
+ - **主版本号 (MAJOR)**: 不兼容的 API 修改
94
+ - **次版本号 (MINOR)**: 向下兼容的功能性新增
95
+ - **修订号 (PATCH)**: 向下兼容的问题修正
96
+
97
+ 示例:
98
+ - `v1.0.0` - 初始稳定版本
99
+ - `v1.0.1` - Bug 修复
100
+ - `v1.1.0` - 新功能添加
101
+ - `v2.0.0` - 重大更新,不兼容旧版本
102
+
103
+ ## 最佳实践
104
+
105
+ ### 1. 发布前检查
106
+ - 确保所有测试通过
107
+ - 更新 CHANGELOG.md (如果存在)
108
+ - 验证文档准确性
109
+
110
+ ### 2. 发布内容
111
+ - 提供清晰的发布说明
112
+ - 包含安装和使用指南
113
+ - 列出已知问题和限制
114
+
115
+ ### 3. 发布后
116
+ - 在 README.md 中更新版本信息
117
+ - 考虑发布到 npm 注册表
118
+ - 通知社区用户
119
+
120
+ ## 自动化发布 (可选)
121
+
122
+ 对于未来的发布,您可以考虑设置 GitHub Actions 来自动化发布流程:
123
+
124
+ ```yaml
125
+ # .github/workflows/release.yml
126
+ name: Release
127
+
128
+ on:
129
+ push:
130
+ tags:
131
+ - 'v*'
132
+
133
+ jobs:
134
+ release:
135
+ runs-on: ubuntu-latest
136
+ steps:
137
+ - uses: actions/checkout@v3
138
+ - uses: actions/setup-node@v3
139
+ with:
140
+ node-version: '18'
141
+ - run: npm ci
142
+ - run: npm run build
143
+ - run: npm test
144
+ - uses: actions/upload-artifact@v3
145
+ with:
146
+ name: dist
147
+ path: build/
148
+ ```
149
+
150
+ ## 常见问题
151
+
152
+ ### Q: 如何更新版本号?
153
+ A: 在 package.json 中更新版本号,然后提交并推送:
154
+ ```bash
155
+ # 更新 package.json 中的版本号
156
+ npm version patch # 修订号 +1
157
+ npm version minor # 次版本号 +1
158
+ npm version major # 主版本号 +1
159
+
160
+ # 提交并推送
161
+ git push origin main --tags
162
+ ```
163
+
164
+ ### Q: 发布后如何撤销?
165
+ A: GitHub 不允许直接删除 release,但可以:
166
+ 1. 编辑 release 标记为预发布
167
+ 2. 创建新的修复版本
168
+ 3. 在描述中说明问题
169
+
170
+ ### Q: 如何管理多个版本?
171
+ A: 使用 Git 标签和分支:
172
+ - `main` 分支:最新稳定版本
173
+ - 功能分支:新功能开发
174
+ - Git 标签:每个发布版本
175
+
176
+ ---
177
+
178
+ **提示**: 首次发布建议先创建预发布版本进行测试,确认无误后再发布正式版本。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-gaode-map",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "一个功能完整的高德地图 React Native 组件库,基于 Expo Modules 开发,提供地图显示、定位、覆盖物等功能。",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,13 +1,4 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 14:03:56
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 14:30:00
6
- * @FilePath : /expo-gaode-map/src/ExpoGaodeMap.types.ts
7
- * @Description : 高德地图 Expo Module 主类型定义文件
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
1
+
11
2
 
12
3
  // 导出所有类型定义
13
4
  export * from './types';
@@ -1,13 +1,4 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 14:03:56
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 14:58:00
6
- * @FilePath : /expo-gaode-map/src/ExpoGaodeMapModule.ts
7
- * @Description :
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
1
+
11
2
  import { NativeModule, requireNativeModule } from 'expo';
12
3
  import type { ExpoGaodeMapModuleEvents } from './ExpoGaodeMap.types';
13
4
 
@@ -1,24 +1,13 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 14:03:56
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-15 01:50:18
6
- * @FilePath : /expo-gaode-map/src/ExpoGaodeMapView.tsx
7
- * @Description : 高德地图视图组件
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
11
-
12
1
  import { requireNativeViewManager } from 'expo-modules-core';
13
2
  import * as React from 'react';
14
3
 
15
- import type {
16
- MapViewProps,
4
+ import type {
5
+ MapViewProps,
17
6
  MapViewRef,
18
7
  NativeMapViewRef,
19
- CameraPosition,
20
- LatLng,
21
- Point,
8
+ CameraPosition,
9
+ LatLng,
10
+ Point,
22
11
  CircleProps,
23
12
  MarkerProps,
24
13
  PolylineProps,
@@ -34,109 +23,222 @@ const NativeView: React.ComponentType<MapViewProps & { ref?: React.Ref<NativeMap
34
23
  export const MapContext = React.createContext<React.RefObject<MapViewRef | null> | null>(null);
35
24
 
36
25
  /**
37
- * 高德地图视图组件
26
+ * 高德地图视图组件,提供地图操作API和覆盖物管理功能
27
+ *
28
+ * @param props - 组件属性
29
+ * @param ref - 外部ref引用,用于访问地图API方法
30
+ * @returns 返回包含地图视图和上下文提供者的React组件
31
+ *
32
+ * @remarks
33
+ * 该组件内部维护两个ref:
34
+ * - nativeRef: 指向原生地图视图的引用
35
+ * - internalRef: 内部使用的API引用,通过MapContext共享
38
36
  *
39
- * @example
40
- * ```tsx
41
- * import { MapView } from 'expo-gaode-map';
37
+ * 提供的主要API功能包括:
38
+ * - 相机控制(移动、缩放、获取当前位置)
39
+ * - 覆盖物管理(添加/删除/更新标记、折线、多边形、圆形等)
42
40
  *
43
- * function MyMap() {
44
- * const mapRef = React.useRef(null);
45
- *
46
- * return (
47
- * <MapView
48
- * ref={mapRef}
49
- * style={{ flex: 1 }}
50
- * initialCameraPosition={{
51
- * target: { latitude: 39.9, longitude: 116.4 },
52
- * zoom: 10,
53
- * }}
54
- * onLoad={() => console.log('地图加载完成')}
55
- * />
56
- * );
57
- * }
58
- * ```
41
+ * 所有API方法都会检查地图是否已初始化,未初始化时抛出错误
59
42
  */
60
43
  const ExpoGaodeMapView = React.forwardRef<MapViewRef, MapViewProps>((props, ref) => {
61
44
  const nativeRef = React.useRef<NativeMapViewRef>(null);
62
45
  const internalRef = React.useRef<MapViewRef | null>(null);
63
46
 
64
47
  const apiRef: MapViewRef = React.useMemo(() => ({
48
+ /**
49
+ * 移动地图相机到指定位置
50
+ * @param position 相机位置参数对象,包含目标经纬度、缩放级别等信息
51
+ * @param duration 动画持续时间(毫秒),默认300毫秒
52
+ * @throws 如果地图视图未初始化则抛出错误
53
+ * @returns Promise<void> 异步操作完成后的Promise
54
+ */
65
55
  moveCamera: async (position: CameraPosition, duration: number = 300) => {
66
56
  if (!nativeRef.current) throw new Error('MapView not initialized');
67
57
  return nativeRef.current.moveCamera(position, duration);
68
58
  },
59
+ /**
60
+ * 将屏幕坐标点转换为地理坐标(经纬度)
61
+ * @param point 屏幕坐标点 {x: number, y: number}
62
+ * @returns 返回Promise,解析为对应的地理坐标 {latitude: number, longitude: number}
63
+ * @throws 如果地图视图未初始化,抛出错误 'MapView not initialized'
64
+ */
69
65
  getLatLng: async (point: Point) => {
70
66
  if (!nativeRef.current) throw new Error('MapView not initialized');
71
67
  return nativeRef.current.getLatLng(point);
72
68
  },
69
+ /**
70
+ * 设置地图中心点坐标
71
+ * @param center 要设置的中心点坐标(LatLng格式)
72
+ * @param animated 是否使用动画效果移动地图(默认为false)
73
+ * @throws 如果地图视图未初始化则抛出错误
74
+ */
73
75
  setCenter: async (center: LatLng, animated: boolean = false) => {
74
76
  if (!nativeRef.current) throw new Error('MapView not initialized');
75
77
  return nativeRef.current.setCenter(center, animated);
76
78
  },
79
+ /**
80
+ * 设置地图的缩放级别
81
+ * @param zoom 目标缩放级别
82
+ * @param animated 是否使用动画过渡效果,默认为false
83
+ * @throws 如果地图视图未初始化,抛出错误
84
+ */
77
85
  setZoom: async (zoom: number, animated: boolean = false) => {
78
86
  if (!nativeRef.current) throw new Error('MapView not initialized');
79
87
  return nativeRef.current.setZoom(zoom, animated);
80
88
  },
89
+ /**
90
+ * 获取当前地图的相机位置(视角中心点、缩放级别、倾斜角度等)
91
+ * @returns 返回一个Promise,解析为当前相机位置的对象
92
+ * @throws 如果地图视图未初始化,则抛出错误
93
+ */
81
94
  getCameraPosition: async () => {
82
95
  if (!nativeRef.current) throw new Error('MapView not initialized');
83
96
  return nativeRef.current.getCameraPosition();
84
97
  },
98
+ /**
99
+ * 在地图上添加圆形覆盖物
100
+ * @param id - 圆形覆盖物的唯一标识符
101
+ * @param props - 圆形覆盖物的属性配置
102
+ * @returns Promise<void> 添加操作的异步结果
103
+ * @throws 如果地图视图未初始化,抛出错误'MapView not initialized'
104
+ */
85
105
  addCircle: async (id: string, props: CircleProps) => {
86
106
  if (!nativeRef.current) throw new Error('MapView not initialized');
87
107
  return nativeRef.current.addCircle(id, props);
88
108
  },
109
+ /**
110
+ * 从地图上移除指定的圆形覆盖物
111
+ * @param id - 要移除的圆形覆盖物的唯一标识符
112
+ * @throws 如果地图视图未初始化,抛出错误
113
+ * @returns Promise<void> 异步操作完成
114
+ */
89
115
  removeCircle: async (id: string) => {
90
116
  if (!nativeRef.current) throw new Error('MapView not initialized');
91
117
  return nativeRef.current.removeCircle(id);
92
118
  },
119
+ /**
120
+ * 更新地图上的圆形覆盖物
121
+ * @param id 要更新的圆形覆盖物的唯一标识符
122
+ * @param props 要更新的圆形属性(部分属性)
123
+ * @throws 如果地图视图未初始化,抛出错误
124
+ * @returns Promise<void> 表示更新操作完成
125
+ */
93
126
  updateCircle: async (id: string, props: Partial<CircleProps>) => {
94
127
  if (!nativeRef.current) throw new Error('MapView not initialized');
95
128
  return nativeRef.current.updateCircle(id, props);
96
129
  },
130
+ /**
131
+ * 添加一个标记点到地图上
132
+ * @param id 标记点的唯一标识符
133
+ * @param props 标记点的配置属性
134
+ * @returns Promise<void> 添加操作完成后的Promise
135
+ * @throws 如果地图视图未初始化则抛出错误
136
+ */
97
137
  addMarker: async (id: string, props: MarkerProps) => {
98
138
  if (!nativeRef.current) throw new Error('MapView not initialized');
99
139
  return nativeRef.current.addMarker(id, props);
100
140
  },
141
+ /**
142
+ * 从地图上移除指定ID的标记点
143
+ * @param id 要移除的标记点ID
144
+ * @throws 如果地图视图未初始化则抛出错误
145
+ * @returns Promise<void> 异步操作完成
146
+ */
101
147
  removeMarker: async (id: string) => {
102
148
  if (!nativeRef.current) throw new Error('MapView not initialized');
103
149
  return nativeRef.current.removeMarker(id);
104
150
  },
151
+ /**
152
+ * 更新地图上指定ID的标记点属性
153
+ * @param id - 要更新的标记点唯一标识符
154
+ * @param props - 需要更新的标记点属性对象(部分属性)
155
+ * @throws 如果地图视图未初始化则抛出错误
156
+ * @returns Promise对象,表示异步更新操作
157
+ */
105
158
  updateMarker: async (id: string, props: Partial<MarkerProps>) => {
106
159
  if (!nativeRef.current) throw new Error('MapView not initialized');
107
160
  return nativeRef.current.updateMarker(id, props);
108
161
  },
162
+ /**
163
+ * 添加折线覆盖物到地图
164
+ * @param id - 折线的唯一标识符
165
+ * @param props - 折线的配置属性
166
+ * @returns Promise<void> 添加操作的异步结果
167
+ * @throws 如果地图视图未初始化则抛出错误
168
+ */
109
169
  addPolyline: async (id: string, props: PolylineProps) => {
110
170
  if (!nativeRef.current) throw new Error('MapView not initialized');
111
171
  return nativeRef.current.addPolyline(id, props);
112
172
  },
173
+ /**
174
+ * 移除地图上的指定折线
175
+ * @param id - 要移除的折线的唯一标识符
176
+ * @throws 如果地图视图未初始化,抛出错误
177
+ * @returns Promise<void>
178
+ */
113
179
  removePolyline: async (id: string) => {
114
180
  if (!nativeRef.current) throw new Error('MapView not initialized');
115
181
  return nativeRef.current.removePolyline(id);
116
182
  },
183
+ /**
184
+ * 更新地图上的折线覆盖物
185
+ *
186
+ * @param id 要更新的折线覆盖物的唯一标识符
187
+ * @param props 要更新的折线属性,包含部分PolylineProps属性
188
+ * @returns Promise<void> 异步操作结果
189
+ * @throws 如果地图视图未初始化,抛出错误
190
+ */
117
191
  updatePolyline: async (id: string, props: Partial<PolylineProps>) => {
118
192
  if (!nativeRef.current) throw new Error('MapView not initialized');
119
193
  return nativeRef.current.updatePolyline(id, props);
120
194
  },
195
+ /**
196
+ * 向地图添加多边形覆盖物
197
+ * @param id - 多边形的唯一标识符
198
+ * @param props - 多边形的配置属性
199
+ * @returns Promise<void> 添加操作的异步结果
200
+ * @throws 如果地图视图未初始化则抛出错误
201
+ */
121
202
  addPolygon: async (id: string, props: PolygonProps) => {
122
203
  if (!nativeRef.current) throw new Error('MapView not initialized');
123
204
  return nativeRef.current.addPolygon(id, props);
124
205
  },
206
+ /**
207
+ * 移除地图上的多边形覆盖物
208
+ * @param id - 要移除的多边形覆盖物的唯一标识符
209
+ * @throws 如果地图视图未初始化,抛出错误 'MapView not initialized'
210
+ * @returns Promise<void> 异步操作完成
211
+ */
125
212
  removePolygon: async (id: string) => {
126
213
  if (!nativeRef.current) throw new Error('MapView not initialized');
127
214
  return nativeRef.current.removePolygon(id);
128
215
  },
216
+ /**
217
+ * 更新多边形覆盖物的属性
218
+ *
219
+ * @param id - 要更新的多边形覆盖物的唯一标识符
220
+ * @param props - 要更新的多边形属性对象,包含需要更新的部分属性
221
+ * @throws {Error} 当地图视图未初始化时抛出错误
222
+ * @returns Promise<void> 异步操作完成后的Promise
223
+ */
129
224
  updatePolygon: async (id: string, props: Partial<PolygonProps>) => {
130
225
  if (!nativeRef.current) throw new Error('MapView not initialized');
131
226
  return nativeRef.current.updatePolygon(id, props);
132
227
  },
133
228
  }), []);
134
229
 
135
- // 设置 internalRef 和外部 ref
230
+ /**
231
+ * 将传入的apiRef赋值给internalRef.current
232
+ * 用于在组件内部保存对地图API实例的引用
233
+ */
136
234
  React.useEffect(() => {
137
235
  internalRef.current = apiRef;
138
236
  }, [apiRef]);
139
237
 
238
+ /**
239
+ * 获取当前地图实例的API引用
240
+ * @returns 返回地图API的引用对象,可用于调用地图相关方法
241
+ */
140
242
  React.useImperativeHandle(ref, () => apiRef, [apiRef]);
141
243
 
142
244
  return (
@@ -1,32 +1,26 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 15:02:00
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 18:43:00
6
- * @FilePath : /expo-gaode-map/src/components/overlays/Circle.tsx
7
- * @Description : 地图圆形组件 - 使用命令式 API
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
11
-
12
1
  import * as React from 'react';
13
2
  import type { CircleProps } from '../../types';
14
3
  import { MapContext } from '../../ExpoGaodeMapView';
15
4
 
16
5
  /**
17
- * 地图圆形组件
6
+ * Circle 组件 - 高德地图圆形覆盖物
7
+ *
8
+ * 该组件用于在高德地图上绘制圆形覆盖物,支持动态更新圆形属性。
9
+ *
10
+ * @param {CircleProps} props - 圆形属性配置
11
+ * @param {LatLng} props.center - 圆形中心点坐标
12
+ * @param {number} props.radius - 圆形半径(米)
13
+ * @param {string} props.fillColor - 填充颜色(十六进制或RGBA)
14
+ * @param {string} props.strokeColor - 边框颜色(十六进制或RGBA)
15
+ * @param {number} props.strokeWidth - 边框宽度(像素)
18
16
  *
19
- * @example
20
- * ```tsx
21
- * <MapView>
22
- * <Circle
23
- * center={{ latitude: 39.9, longitude: 116.4 }}
24
- * radius={1000}
25
- * fillColor={0x440000FF}
26
- * strokeColor={0xFFFF0000}
27
- * />
28
- * </MapView>
29
- * ```
17
+ * @returns {null} 该组件不渲染任何UI元素
18
+ *
19
+ * @remarks
20
+ * 1. 组件挂载时自动添加圆形到地图
21
+ * 2. 组件卸载时自动移除圆形
22
+ * 3. 当中心点、半径、颜色等属性变化时自动更新圆形
23
+ * 4. 使用 React Context 获取地图实例引用
30
24
  */
31
25
  export default function Circle(props: CircleProps) {
32
26
  const mapRef = React.useContext(MapContext);
@@ -58,8 +52,13 @@ export default function Circle(props: CircleProps) {
58
52
  }
59
53
  };
60
54
  }, []);
61
-
62
- // 当 props 变化时更新圆形
55
+
56
+
57
+ /**
58
+ * 当Circle组件的props发生变化时,更新地图上的圆形覆盖物
59
+ * 如果圆形ID和地图引用都存在,则调用地图实例的updateCircle方法更新圆形
60
+ * 更新成功后会打印日志确认
61
+ */
63
62
  React.useEffect(() => {
64
63
  console.log('Circle props 变化,更新圆形');
65
64
  if (circleIdRef.current && mapRef?.current) {
@@ -1,37 +1,15 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 15:02:50
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 18:19:20
6
- * @FilePath : /expo-gaode-map/src/components/overlays/Cluster.tsx
7
- * @Description : 地图点聚合组件
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
11
-
12
1
  import { requireNativeViewManager } from 'expo-modules-core';
13
2
  import * as React from 'react';
14
3
  import type { ClusterProps } from '../../types';
15
4
 
16
5
  const NativeCluster = requireNativeViewManager('ExpoGaodeMap_ClusterView');
17
6
 
7
+
18
8
  /**
19
- * 地图点聚合组件
20
- * 将相近的标记点聚合显示,提高大量标记的展示性能
9
+ * 高德地图点聚合组件
21
10
  *
22
- * @example
23
- * ```tsx
24
- * <MapView>
25
- * <Cluster
26
- * points={[
27
- * { latitude: 39.9, longitude: 116.4, id: '1' },
28
- * { latitude: 39.91, longitude: 116.41, id: '2' },
29
- * ]}
30
- * radius={60}
31
- * minClusterSize={2}
32
- * />
33
- * </MapView>
34
- * ```
11
+ * @param props 点聚合组件的属性配置
12
+ * @returns 渲染原生点聚合组件
35
13
  */
36
14
  export default function Cluster(props: ClusterProps) {
37
15
  return <NativeCluster {...props} />;
@@ -1,36 +1,15 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 15:02:15
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 18:12:07
6
- * @FilePath : /expo-gaode-map/src/components/overlays/HeatMap.tsx
7
- * @Description : 地图热力图组件
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
11
-
12
1
  import { requireNativeViewManager } from 'expo-modules-core';
13
2
  import * as React from 'react';
14
3
  import type { HeatMapProps } from '../../types';
15
4
 
16
5
  const NativeHeatMap = requireNativeViewManager('ExpoGaodeMap_HeatMapView');
17
6
 
7
+
18
8
  /**
19
- * 地图热力图组件
9
+ * 高德地图热力图组件
20
10
  *
21
- * @example
22
- * ```tsx
23
- * <MapView>
24
- * <HeatMap
25
- * data={[
26
- * { latitude: 39.9, longitude: 116.4, intensity: 100 },
27
- * { latitude: 39.91, longitude: 116.41, intensity: 80 },
28
- * ]}
29
- * radius={50}
30
- * opacity={0.6}
31
- * />
32
- * </MapView>
33
- * ```
11
+ * @param props - 热力图配置属性,继承自NativeHeatMap组件的属性
12
+ * @returns 渲染高德地图原生热力图组件
34
13
  */
35
14
  export default function HeatMap(props: HeatMapProps) {
36
15
  return <NativeHeatMap {...props} />;
@@ -1,31 +1,21 @@
1
- /*
2
- * @Author : 尚博信_王强 wangqiang03@sunboxsoft.com
3
- * @Date : 2025-11-13 15:01:10
4
- * @LastEditors : 尚博信_王强 wangqiang03@sunboxsoft.com
5
- * @LastEditTime : 2025-11-13 18:55:00
6
- * @FilePath : /expo-gaode-map/src/components/overlays/Marker.tsx
7
- * @Description : 地图标记组件 - 使用命令式 API
8
- *
9
- * Copyright (c) 2025 by 尚博信_王强, All Rights Reserved.
10
- */
11
-
12
1
  import * as React from 'react';
13
2
  import { MapContext } from '../../ExpoGaodeMapView';
14
3
  import type { MarkerProps } from '../../types';
15
4
 
16
5
  /**
17
- * 地图标记组件
6
+ * Marker 组件 - 用于在地图上显示标记点
7
+ *
8
+ * @param props - 标记点属性配置
9
+ * @param props.position - 标记点坐标 [经度, 纬度]
10
+ * @param props.title - 标记点标题
11
+ * @param props.draggable - 标记点是否可拖动
12
+ *
13
+ * @remarks
14
+ * 组件内部会自动处理标记点的添加、更新和移除
15
+ * 当组件卸载时会自动移除对应的地图标记
18
16
  *
19
- * @example
20
- * ```tsx
21
- * <MapView>
22
- * <Marker
23
- * position={{ latitude: 39.9, longitude: 116.4 }}
24
- * title="标记点"
25
- * onPress={() => console.log('Marker pressed')}
26
- * />
27
- * </MapView>
28
- * ```
17
+ * @note
18
+ * 组件本身不渲染任何DOM元素,仅作为地图标记的逻辑容器
29
19
  */
30
20
  export default function Marker(props: MarkerProps) {
31
21
  const mapRef = React.useContext(MapContext);