expo-gaode-map 2.0.0-alpha.6 → 2.0.0-alpha.7
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.
- package/DEPLOY_DOCS.md +209 -0
- package/PUBLISHING.md +173 -155
- package/RELEASE_CHECKLIST.md +146 -0
- package/app.plugin.js +11 -0
- package/ios/modules/LocationManager.swift +4 -3
- package/package.json +8 -5
- package/plugin/README.md +52 -0
- package/plugin/build/withGaodeMap.d.ts +20 -0
- package/plugin/build/withGaodeMap.js +147 -0
- package/plugin/tsconfig.tsbuildinfo +1 -0
- package/docs/API.en.md +0 -408
- package/docs/API.md +0 -494
- package/docs/ARCHITECTURE.en.md +0 -423
- package/docs/ARCHITECTURE.md +0 -423
- package/docs/EXAMPLES.en.md +0 -651
- package/docs/EXAMPLES.md +0 -922
- package/docs/INITIALIZATION.en.md +0 -346
- package/docs/INITIALIZATION.md +0 -335
- package/docs/MIGRATION.md +0 -423
- package/docs/RELEASE_GUIDE.md +0 -178
package/docs/API.md
DELETED
|
@@ -1,494 +0,0 @@
|
|
|
1
|
-
# API 文档
|
|
2
|
-
|
|
3
|
-
[English](./API.en.md) | 简体中文
|
|
4
|
-
|
|
5
|
-
完整的 API 参考文档。
|
|
6
|
-
|
|
7
|
-
> ⚠️ **权限和隐私合规警告**
|
|
8
|
-
>
|
|
9
|
-
> 使用地图和定位功能前,请确保:
|
|
10
|
-
> 1. ✅ 已在原生项目中配置必需的权限声明
|
|
11
|
-
> 2. ✅ 在运行时请求用户授权
|
|
12
|
-
> 3. ✅ 遵守《个人信息保护法》等隐私法规
|
|
13
|
-
> 4. ✅ 配置高德 SDK 隐私合规接口
|
|
14
|
-
>
|
|
15
|
-
> 详细配置请参考 [README.md](../README.md#权限配置)
|
|
16
|
-
|
|
17
|
-
## 目录
|
|
18
|
-
|
|
19
|
-
- [MapView Props](#mapview-props)
|
|
20
|
-
- [MapView 方法](#mapview-方法)
|
|
21
|
-
- [定位 API](#定位-api)
|
|
22
|
-
- [类型定义](#类型定义)
|
|
23
|
-
|
|
24
|
-
## MapView Props
|
|
25
|
-
|
|
26
|
-
### 基础配置
|
|
27
|
-
|
|
28
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
29
|
-
|------|------|--------|------|
|
|
30
|
-
| `mapType` | `MapType` | `0` | 地图类型(0: 标准, 1: 卫星, 2: 夜间, 3: 导航, 4: 公交) |
|
|
31
|
-
| `initialCameraPosition` | `CameraPosition` | - | 初始相机位置 |
|
|
32
|
-
| `style` | `ViewStyle` | - | 组件样式 |
|
|
33
|
-
|
|
34
|
-
### 定位相关
|
|
35
|
-
|
|
36
|
-
> ⚠️ **权限要求**:使用定位功能需要用户授权
|
|
37
|
-
> - Android: `ACCESS_FINE_LOCATION` + `ACCESS_COARSE_LOCATION`
|
|
38
|
-
> - iOS: `NSLocationWhenInUseUsageDescription` (Info.plist)
|
|
39
|
-
|
|
40
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
41
|
-
|------|------|--------|------|
|
|
42
|
-
| `myLocationEnabled` | `boolean` | `false` | 是否显示定位点 |
|
|
43
|
-
| `followUserLocation` | `boolean` | `false` | 是否跟随用户位置 |
|
|
44
|
-
| `userLocationRepresentation` | `object` | - | 定位蓝点样式配置 |
|
|
45
|
-
|
|
46
|
-
#### userLocationRepresentation 配置
|
|
47
|
-
|
|
48
|
-
| 属性 | 类型 | 平台 | 默认值 | 说明 |
|
|
49
|
-
|------|------|------|--------|------|
|
|
50
|
-
| `showsAccuracyRing` | `boolean` | 全平台 | `true` | 是否显示精度圈 |
|
|
51
|
-
| `fillColor` | `string \| number` | 全平台 | - | 精度圈填充颜色 |
|
|
52
|
-
| `strokeColor` | `string \| number` | 全平台 | - | 精度圈边线颜色 |
|
|
53
|
-
| `lineWidth` | `number` | 全平台 | `0` | 精度圈边线宽度 |
|
|
54
|
-
| `image` | `string` | 全平台 | - | 自定义定位图标 |
|
|
55
|
-
| `imageWidth` | `number` | 全平台 | - | 图标宽度(dp/pt) |
|
|
56
|
-
| `imageHeight` | `number` | 全平台 | - | 图标高度(dp/pt) |
|
|
57
|
-
| `showsHeadingIndicator` | `boolean` | 仅 iOS | `true` | 是否显示方向指示 |
|
|
58
|
-
| `enablePulseAnimation` | `boolean` | 仅 iOS | `true` | 蓝点律动效果 |
|
|
59
|
-
| `locationDotBgColor` | `string \| number` | 仅 iOS | `'white'` | 定位点背景色 |
|
|
60
|
-
| `locationDotFillColor` | `string \| number` | 仅 iOS | `'blue'` | 定位点颜色 |
|
|
61
|
-
|
|
62
|
-
### 控件显示
|
|
63
|
-
|
|
64
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
65
|
-
|------|------|--------|------|
|
|
66
|
-
| `zoomControlsEnabled` | `boolean` | `true` | 是否显示缩放控件(Android) |
|
|
67
|
-
| `compassEnabled` | `boolean` | `true` | 是否显示指南针 |
|
|
68
|
-
| `scaleControlsEnabled` | `boolean` | `true` | 是否显示比例尺 |
|
|
69
|
-
|
|
70
|
-
### 手势控制
|
|
71
|
-
|
|
72
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
73
|
-
|------|------|--------|------|
|
|
74
|
-
| `zoomGesturesEnabled` | `boolean` | `true` | 是否启用缩放手势 |
|
|
75
|
-
| `scrollGesturesEnabled` | `boolean` | `true` | 是否启用滑动手势 |
|
|
76
|
-
| `rotateGesturesEnabled` | `boolean` | `true` | 是否启用旋转手势 |
|
|
77
|
-
| `tiltGesturesEnabled` | `boolean` | `true` | 是否启用倾斜手势 |
|
|
78
|
-
|
|
79
|
-
### 缩放控制
|
|
80
|
-
|
|
81
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
82
|
-
|------|------|--------|------|
|
|
83
|
-
| `maxZoom` | `number` | `20` | 最大缩放级别 (3-20) |
|
|
84
|
-
| `minZoom` | `number` | `3` | 最小缩放级别 (3-20) |
|
|
85
|
-
|
|
86
|
-
### 图层显示
|
|
87
|
-
|
|
88
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
89
|
-
|------|------|--------|------|
|
|
90
|
-
| `trafficEnabled` | `boolean` | `false` | 是否显示路况信息 |
|
|
91
|
-
| `buildingsEnabled` | `boolean` | `true` | 是否显示3D建筑 |
|
|
92
|
-
| `indoorViewEnabled` | `boolean` | `false` | 是否显示室内地图 |
|
|
93
|
-
|
|
94
|
-
### 事件回调
|
|
95
|
-
|
|
96
|
-
| 事件 | 参数 | 说明 |
|
|
97
|
-
|------|------|------|
|
|
98
|
-
| `onMapPress` | `(event: NativeSyntheticEvent<LatLng>) => void` | 点击地图事件 |
|
|
99
|
-
| `onMapLongPress` | `(event: NativeSyntheticEvent<LatLng>) => void` | 长按地图事件 |
|
|
100
|
-
| `onLoad` | `(event: NativeSyntheticEvent<{}>) => void` | 地图加载完成事件 |
|
|
101
|
-
|
|
102
|
-
## MapView 方法
|
|
103
|
-
|
|
104
|
-
通过 Ref 调用:
|
|
105
|
-
|
|
106
|
-
```tsx
|
|
107
|
-
interface MapViewRef {
|
|
108
|
-
// 相机控制
|
|
109
|
-
moveCamera(position: CameraPosition, duration?: number): Promise<void>;
|
|
110
|
-
setCenter(center: LatLng, animated?: boolean): Promise<void>;
|
|
111
|
-
setZoom(zoom: number, animated?: boolean): Promise<void>;
|
|
112
|
-
getCameraPosition(): Promise<CameraPosition>;
|
|
113
|
-
getLatLng(point: Point): Promise<LatLng>;
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## 定位 API
|
|
119
|
-
|
|
120
|
-
> ⚠️ **权限要求**:所有定位 API 都需要定位权限
|
|
121
|
-
>
|
|
122
|
-
> 使用前请先调用 `ExpoGaodeMapModule.checkLocationPermission()` 和 `ExpoGaodeMapModule.requestLocationPermission()`
|
|
123
|
-
>
|
|
124
|
-
> 详细说明: [INITIALIZATION.md](./INITIALIZATION.md)
|
|
125
|
-
|
|
126
|
-
### 定位控制
|
|
127
|
-
|
|
128
|
-
所有定位 API 通过 `ExpoGaodeMapModule` 调用:
|
|
129
|
-
|
|
130
|
-
```tsx
|
|
131
|
-
import { ExpoGaodeMapModule } from 'expo-gaode-map';
|
|
132
|
-
|
|
133
|
-
// 初始化 SDK
|
|
134
|
-
ExpoGaodeMapModule.initSDK({
|
|
135
|
-
androidKey: 'your-android-api-key',
|
|
136
|
-
iosKey: 'your-ios-api-key',
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
// 开始连续定位
|
|
140
|
-
ExpoGaodeMapModule.start();
|
|
141
|
-
|
|
142
|
-
// 停止定位
|
|
143
|
-
ExpoGaodeMapModule.stop();
|
|
144
|
-
|
|
145
|
-
// 检查是否正在定位
|
|
146
|
-
const isStarted = await ExpoGaodeMapModule.isStarted();
|
|
147
|
-
|
|
148
|
-
// 获取当前位置
|
|
149
|
-
const location = await ExpoGaodeMapModule.getCurrentLocation();
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
| 方法 | 参数 | 返回值 | 说明 |
|
|
153
|
-
|------|------|--------|------|
|
|
154
|
-
| `ExpoGaodeMapModule.initSDK` | `{androidKey, iosKey}` | `void` | 初始化 SDK |
|
|
155
|
-
| `ExpoGaodeMapModule.start` | - | `void` | 开始连续定位 |
|
|
156
|
-
| `ExpoGaodeMapModule.stop` | - | `void` | 停止定位 |
|
|
157
|
-
| `ExpoGaodeMapModule.isStarted` | - | `Promise<boolean>` | 检查是否正在定位 |
|
|
158
|
-
| `ExpoGaodeMapModule.getCurrentLocation` | - | `Promise<Location>` | 获取当前位置 |
|
|
159
|
-
|
|
160
|
-
### 定位配置
|
|
161
|
-
|
|
162
|
-
#### 配置方法
|
|
163
|
-
|
|
164
|
-
所有配置方法通过 `ExpoGaodeMapModule` 调用:
|
|
165
|
-
|
|
166
|
-
```tsx
|
|
167
|
-
import { ExpoGaodeMapModule } from 'expo-gaode-map';
|
|
168
|
-
|
|
169
|
-
// 配置定位参数
|
|
170
|
-
ExpoGaodeMapModule.setLocatingWithReGeocode(true); // 返回地址信息
|
|
171
|
-
ExpoGaodeMapModule.setLocationMode(0); // 高精度模式
|
|
172
|
-
ExpoGaodeMapModule.setInterval(2000); // 2秒更新一次
|
|
173
|
-
ExpoGaodeMapModule.setDesiredAccuracy(3); // iOS 精度级别
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
#### 单独配置方法列表
|
|
177
|
-
|
|
178
|
-
> **平台支持说明**:部分配置方法仅在特定平台有效,其他平台会静默忽略
|
|
179
|
-
|
|
180
|
-
##### 通用配置(全平台支持)
|
|
181
|
-
|
|
182
|
-
| 方法 | 参数 | 说明 |
|
|
183
|
-
|------|------|------|
|
|
184
|
-
| `ExpoGaodeMapModule.setLocatingWithReGeocode` | `boolean` | 是否返回逆地理信息 |
|
|
185
|
-
| `ExpoGaodeMapModule.setInterval` | `number` | 定位间隔(毫秒)/ 距离过滤(米) |
|
|
186
|
-
| `ExpoGaodeMapModule.setGeoLanguage` | `number` | 逆地理语言 |
|
|
187
|
-
|
|
188
|
-
##### Android 专用配置
|
|
189
|
-
|
|
190
|
-
| 方法 | 参数 | 说明 |
|
|
191
|
-
|------|------|------|
|
|
192
|
-
| `ExpoGaodeMapModule.setLocationMode` | `0 \| 1 \| 2` | 定位模式(0: 高精度, 1: 省电, 2: 仅设备) |
|
|
193
|
-
| `ExpoGaodeMapModule.setOnceLocation` | `boolean` | 是否单次定位 |
|
|
194
|
-
| `ExpoGaodeMapModule.setSensorEnable` | `boolean` | 是否使用设备传感器 |
|
|
195
|
-
| `ExpoGaodeMapModule.setWifiScan` | `boolean` | 是否允许 WiFi 扫描 |
|
|
196
|
-
| `ExpoGaodeMapModule.setGpsFirst` | `boolean` | 是否 GPS 优先 |
|
|
197
|
-
| `ExpoGaodeMapModule.setOnceLocationLatest` | `boolean` | 是否等待 WiFi 列表刷新 |
|
|
198
|
-
| `ExpoGaodeMapModule.setLocationCacheEnable` | `boolean` | 是否使用缓存策略 |
|
|
199
|
-
| `ExpoGaodeMapModule.setHttpTimeOut` | `number` | 网络请求超时(毫秒) |
|
|
200
|
-
|
|
201
|
-
##### iOS 专用配置
|
|
202
|
-
|
|
203
|
-
| 方法 | 参数 | 说明 |
|
|
204
|
-
|------|------|------|
|
|
205
|
-
| `ExpoGaodeMapModule.setLocationTimeout` | `number` | 定位超时时间(秒,默认 2 秒) |
|
|
206
|
-
| `ExpoGaodeMapModule.setReGeocodeTimeout` | `number` | 逆地理超时时间(秒,默认 2 秒) |
|
|
207
|
-
| `ExpoGaodeMapModule.setDesiredAccuracy` | `number` | 期望精度(0-5,默认 3: 100米精度) |
|
|
208
|
-
| `ExpoGaodeMapModule.setDistanceFilter` | `number` | 距离过滤器(米,默认 10 米) |
|
|
209
|
-
| `ExpoGaodeMapModule.setPausesLocationUpdatesAutomatically` | `boolean` | 是否自动暂停定位更新(默认 false) |
|
|
210
|
-
|
|
211
|
-
**iOS 默认定位配置:**
|
|
212
|
-
|
|
213
|
-
根据高德官方推荐,本库采用以下默认配置以实现快速定位:
|
|
214
|
-
- **精度**:`kCLLocationAccuracyHundredMeters`(100米精度,级别 3)
|
|
215
|
-
- **定位超时**:2 秒
|
|
216
|
-
- **逆地理超时**:2 秒
|
|
217
|
-
- **距离过滤**:10 米
|
|
218
|
-
|
|
219
|
-
> **精度说明**:
|
|
220
|
-
> - **百米精度**(推荐):2-3 秒内获取结果,满足大多数应用场景
|
|
221
|
-
> - **高精度**:使用 `setDesiredAccuracy(1)` 切换到 `kCLLocationAccuracyBest`,需配合 `setLocationTimeout(10)` 和 `setReGeocodeTimeout(10)`,约 10 秒获取 10 米精度
|
|
222
|
-
> - 苹果系统首次定位结果为粗定位,高精度需要更长时间
|
|
223
|
-
|
|
224
|
-
**精度级别对照表:**
|
|
225
|
-
|
|
226
|
-
| 级别 | 常量 | 说明 | 推荐超时 |
|
|
227
|
-
|------|------|------|----------|
|
|
228
|
-
| 0 | `kCLLocationAccuracyBestForNavigation` | 最适合导航 | 10 秒 |
|
|
229
|
-
| 1 | `kCLLocationAccuracyBest` | 最佳精度(~10米) | 10 秒 |
|
|
230
|
-
| 2 | `kCLLocationAccuracyNearestTenMeters` | 10米精度 | 5 秒 |
|
|
231
|
-
| 3 | `kCLLocationAccuracyHundredMeters` | 100米精度(默认) | 2-3 秒 |
|
|
232
|
-
| 4 | `kCLLocationAccuracyKilometer` | 1公里精度 | 1 秒 |
|
|
233
|
-
| 5 | `kCLLocationAccuracyThreeKilometers` | 3公里精度 | 1 秒 |
|
|
234
|
-
|
|
235
|
-
##### 后台定位配置(全平台支持)
|
|
236
|
-
|
|
237
|
-
| 方法 | 参数 | 说明 |
|
|
238
|
-
|------|------|------|
|
|
239
|
-
| `ExpoGaodeMapModule.setAllowsBackgroundLocationUpdates` | `boolean` | 是否允许后台定位 |
|
|
240
|
-
|
|
241
|
-
> **后台定位说明**:
|
|
242
|
-
> - **iOS**: 需要在 Info.plist 中配置 `NSLocationAlwaysAndWhenInUseUsageDescription` 和 `UIBackgroundModes` (包含 `location`)
|
|
243
|
-
> - **Android**: 自动启动前台服务,需要 `ACCESS_BACKGROUND_LOCATION` 权限(Android 10+)
|
|
244
|
-
> - 后台定位会增加电量消耗,请谨慎使用
|
|
245
|
-
|
|
246
|
-
### 方向更新(iOS)
|
|
247
|
-
|
|
248
|
-
| 方法 | 说明 |
|
|
249
|
-
|------|------|
|
|
250
|
-
| `ExpoGaodeMapModule.startUpdatingHeading` | 开始方向更新 |
|
|
251
|
-
| `ExpoGaodeMapModule.stopUpdatingHeading` | 停止方向更新 |
|
|
252
|
-
|
|
253
|
-
### 坐标转换
|
|
254
|
-
|
|
255
|
-
| 方法 | 参数 | 返回值 | 说明 |
|
|
256
|
-
|------|------|--------|------|
|
|
257
|
-
| `ExpoGaodeMapModule.coordinateConvert` | `coordinate, type` | `Promise<LatLng>` | 坐标转换为高德坐标 |
|
|
258
|
-
|
|
259
|
-
### 事件监听
|
|
260
|
-
|
|
261
|
-
使用 `addListener` 方法监听定位和方向更新事件:
|
|
262
|
-
|
|
263
|
-
```tsx
|
|
264
|
-
import { ExpoGaodeMapModule } from 'expo-gaode-map';
|
|
265
|
-
|
|
266
|
-
// 监听位置更新
|
|
267
|
-
const locationSubscription = ExpoGaodeMapModule.addLocationListener('onLocationUpdate', (location) => {
|
|
268
|
-
console.log('位置更新:', location);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// 监听方向更新(iOS)
|
|
272
|
-
const headingSubscription = ExpoGaodeMapModule.onHeadingUpdate('onHeadingUpdate', (heading) => {
|
|
273
|
-
console.log('方向更新:', heading);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
// 取消监听
|
|
277
|
-
locationSubscription.remove();
|
|
278
|
-
headingSubscription.remove();
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## 覆盖物组件
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
### Circle (圆形)
|
|
286
|
-
|
|
287
|
-
#### 属性
|
|
288
|
-
|
|
289
|
-
| 属性 | 类型 | 平台 | 默认值 | 说明 |
|
|
290
|
-
|------|------|------|--------|------|
|
|
291
|
-
| `center` | `LatLng` | 全平台 | - | 圆心坐标(必需) |
|
|
292
|
-
| `radius` | `number` | 全平台 | - | 半径(米) |
|
|
293
|
-
| `fillColor` | `string` | 全平台 | - | 填充颜色(ARGB 格式:`#AARRGGBB`) |
|
|
294
|
-
| `strokeColor` | `string` | 全平台 | - | 边框颜色(ARGB 格式:`#AARRGGBB`) |
|
|
295
|
-
| `strokeWidth` | `number` | 全平台 | `1` | 边框宽度(点/dp) |
|
|
296
|
-
|
|
297
|
-
#### 事件
|
|
298
|
-
|
|
299
|
-
| 事件 | 参数 | 说明 |
|
|
300
|
-
|------|------|------|
|
|
301
|
-
| `onPress` | `(event: NativeSyntheticEvent<{}>) => void` | 点击圆形 |
|
|
302
|
-
|
|
303
|
-
### Polyline (折线)
|
|
304
|
-
|
|
305
|
-
#### 属性
|
|
306
|
-
|
|
307
|
-
| 属性 | 类型 | 平台 | 默认值 | 说明 |
|
|
308
|
-
|------|------|------|--------|------|
|
|
309
|
-
| `points` | `LatLng[]` | 全平台 | - | 折线坐标点数组(必需) |
|
|
310
|
-
| `width` | `number` | 全平台 | `5` | 线宽(点/dp) |
|
|
311
|
-
| `color` | `string` | 全平台 | - | 线条颜色(ARGB 格式:`#AARRGGBB`) |
|
|
312
|
-
| `texture` | `string` | 全平台 | - | 纹理图片 URL |
|
|
313
|
-
| `dotted` | `boolean` | 仅 Android | `false` | 是否绘制虚线 |
|
|
314
|
-
| `geodesic` | `boolean` | 仅 Android | `false` | 是否绘制大地曲线 |
|
|
315
|
-
| `zIndex` | `number` | 全平台 | `0` | 层级 |
|
|
316
|
-
|
|
317
|
-
#### 事件
|
|
318
|
-
|
|
319
|
-
| 事件 | 参数 | 说明 |
|
|
320
|
-
|------|------|------|
|
|
321
|
-
| `onPress` | `(event: NativeSyntheticEvent<{}>) => void` | 点击折线 |
|
|
322
|
-
|
|
323
|
-
> **纹理说明**:
|
|
324
|
-
> - 支持网络图片(http/https)和本地文件(使用 `Image.resolveAssetSource()`)
|
|
325
|
-
> - 纹理会沿着折线方向平铺显示
|
|
326
|
-
> - 建议纹理折线使用较大的 `width` 值(如 20)以获得更好的显示效果
|
|
327
|
-
> - **分段纹理限制**:单个 Polyline 只能设置一个纹理。如需不同线段使用不同纹理,请创建多个 Polyline 组件
|
|
328
|
-
|
|
329
|
-
### Polygon (多边形)
|
|
330
|
-
|
|
331
|
-
#### 属性
|
|
332
|
-
|
|
333
|
-
| 属性 | 类型 | 平台 | 默认值 | 说明 |
|
|
334
|
-
|------|------|------|--------|------|
|
|
335
|
-
| `points` | `LatLng[]` | 全平台 | - | 多边形顶点坐标数组(必需) |
|
|
336
|
-
| `fillColor` | `string` | 全平台 | - | 填充颜色(ARGB 格式:`#AARRGGBB`) |
|
|
337
|
-
| `strokeColor` | `string` | 全平台 | - | 边框颜色(ARGB 格式:`#AARRGGBB`) |
|
|
338
|
-
| `strokeWidth` | `number` | 全平台 | `1` | 边框宽度(点/dp) |
|
|
339
|
-
|
|
340
|
-
#### 事件
|
|
341
|
-
|
|
342
|
-
| 事件 | 参数 | 说明 |
|
|
343
|
-
|------|------|------|
|
|
344
|
-
| `onPress` | `(event: NativeSyntheticEvent<{}>) => void` | 点击多边形 |
|
|
345
|
-
|
|
346
|
-
### Marker (标记点)
|
|
347
|
-
|
|
348
|
-
#### 属性
|
|
349
|
-
|
|
350
|
-
| 属性 | 类型 | 平台 | 默认值 | 说明 |
|
|
351
|
-
|------|------|------|--------|------|
|
|
352
|
-
| `position` | `LatLng` | 全平台 | - | 标记点坐标(必需) |
|
|
353
|
-
| `title` | `string` | 全平台 | - | 标题 |
|
|
354
|
-
| `snippet` | `string` | 全平台 | - | 描述信息 |
|
|
355
|
-
| `draggable` | `boolean` | 全平台 | `false` | 是否可拖拽 |
|
|
356
|
-
| `icon` | `string \| ImageSourcePropType` | 全平台 | - | 自定义图标 |
|
|
357
|
-
| `iconWidth` | `number` | 全平台 | `40` | 图标宽度(点/dp),仅在使用 `icon` 时有效 |
|
|
358
|
-
| `iconHeight` | `number` | 全平台 | `40` | 图标高度(点/dp),仅在使用 `icon` 时有效 |
|
|
359
|
-
| `children` | `React.ReactNode` | 全平台 | - | 自定义视图内容 |
|
|
360
|
-
| `customViewWidth` | `number` | 全平台 | `80` | 自定义视图宽度(点/dp),仅在使用 `children` 时有效 |
|
|
361
|
-
| `customViewHeight` | `number` | 全平台 | `30` | 自定义视图高度(点/dp),仅在使用 `children` 时有效 |
|
|
362
|
-
| `opacity` | `number` | 仅 Android | `1.0` | 透明度 [0, 1] |
|
|
363
|
-
| `flat` | `boolean` | 仅 Android | `false` | 是否平贴地图 |
|
|
364
|
-
| `zIndex` | `number` | 仅 Android | `0` | 层级 |
|
|
365
|
-
| `anchor` | `Point` | 仅 Android | `{x: 0.5, y: 1.0}` | 锚点比例 |
|
|
366
|
-
| `centerOffset` | `Point` | 仅 iOS | - | 中心偏移 |
|
|
367
|
-
| `animatesDrop` | `boolean` | 仅 iOS | `false` | 是否显示掉落动画 |
|
|
368
|
-
| `pinColor` | `'red' \| 'green' \| 'purple'` | 仅 iOS | `'red'` | 大头针颜色 |
|
|
369
|
-
|
|
370
|
-
#### 事件
|
|
371
|
-
|
|
372
|
-
| 事件 | 参数 | 说明 |
|
|
373
|
-
|------|------|------|
|
|
374
|
-
| `onPress` | `(event: NativeSyntheticEvent<{}>) => void` | 点击标记点 |
|
|
375
|
-
| `onDragStart` | `(event: NativeSyntheticEvent<LatLng>) => void` | 开始拖拽 |
|
|
376
|
-
| `onDrag` | `(event: NativeSyntheticEvent<LatLng>) => void` | 拖拽中 |
|
|
377
|
-
| `onDragEnd` | `(event: NativeSyntheticEvent<LatLng>) => void` | 拖拽结束 |
|
|
378
|
-
|
|
379
|
-
> **⚠️ 重要提示**:事件回调仅在**声明式用法**中有效。使用命令式 API(`addMarker`)添加的标记点无法触发这些事件。
|
|
380
|
-
|
|
381
|
-
#### 使用方式
|
|
382
|
-
|
|
383
|
-
##### 1. 默认大头针
|
|
384
|
-
不传递任何图标属性,显示默认的红色大头针(iOS)或默认标记(Android)。
|
|
385
|
-
|
|
386
|
-
##### 2. 自定义图标
|
|
387
|
-
通过 `icon` 属性指定图标图片:
|
|
388
|
-
|
|
389
|
-
```tsx
|
|
390
|
-
<Marker
|
|
391
|
-
position={{ latitude: 39.9, longitude: 116.4 }}
|
|
392
|
-
icon={require('./assets/custom-icon.png')}
|
|
393
|
-
iconWidth={40}
|
|
394
|
-
iconHeight={60}
|
|
395
|
-
title="自定义图标"
|
|
396
|
-
/>
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
**自定义图标特点:**
|
|
400
|
-
- **图标格式**:支持网络图片(http/https)、本地文件(使用 `Image.resolveAssetSource()`)
|
|
401
|
-
- **尺寸控制**:使用 `iconWidth` 和 `iconHeight` 设置图标显示尺寸(点/dp)
|
|
402
|
-
- **锚点**:`anchor` 定义图标相对于坐标点的位置,`{x: 0.5, y: 1.0}` 表示图标底部中心对齐坐标点
|
|
403
|
-
|
|
404
|
-
##### 3. 自定义视图(children)⭐ 推荐
|
|
405
|
-
通过 `children` 属性传递自定义 React Native 组件,可以实现完全自定义的标记外观:
|
|
406
|
-
|
|
407
|
-
```tsx
|
|
408
|
-
<Marker
|
|
409
|
-
position={{ latitude: 39.9, longitude: 116.4 }}
|
|
410
|
-
customViewWidth={200}
|
|
411
|
-
customViewHeight={50}
|
|
412
|
-
>
|
|
413
|
-
<View style={styles.markerContainer}>
|
|
414
|
-
<Text style={styles.markerText}>自定义内容</Text>
|
|
415
|
-
</View>
|
|
416
|
-
</Marker>
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
**自定义视图特点:**
|
|
420
|
-
- ✅ 支持任意 React Native 组件(View、Text、Image 等)
|
|
421
|
-
- ✅ 完全支持样式(backgroundColor、borderRadius、padding、flexbox 等)
|
|
422
|
-
- ✅ 使用 `customViewWidth` 和 `customViewHeight` 控制最终渲染尺寸(默认 80x30)
|
|
423
|
-
- ✅ 自动将 React 组件转换为图片显示在地图上
|
|
424
|
-
- ⚠️ **仅支持声明式用法**(`<Marker>` 组件),不支持命令式 API(`addMarker`)
|
|
425
|
-
|
|
426
|
-
**尺寸说明:**
|
|
427
|
-
- `customViewWidth` 和 `customViewHeight` 定义最终在地图上显示的尺寸
|
|
428
|
-
- 子视图会被强制调整为该尺寸并渲染为图片
|
|
429
|
-
- 建议明确指定尺寸以确保在不同设备上显示一致
|
|
430
|
-
- **注意**:`iconWidth` 和 `iconHeight` 仅用于自定义图标(`icon` 属性),不影响 `children`
|
|
431
|
-
|
|
432
|
-
## 类型定义
|
|
433
|
-
|
|
434
|
-
### MapType
|
|
435
|
-
|
|
436
|
-
```typescript
|
|
437
|
-
enum MapType {
|
|
438
|
-
NORMAL = 0, // 标准地图
|
|
439
|
-
SATELLITE = 1, // 卫星地图
|
|
440
|
-
NIGHT = 2, // 夜间地图
|
|
441
|
-
NAVI = 3, // 导航地图
|
|
442
|
-
BUS = 4, // 公交地图
|
|
443
|
-
}
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### CameraPosition
|
|
447
|
-
|
|
448
|
-
```typescript
|
|
449
|
-
interface CameraPosition {
|
|
450
|
-
target: LatLng; // 目标位置
|
|
451
|
-
zoom: number; // 缩放级别 (3-20)
|
|
452
|
-
tilt?: number; // 倾斜角度 (0-60)
|
|
453
|
-
bearing?: number; // 旋转角度 (0-360)
|
|
454
|
-
}
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
### LatLng
|
|
458
|
-
|
|
459
|
-
```typescript
|
|
460
|
-
interface LatLng {
|
|
461
|
-
latitude: number; // 纬度
|
|
462
|
-
longitude: number; // 经度
|
|
463
|
-
}
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
### Location
|
|
467
|
-
|
|
468
|
-
```typescript
|
|
469
|
-
interface Location {
|
|
470
|
-
// 基础位置信息
|
|
471
|
-
latitude: number;
|
|
472
|
-
longitude: number;
|
|
473
|
-
accuracy: number;
|
|
474
|
-
altitude: number;
|
|
475
|
-
bearing: number;
|
|
476
|
-
speed: number;
|
|
477
|
-
|
|
478
|
-
// 地址信息(需要开启逆地理)
|
|
479
|
-
address?: string;
|
|
480
|
-
province?: string;
|
|
481
|
-
city?: string;
|
|
482
|
-
district?: string;
|
|
483
|
-
street?: string;
|
|
484
|
-
streetNumber?: string;
|
|
485
|
-
country?: string;
|
|
486
|
-
cityCode?: string;
|
|
487
|
-
adCode?: string;
|
|
488
|
-
poiName?: string;
|
|
489
|
-
aoiName?: string;
|
|
490
|
-
|
|
491
|
-
// 其他信息
|
|
492
|
-
provider?: string;
|
|
493
|
-
timestamp?: number;
|
|
494
|
-
}
|