expo-gaode-map 2.2.32 → 2.2.33

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 (91) hide show
  1. package/README.md +2 -3
  2. package/android/src/main/cpp/cluster_jni.cpp +56 -0
  3. package/android/src/main/java/expo/modules/gaodemap/ExpoGaodeMapModule.kt +45 -6
  4. package/android/src/main/java/expo/modules/gaodemap/ExpoGaodeMapOfflineModule.kt +1 -1
  5. package/android/src/main/java/expo/modules/gaodemap/modules/SDKInitializer.kt +23 -17
  6. package/android/src/main/java/expo/modules/gaodemap/overlays/MarkerBitmapRenderer.kt +30 -16
  7. package/android/src/main/java/expo/modules/gaodemap/overlays/MarkerView.kt +36 -31
  8. package/android/src/main/java/expo/modules/gaodemap/overlays/MarkerViewModule.kt +6 -6
  9. package/android/src/main/java/expo/modules/gaodemap/utils/GeometryUtils.kt +103 -0
  10. package/build/ExpoGaodeMapModule.d.ts +9 -259
  11. package/build/ExpoGaodeMapModule.d.ts.map +1 -1
  12. package/build/ExpoGaodeMapModule.js +19 -910
  13. package/build/ExpoGaodeMapModule.js.map +1 -1
  14. package/build/ExpoGaodeMapView.d.ts +3 -4
  15. package/build/ExpoGaodeMapView.d.ts.map +1 -1
  16. package/build/ExpoGaodeMapView.js +28 -25
  17. package/build/ExpoGaodeMapView.js.map +1 -1
  18. package/build/components/overlays/Circle.d.ts.map +1 -1
  19. package/build/components/overlays/Circle.js +1 -30
  20. package/build/components/overlays/Circle.js.map +1 -1
  21. package/build/components/overlays/Cluster.d.ts.map +1 -1
  22. package/build/components/overlays/Cluster.js +1 -42
  23. package/build/components/overlays/Cluster.js.map +1 -1
  24. package/build/components/overlays/HeatMap.d.ts.map +1 -1
  25. package/build/components/overlays/HeatMap.js +1 -20
  26. package/build/components/overlays/HeatMap.js.map +1 -1
  27. package/build/components/overlays/Marker.d.ts.map +1 -1
  28. package/build/components/overlays/Marker.js +14 -80
  29. package/build/components/overlays/Marker.js.map +1 -1
  30. package/build/components/overlays/Polygon.d.ts.map +1 -1
  31. package/build/components/overlays/Polygon.js +1 -25
  32. package/build/components/overlays/Polygon.js.map +1 -1
  33. package/build/components/overlays/Polyline.d.ts.map +1 -1
  34. package/build/components/overlays/Polyline.js +1 -31
  35. package/build/components/overlays/Polyline.js.map +1 -1
  36. package/build/index.d.ts +6 -2
  37. package/build/index.d.ts.map +1 -1
  38. package/build/index.js +6 -2
  39. package/build/index.js.map +1 -1
  40. package/build/module/geometry.d.ts +183 -0
  41. package/build/module/geometry.d.ts.map +1 -0
  42. package/build/module/geometry.js +374 -0
  43. package/build/module/geometry.js.map +1 -0
  44. package/build/module/location.d.ts +49 -0
  45. package/build/module/location.d.ts.map +1 -0
  46. package/build/module/location.js +257 -0
  47. package/build/module/location.js.map +1 -0
  48. package/build/module/nativeModule.d.ts +5 -0
  49. package/build/module/nativeModule.d.ts.map +1 -0
  50. package/build/module/nativeModule.js +34 -0
  51. package/build/module/nativeModule.js.map +1 -0
  52. package/build/module/normalizers.d.ts +9 -0
  53. package/build/module/normalizers.d.ts.map +1 -0
  54. package/build/module/normalizers.js +109 -0
  55. package/build/module/normalizers.js.map +1 -0
  56. package/build/module/privacy.d.ts +20 -0
  57. package/build/module/privacy.d.ts.map +1 -0
  58. package/build/module/privacy.js +59 -0
  59. package/build/module/privacy.js.map +1 -0
  60. package/build/module/sdk.d.ts +20 -0
  61. package/build/module/sdk.d.ts.map +1 -0
  62. package/build/module/sdk.js +82 -0
  63. package/build/module/sdk.js.map +1 -0
  64. package/build/types/index.d.ts +1 -1
  65. package/build/types/index.js.map +1 -1
  66. package/build/types/native-module.types.d.ts +12 -16
  67. package/build/types/native-module.types.d.ts.map +1 -1
  68. package/build/types/native-module.types.js.map +1 -1
  69. package/build/types/overlays.types.d.ts +0 -16
  70. package/build/types/overlays.types.d.ts.map +1 -1
  71. package/build/types/overlays.types.js.map +1 -1
  72. package/build/types/route-playback.types.d.ts +3 -0
  73. package/build/types/route-playback.types.d.ts.map +1 -1
  74. package/build/types/route-playback.types.js.map +1 -1
  75. package/build/utils/RouteUtils.d.ts +1 -1
  76. package/build/utils/RouteUtils.d.ts.map +1 -1
  77. package/build/utils/RouteUtils.js +35 -1
  78. package/build/utils/RouteUtils.js.map +1 -1
  79. package/ios/ExpoGaodeMapModule.swift +38 -6
  80. package/ios/ExpoGaodeMapView.swift +10 -3
  81. package/ios/GaodeMapPrivacyManager.swift +26 -18
  82. package/ios/modules/LocationManager.swift +1 -1
  83. package/ios/overlays/MarkerView.swift +36 -25
  84. package/ios/overlays/MarkerViewModule.swift +4 -4
  85. package/ios/utils/ClusterNative.h +8 -0
  86. package/ios/utils/ClusterNative.mm +27 -0
  87. package/package.json +3 -1
  88. package/scripts/check-expo-modules.js +68 -0
  89. package/shared/cpp/GeometryEngine.cpp +112 -0
  90. package/shared/cpp/GeometryEngine.hpp +21 -0
  91. package/shared/cpp/tests/test_main.cpp +15 -0
@@ -0,0 +1,82 @@
1
+ import { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';
2
+ import { getNativeModule } from './nativeModule';
3
+ let sdkConfig = null;
4
+ let isSDKInitialized = false;
5
+ export const sdkMethods = {
6
+ /**
7
+ * 初始化 SDK,并缓存配置(包含 webKey)
8
+ * 注意:允许不提供任何 API Key,因为原生端可能已通过 Config Plugin 配置
9
+ */
10
+ initSDK(config) {
11
+ const nativeModule = getNativeModule();
12
+ if (!nativeModule)
13
+ throw ErrorHandler.nativeModuleUnavailable();
14
+ try {
15
+ const privacyStatus = nativeModule.getPrivacyStatus();
16
+ if (!privacyStatus.isReady) {
17
+ throw ErrorHandler.privacyNotAgreed('sdk');
18
+ }
19
+ // 检查是否有任何 key 被提供
20
+ const hasJSKeys = !!(config.androidKey || config.iosKey);
21
+ const hasWebKey = !!config.webKey;
22
+ // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置
23
+ if (!hasJSKeys) {
24
+ const isNativeConfigured = nativeModule.isNativeSDKConfigured();
25
+ if (!isNativeConfigured && !hasWebKey) {
26
+ throw ErrorHandler.invalidApiKey('both');
27
+ }
28
+ // 如果原生已配置,或者只提供了 webKey,继续初始化
29
+ ErrorLogger.warn(isNativeConfigured
30
+ ? 'SDK 使用原生端配置的 API Key'
31
+ : 'SDK 初始化仅使用 webKey', { config });
32
+ }
33
+ sdkConfig = config ?? null;
34
+ nativeModule.initSDK(config);
35
+ isSDKInitialized = true;
36
+ ErrorLogger.warn('SDK 初始化成功', { config });
37
+ }
38
+ catch (error) {
39
+ isSDKInitialized = false;
40
+ throw ErrorHandler.wrapNativeError(error, 'SDK 初始化');
41
+ }
42
+ },
43
+ isSDKInitialized() {
44
+ return isSDKInitialized;
45
+ },
46
+ setLoadWorldVectorMap(enabled) {
47
+ const nativeModule = getNativeModule(true);
48
+ if (!nativeModule)
49
+ return;
50
+ try {
51
+ nativeModule.setLoadWorldVectorMap(enabled);
52
+ }
53
+ catch (error) {
54
+ ErrorLogger.warn('setLoadWorldVectorMap 失败', { enabled, error });
55
+ }
56
+ },
57
+ getVersion() {
58
+ const nativeModule = getNativeModule(true);
59
+ if (!nativeModule)
60
+ return '0.0.0';
61
+ try {
62
+ return nativeModule.getVersion();
63
+ }
64
+ catch (error) {
65
+ ErrorLogger.warn('getVersion 失败', { error });
66
+ return '0.0.0';
67
+ }
68
+ },
69
+ };
70
+ /**
71
+ * 获取最近一次 initSDK 的配置
72
+ */
73
+ export function getSDKConfig() {
74
+ return sdkConfig;
75
+ }
76
+ /**
77
+ * 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)
78
+ */
79
+ export function getWebKey() {
80
+ return sdkConfig?.webKey;
81
+ }
82
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/module/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SDKConfig } from '../types/common.types';\nimport { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';\nimport { getNativeModule } from './nativeModule';\n\nlet sdkConfig: SDKConfig | null = null;\nlet isSDKInitialized = false;\n\nexport const sdkMethods = {\n /**\n * 初始化 SDK,并缓存配置(包含 webKey)\n * 注意:允许不提供任何 API Key,因为原生端可能已通过 Config Plugin 配置\n */\n initSDK(config: SDKConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n try {\n const privacyStatus = nativeModule.getPrivacyStatus();\n if (!privacyStatus.isReady) {\n throw ErrorHandler.privacyNotAgreed('sdk');\n }\n\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey) {\n throw ErrorHandler.invalidApiKey('both');\n }\n\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.warn(\n isNativeConfigured\n ? 'SDK 使用原生端配置的 API Key'\n : 'SDK 初始化仅使用 webKey',\n { config }\n );\n }\n\n sdkConfig = config ?? null;\n nativeModule.initSDK(config);\n isSDKInitialized = true;\n ErrorLogger.warn('SDK 初始化成功', { config });\n } catch (error) {\n isSDKInitialized = false;\n throw ErrorHandler.wrapNativeError(error, 'SDK 初始化');\n }\n },\n\n isSDKInitialized(): boolean {\n return isSDKInitialized;\n },\n\n setLoadWorldVectorMap(enabled: boolean): void {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLoadWorldVectorMap(enabled);\n } catch (error) {\n ErrorLogger.warn('setLoadWorldVectorMap 失败', { enabled, error });\n }\n },\n\n getVersion(): string {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return '0.0.0';\n try {\n return nativeModule.getVersion();\n } catch (error) {\n ErrorLogger.warn('getVersion 失败', { error });\n return '0.0.0';\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return sdkConfig;\n}\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return sdkConfig?.webKey;\n}\n"]}
@@ -8,6 +8,6 @@ export type { LocationEvent, CameraEvent, MapViewProps, MapViewMethods, MapViewR
8
8
  export type { Coordinates, ReGeocode, HeadingUpdate, LocationOptions, LocationListener, HeadingListener, GeoLanguage, LocationProtocol, } from './location.types';
9
9
  export { LocationAccuracy, LocationMode, CoordinateType, } from './location.types';
10
10
  export type { MarkerProps, PolylineProps, PolygonProps, CircleProps, HeatMapProps, MultiPointItem, MultiPointProps, ClusterParams, ClusterPoint, ClusterProps, } from './overlays.types';
11
- export type { ExpoGaodeMapModule } from './native-module.types';
11
+ export type { ExpoGaodeMapModule } from '../ExpoGaodeMapModule';
12
12
  export type { AreaMaskOverlayProps, FitToCoordinatesOptions, RouteBounds, RouteOverlayProps, RoutePlaybackController, RoutePlaybackOptions, RoutePlaybackState, SmoothMoveEndEvent, SmoothMoveProgressEvent, } from './route-playback.types';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAwBzC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * 高德地图 Expo Module 类型定义统一导出\n * 基于 Expo Modules API 重新设计\n */\n\n// 通用类型\nexport type {\n Point,\n LatLng,\n LatLngPoint,\n MapPoi,\n LatLngBounds,\n CameraPosition,\n CameraUpdate,\n ColorValue,\n SDKConfig,\n PermissionStatus,\n} from './common.types';\n\nexport { MapType } from './common.types';\n\n// 地图视图类型\nexport type {\n LocationEvent,\n CameraEvent,\n MapViewProps,\n MapViewMethods,\n MapViewRef,\n ExpoGaodeMapModuleEvents,\n} from './map-view.types';\n\n// 定位类型\nexport type {\n Coordinates,\n ReGeocode,\n HeadingUpdate,\n LocationOptions,\n LocationListener,\n HeadingListener,\n GeoLanguage,\n LocationProtocol,\n} from './location.types';\n\nexport {\n LocationAccuracy,\n LocationMode,\n CoordinateType,\n} from './location.types';\n\n// 覆盖物类型\nexport type {\n MarkerProps,\n PolylineProps,\n PolygonProps,\n CircleProps,\n HeatMapProps,\n MultiPointItem,\n MultiPointProps,\n ClusterParams,\n ClusterPoint,\n ClusterProps,\n} from './overlays.types';\n\n// 原生模块类型\nexport type { ExpoGaodeMapModule } from './native-module.types';\n\nexport type {\n AreaMaskOverlayProps,\n FitToCoordinatesOptions,\n RouteBounds,\n RouteOverlayProps,\n RoutePlaybackController,\n RoutePlaybackOptions,\n RoutePlaybackState,\n SmoothMoveEndEvent,\n SmoothMoveProgressEvent,\n} from './route-playback.types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAwBzC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * 高德地图 Expo Module 类型定义统一导出\n * 基于 Expo Modules API 重新设计\n */\n\n// 通用类型\nexport type {\n Point,\n LatLng,\n LatLngPoint,\n MapPoi,\n LatLngBounds,\n CameraPosition,\n CameraUpdate,\n ColorValue,\n SDKConfig,\n PermissionStatus,\n} from './common.types';\n\nexport { MapType } from './common.types';\n\n// 地图视图类型\nexport type {\n LocationEvent,\n CameraEvent,\n MapViewProps,\n MapViewMethods,\n MapViewRef,\n ExpoGaodeMapModuleEvents,\n} from './map-view.types';\n\n// 定位类型\nexport type {\n Coordinates,\n ReGeocode,\n HeadingUpdate,\n LocationOptions,\n LocationListener,\n HeadingListener,\n GeoLanguage,\n LocationProtocol,\n} from './location.types';\n\nexport {\n LocationAccuracy,\n LocationMode,\n CoordinateType,\n} from './location.types';\n\n// 覆盖物类型\nexport type {\n MarkerProps,\n PolylineProps,\n PolygonProps,\n CircleProps,\n HeatMapProps,\n MultiPointItem,\n MultiPointProps,\n ClusterParams,\n ClusterPoint,\n ClusterProps,\n} from './overlays.types';\n\n// 模块 facade 类型\nexport type { ExpoGaodeMapModule } from '../ExpoGaodeMapModule';\n\nexport type {\n AreaMaskOverlayProps,\n FitToCoordinatesOptions,\n RouteBounds,\n RouteOverlayProps,\n RoutePlaybackController,\n RoutePlaybackOptions,\n RoutePlaybackState,\n SmoothMoveEndEvent,\n SmoothMoveProgressEvent,\n} from './route-playback.types';\n"]}
@@ -5,7 +5,7 @@ import type { NativeModule } from 'expo';
5
5
  import type { LatLng, PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus, LatLngPoint } from './common.types';
6
6
  import type { CoordinateType, Coordinates, GeoLanguage, ReGeocode, LocationMode, LocationAccuracy, LocationListener } from './location.types';
7
7
  import type { ExpoGaodeMapModuleEvents } from './map-view.types';
8
- export interface ExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvents> {
8
+ export interface NativeExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvents> {
9
9
  /**
10
10
  * 原生事件订阅方法
11
11
  */
@@ -21,21 +21,7 @@ export interface ExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvent
21
21
  */
22
22
  initSDK(config: SDKConfig): void;
23
23
  /**
24
- * 设置是否显示隐私政策弹窗
25
- * @param hasShow 是否显示弹窗
26
- * @param hasContainsPrivacy 是否包含隐私条款
27
- * @deprecated 请优先使用 `setPrivacyConfig`
28
- */
29
- setPrivacyShow(hasShow: boolean, hasContainsPrivacy?: boolean): void;
30
- /**
31
- * 设置用户是否同意隐私政策
32
- * @param hasAgree 是否同意
33
- * @deprecated 请优先使用 `setPrivacyConfig`
34
- */
35
- setPrivacyAgree(hasAgree: boolean): void;
36
- /**
37
- * 一次性设置完整的隐私状态
38
- * 推荐作为业务层唯一入口调用
24
+ * 一次性同步完整隐私状态
39
25
  */
40
26
  setPrivacyConfig(config: PrivacyConfig): void;
41
27
  /**
@@ -232,6 +218,16 @@ export interface ExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvent
232
218
  * @returns 两点之间的距离(单位:米)
233
219
  */
234
220
  distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number;
221
+ /**
222
+ * 根据多个坐标点计算可同时可见的推荐缩放级别
223
+ * @param points 坐标点集合(至少 1 个)
224
+ * @param viewportWidthPx 视口宽度(像素)
225
+ * @param viewportHeightPx 视口高度(像素)
226
+ * @param paddingPx 内边距(像素)
227
+ * @param minZoom 最小缩放
228
+ * @param maxZoom 最大缩放
229
+ */
230
+ calculateFitZoom(points: LatLngPoint[], viewportWidthPx: number, viewportHeightPx: number, paddingPx: number, minZoom: number, maxZoom: number): number;
235
231
  /**
236
232
  * 判断点是否在圆内
237
233
  * @param point 要判断的点
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.types.d.ts","sourceRoot":"","sources":["../../src/types/native-module.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-module.types.d.ts","sourceRoot":"","sources":["../../src/types/native-module.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.types.js","sourceRoot":"","sources":["../../src/types/native-module.types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * 高德地图原生模块类型定义\n */\n\nimport type { NativeModule } from 'expo';\n\nimport type {\n LatLng,\n PrivacyConfig,\n PrivacyStatus,\n SDKConfig,\n PermissionStatus,\n LatLngPoint,\n} from './common.types';\nimport type {\n CoordinateType,\n Coordinates,\n GeoLanguage,\n ReGeocode,\n LocationMode,\n LocationAccuracy,\n LocationListener,\n} from './location.types';\nimport type { ExpoGaodeMapModuleEvents } from './map-view.types';\n\nexport interface ExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvents> {\n /**\n * 原生事件订阅方法\n */\n addListener<K extends keyof ExpoGaodeMapModuleEvents>(\n eventName: K,\n listener: ExpoGaodeMapModuleEvents[K],\n ): { remove: () => void };\n addListener(\n eventName: string,\n listener: (...args: unknown[]) => void,\n ): { remove: () => void };\n\n\n /**\n * 初始化高德地图 SDK\n * @param config SDK 配置参数,包含 Android 和 iOS 的 API Key\n */\n initSDK(config: SDKConfig): void;\n\n /**\n * 设置是否显示隐私政策弹窗\n * @param hasShow 是否显示弹窗\n * @param hasContainsPrivacy 是否包含隐私条款\n * @deprecated 请优先使用 `setPrivacyConfig`\n */\n setPrivacyShow(hasShow: boolean, hasContainsPrivacy?: boolean): void;\n\n /**\n * 设置用户是否同意隐私政策\n * @param hasAgree 是否同意\n * @deprecated 请优先使用 `setPrivacyConfig`\n */\n setPrivacyAgree(hasAgree: boolean): void;\n\n /**\n * 一次性设置完整的隐私状态\n * 推荐作为业务层唯一入口调用\n */\n setPrivacyConfig(config: PrivacyConfig): void;\n\n /**\n * 设置当前隐私协议版本,用于在协议变更时使旧同意失效\n */\n setPrivacyVersion(version: string): void;\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void;\n\n /**\n * 获取当前隐私政策状态\n * @returns 隐私政策状态对象\n */\n getPrivacyStatus(): PrivacyStatus;\n\n /**\n * 设置是否加载世界向量地图(海外地图)\n * 必须在地图初始化之前调用\n * 世界地图为高级服务,需要开通相关权限\n */\n setLoadWorldVectorMap(enabled: boolean): void;\n\n /**\n * 获取高德地图 SDK 版本号\n * @returns SDK 版本字符串\n */\n getVersion(): string;\n\n /**\n * 开始连续定位\n * 启动后会持续接收位置更新,通过 onLocationUpdate 事件回调\n */\n start(): void;\n\n /**\n * 停止定位\n * 停止接收位置更新\n */\n stop(): void;\n\n /**\n * 检查是否正在定位\n * @returns 是否正在定位\n */\n isStarted(): Promise<boolean>;\n\n /**\n * 获取当前位置(单次定位)\n * @returns 位置信息,包含坐标和可选的逆地理编码信息\n */\n getCurrentLocation(): Promise<Coordinates | ReGeocode>;\n\n /**\n * 坐标转换\n * 将其他坐标系的坐标转换为高德地图使用的 GCJ-02 坐标系\n * @param coordinate 需要转换的坐标\n * @param type 原坐标系类型\n */\n coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng>;\n\n\n /**\n * 设置是否返回逆地理编码信息\n * @param isReGeocode true: 返回地址信息; false: 只返回坐标\n */\n setLocatingWithReGeocode(isReGeocode: boolean): void;\n\n /**\n * 设置定位模式(Android)\n * @param mode 定位模式:高精度/低功耗/仅设备\n */\n setLocationMode(mode: LocationMode): void;\n\n /**\n * 设置定位间隔(毫秒)\n * @param interval 定位间隔时间,单位毫秒,默认 2000ms\n */\n setInterval(interval: number): void;\n\n /**\n * 设置是否单次定位(Android)\n * @param isOnceLocation true: 单次定位; false: 连续定位\n */\n setOnceLocation(isOnceLocation: boolean): void;\n\n /**\n * 设置是否使用设备传感器(Android)\n * @param sensorEnable true: 使用传感器; false: 不使用\n */\n setSensorEnable(sensorEnable: boolean): void;\n\n /**\n * 设置是否允许 WiFi 扫描(Android)\n * @param wifiScan true: 允许; false: 不允许\n */\n setWifiScan(wifiScan: boolean): void;\n\n /**\n * 设置是否 GPS 优先(Android)\n * @param gpsFirst true: GPS 优先; false: 网络优先\n */\n setGpsFirst(gpsFirst: boolean): void;\n\n /**\n * 设置是否等待 WiFi 列表刷新(Android)\n * @param onceLocationLatest true: 等待; false: 不等待\n */\n setOnceLocationLatest(onceLocationLatest: boolean): void;\n\n /**\n * 设置逆地理编码语言\n * @param language 语言代码,如 \"zh-CN\", \"en\"\n */\n setGeoLanguage(language: GeoLanguage | string): void;\n\n /**\n * 设置是否使用缓存策略(Android)\n * @param locationCacheEnable true: 使用缓存; false: 不使用\n */\n setLocationCacheEnable(locationCacheEnable: boolean): void;\n\n /**\n * 设置网络请求超时时间(Android)\n * @param httpTimeOut 超时时间,单位毫秒\n */\n setHttpTimeOut(httpTimeOut: number): void;\n\n /**\n * 设置期望的定位精度(iOS)\n * @param accuracy 精度级别:最佳/10米/100米/1公里/3公里\n */\n setDesiredAccuracy(accuracy: LocationAccuracy): void;\n\n /**\n * 设置定位超时时间(秒)\n * @param timeout 超时时间,单位秒,默认 10 秒\n */\n setLocationTimeout(timeout: number): void;\n\n /**\n * 设置逆地理编码超时时间(秒)\n * @param timeout 超时时间,单位秒,默认 5 秒\n */\n setReGeocodeTimeout(timeout: number): void;\n\n /**\n * 设置距离过滤器(米)(iOS)\n * 只有移动超过指定距离才会更新位置\n * @param distance 距离阈值,单位米\n */\n setDistanceFilter(distance: number): void;\n\n /**\n * 设置是否自动暂停位置更新(iOS)\n * @param pauses true: 自动暂停; false: 不暂停\n */\n setPausesLocationUpdatesAutomatically(pauses: boolean): void;\n\n /**\n * 设置是否允许后台定位(iOS)\n * @param allows true: 允许; false: 不允许\n */\n setAllowsBackgroundLocationUpdates(allows: boolean): void;\n\n /**\n * iOS 是否已启用后台定位配置\n */\n readonly isBackgroundLocationEnabled: boolean;\n\n /**\n * 设置定位协议\n * @param protocol 协议类型\n */\n setLocationProtocol(protocol: string): void;\n\n /**\n * 开始更新设备方向(罗盘朝向)(iOS)\n */\n startUpdatingHeading(): void;\n\n /**\n * 停止更新设备方向(iOS)\n */\n stopUpdatingHeading(): void;\n\n /**\n * 检查前台位置权限状态(增强版)\n * @returns 详细的权限状态信息\n */\n checkLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 请求前台位置权限(增强版)\n * @returns 请求后的权限状态\n */\n requestLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 请求后台位置权限(Android 10+、iOS)\n * 注意:必须在前台权限已授予后才能请求\n * @returns 请求后的权限状态\n */\n requestBackgroundLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限(当权限被永久拒绝时使用)\n */\n openAppSettings(): void;\n\n /**\n * 检查原生 SDK 是否已配置 API Key\n * @returns 是否已配置\n */\n isNativeSDKConfigured(): boolean;\n\n /**\n * 添加定位监听器(便捷方法)\n * 封装原生事件订阅,返回带 remove 的订阅对象\n */\n addLocationListener(listener: LocationListener): { remove: () => void };\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number;\n\n // ==================== 几何计算 ====================\n\n /**\n * 判断点是否在圆内\n * @param point 要判断的点\n * @param center 圆心坐标\n * @param radius 圆半径(单位:米)\n * @returns 是否在圆内\n */\n isPointInCircle(point: LatLngPoint, center: LatLngPoint, radius: number): boolean;\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean;\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞,会自动展平计算)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number;\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number;\n\n /**\n * 获取路径上距离目标点最近的点\n * @param path 路径点集合\n * @param target 目标点\n * @returns 最近点信息,包含坐标、索引和距离\n */\n getNearestPointOnPath(path: LatLngPoint[], target: LatLngPoint): {\n latitude: number;\n longitude: number;\n index: number;\n distanceMeters: number;\n } | null;\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组,支持嵌套数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[] | LatLngPoint[][]): LatLng | null;\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点\n * @returns 边界和中心点\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null;\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string;\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[];\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number;\n\n /**\n * 解析高德地图 API 返回的 Polyline 字符串\n * 格式: \"lng,lat;lng,lat;...\"\n * @param polylineStr 高德原始 polyline 字符串,或包含 polyline 属性的对象\n * @returns 解析后的点集\n */\n parsePolyline(polylineStr: string | { polyline: string }): LatLng[];\n\n /**\n * 获取路径上指定距离的点\n * @param points 路径点\n * @param distance 距离起点的米数\n * @returns 点信息(坐标+角度)\n */\n getPointAtDistance(points: LatLngPoint[], distance: number): {\n latitude: number;\n longitude: number;\n angle: number;\n } | null;\n\n /**\n * 瓦片坐标转换:经纬度 -> 瓦片坐标\n * @param coordinate 坐标点\n * @param zoom 缩放级别\n * @returns 瓦片坐标 (x, y, z)\n */\n latLngToTile(coordinate: LatLngPoint, zoom: number): { x: number; y: number; z: number } | null;\n\n /**\n * 瓦片坐标转换:瓦片坐标 -> 经纬度\n * @param tile 瓦片坐标 (x, y, z)\n * @returns 经纬度\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null;\n\n /**\n * 像素坐标转换:经纬度 -> 像素坐标\n * @param coordinate 坐标点\n * @param zoom 缩放级别\n * @returns 像素坐标 (x, y)\n */\n latLngToPixel(coordinate: LatLngPoint, zoom: number): { x: number; y: number } | null;\n\n /**\n * 像素坐标转换:像素坐标 -> 经纬度\n * @param pixel 像素坐标 (x, y)\n * @param zoom 缩放级别\n * @returns 经纬度\n */\n pixelToLatLng(pixel: { x: number; y: number }, zoom: number): LatLng | null;\n\n /**\n * 批量地理围栏检测\n * @param point 待检测点\n * @param polygons 多边形集合 (支持嵌套)\n * @returns 包含该点的多边形索引,若不在任何多边形内返回 -1\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number;\n\n /**\n * 生成热力图网格数据 (C++ 加速)\n * @param points 点集,包含权重\n * @param gridSizeMeters 网格大小(米)\n * @returns 聚合后的网格点\n */\n generateHeatmapGrid(\n points: Array<LatLngPoint & { weight?: number }>,\n gridSizeMeters: number\n ): Array<{ latitude: number; longitude: number; intensity: number }>;\n}\n"]}
1
+ {"version":3,"file":"native-module.types.js","sourceRoot":"","sources":["../../src/types/native-module.types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * 高德地图原生模块类型定义\n */\n\nimport type { NativeModule } from 'expo';\n\nimport type {\n LatLng,\n PrivacyConfig,\n PrivacyStatus,\n SDKConfig,\n PermissionStatus,\n LatLngPoint,\n} from './common.types';\nimport type {\n CoordinateType,\n Coordinates,\n GeoLanguage,\n ReGeocode,\n LocationMode,\n LocationAccuracy,\n LocationListener,\n} from './location.types';\nimport type { ExpoGaodeMapModuleEvents } from './map-view.types';\n\nexport interface NativeExpoGaodeMapModule\n extends NativeModule<ExpoGaodeMapModuleEvents> {\n /**\n * 原生事件订阅方法\n */\n addListener<K extends keyof ExpoGaodeMapModuleEvents>(\n eventName: K,\n listener: ExpoGaodeMapModuleEvents[K],\n ): { remove: () => void };\n addListener(\n eventName: string,\n listener: (...args: unknown[]) => void,\n ): { remove: () => void };\n\n\n /**\n * 初始化高德地图 SDK\n * @param config SDK 配置参数,包含 Android 和 iOS 的 API Key\n */\n initSDK(config: SDKConfig): void;\n\n /**\n * 一次性同步完整隐私状态\n */\n setPrivacyConfig(config: PrivacyConfig): void;\n\n /**\n * 设置当前隐私协议版本,用于在协议变更时使旧同意失效\n */\n setPrivacyVersion(version: string): void;\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void;\n\n /**\n * 获取当前隐私政策状态\n * @returns 隐私政策状态对象\n */\n getPrivacyStatus(): PrivacyStatus;\n\n /**\n * 设置是否加载世界向量地图(海外地图)\n * 必须在地图初始化之前调用\n * 世界地图为高级服务,需要开通相关权限\n */\n setLoadWorldVectorMap(enabled: boolean): void;\n\n /**\n * 获取高德地图 SDK 版本号\n * @returns SDK 版本字符串\n */\n getVersion(): string;\n\n /**\n * 开始连续定位\n * 启动后会持续接收位置更新,通过 onLocationUpdate 事件回调\n */\n start(): void;\n\n /**\n * 停止定位\n * 停止接收位置更新\n */\n stop(): void;\n\n /**\n * 检查是否正在定位\n * @returns 是否正在定位\n */\n isStarted(): Promise<boolean>;\n\n /**\n * 获取当前位置(单次定位)\n * @returns 位置信息,包含坐标和可选的逆地理编码信息\n */\n getCurrentLocation(): Promise<Coordinates | ReGeocode>;\n\n /**\n * 坐标转换\n * 将其他坐标系的坐标转换为高德地图使用的 GCJ-02 坐标系\n * @param coordinate 需要转换的坐标\n * @param type 原坐标系类型\n */\n coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng>;\n\n\n /**\n * 设置是否返回逆地理编码信息\n * @param isReGeocode true: 返回地址信息; false: 只返回坐标\n */\n setLocatingWithReGeocode(isReGeocode: boolean): void;\n\n /**\n * 设置定位模式(Android)\n * @param mode 定位模式:高精度/低功耗/仅设备\n */\n setLocationMode(mode: LocationMode): void;\n\n /**\n * 设置定位间隔(毫秒)\n * @param interval 定位间隔时间,单位毫秒,默认 2000ms\n */\n setInterval(interval: number): void;\n\n /**\n * 设置是否单次定位(Android)\n * @param isOnceLocation true: 单次定位; false: 连续定位\n */\n setOnceLocation(isOnceLocation: boolean): void;\n\n /**\n * 设置是否使用设备传感器(Android)\n * @param sensorEnable true: 使用传感器; false: 不使用\n */\n setSensorEnable(sensorEnable: boolean): void;\n\n /**\n * 设置是否允许 WiFi 扫描(Android)\n * @param wifiScan true: 允许; false: 不允许\n */\n setWifiScan(wifiScan: boolean): void;\n\n /**\n * 设置是否 GPS 优先(Android)\n * @param gpsFirst true: GPS 优先; false: 网络优先\n */\n setGpsFirst(gpsFirst: boolean): void;\n\n /**\n * 设置是否等待 WiFi 列表刷新(Android)\n * @param onceLocationLatest true: 等待; false: 不等待\n */\n setOnceLocationLatest(onceLocationLatest: boolean): void;\n\n /**\n * 设置逆地理编码语言\n * @param language 语言代码,如 \"zh-CN\", \"en\"\n */\n setGeoLanguage(language: GeoLanguage | string): void;\n\n /**\n * 设置是否使用缓存策略(Android)\n * @param locationCacheEnable true: 使用缓存; false: 不使用\n */\n setLocationCacheEnable(locationCacheEnable: boolean): void;\n\n /**\n * 设置网络请求超时时间(Android)\n * @param httpTimeOut 超时时间,单位毫秒\n */\n setHttpTimeOut(httpTimeOut: number): void;\n\n /**\n * 设置期望的定位精度(iOS)\n * @param accuracy 精度级别:最佳/10米/100米/1公里/3公里\n */\n setDesiredAccuracy(accuracy: LocationAccuracy): void;\n\n /**\n * 设置定位超时时间(秒)\n * @param timeout 超时时间,单位秒,默认 10 秒\n */\n setLocationTimeout(timeout: number): void;\n\n /**\n * 设置逆地理编码超时时间(秒)\n * @param timeout 超时时间,单位秒,默认 5 秒\n */\n setReGeocodeTimeout(timeout: number): void;\n\n /**\n * 设置距离过滤器(米)(iOS)\n * 只有移动超过指定距离才会更新位置\n * @param distance 距离阈值,单位米\n */\n setDistanceFilter(distance: number): void;\n\n /**\n * 设置是否自动暂停位置更新(iOS)\n * @param pauses true: 自动暂停; false: 不暂停\n */\n setPausesLocationUpdatesAutomatically(pauses: boolean): void;\n\n /**\n * 设置是否允许后台定位(iOS)\n * @param allows true: 允许; false: 不允许\n */\n setAllowsBackgroundLocationUpdates(allows: boolean): void;\n\n /**\n * iOS 是否已启用后台定位配置\n */\n readonly isBackgroundLocationEnabled: boolean;\n\n /**\n * 设置定位协议\n * @param protocol 协议类型\n */\n setLocationProtocol(protocol: string): void;\n\n /**\n * 开始更新设备方向(罗盘朝向)(iOS)\n */\n startUpdatingHeading(): void;\n\n /**\n * 停止更新设备方向(iOS)\n */\n stopUpdatingHeading(): void;\n\n /**\n * 检查前台位置权限状态(增强版)\n * @returns 详细的权限状态信息\n */\n checkLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 请求前台位置权限(增强版)\n * @returns 请求后的权限状态\n */\n requestLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 请求后台位置权限(Android 10+、iOS)\n * 注意:必须在前台权限已授予后才能请求\n * @returns 请求后的权限状态\n */\n requestBackgroundLocationPermission(): Promise<PermissionStatus>;\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限(当权限被永久拒绝时使用)\n */\n openAppSettings(): void;\n\n /**\n * 检查原生 SDK 是否已配置 API Key\n * @returns 是否已配置\n */\n isNativeSDKConfigured(): boolean;\n\n /**\n * 添加定位监听器(便捷方法)\n * 封装原生事件订阅,返回带 remove 的订阅对象\n */\n addLocationListener(listener: LocationListener): { remove: () => void };\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number;\n\n /**\n * 根据多个坐标点计算可同时可见的推荐缩放级别\n * @param points 坐标点集合(至少 1 个)\n * @param viewportWidthPx 视口宽度(像素)\n * @param viewportHeightPx 视口高度(像素)\n * @param paddingPx 内边距(像素)\n * @param minZoom 最小缩放\n * @param maxZoom 最大缩放\n */\n calculateFitZoom(\n points: LatLngPoint[],\n viewportWidthPx: number,\n viewportHeightPx: number,\n paddingPx: number,\n minZoom: number,\n maxZoom: number\n ): number;\n\n // ==================== 几何计算 ====================\n\n /**\n * 判断点是否在圆内\n * @param point 要判断的点\n * @param center 圆心坐标\n * @param radius 圆半径(单位:米)\n * @returns 是否在圆内\n */\n isPointInCircle(point: LatLngPoint, center: LatLngPoint, radius: number): boolean;\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean;\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞,会自动展平计算)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number;\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number;\n\n /**\n * 获取路径上距离目标点最近的点\n * @param path 路径点集合\n * @param target 目标点\n * @returns 最近点信息,包含坐标、索引和距离\n */\n getNearestPointOnPath(path: LatLngPoint[], target: LatLngPoint): {\n latitude: number;\n longitude: number;\n index: number;\n distanceMeters: number;\n } | null;\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组,支持嵌套数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[] | LatLngPoint[][]): LatLng | null;\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点\n * @returns 边界和中心点\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null;\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string;\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[];\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number;\n\n /**\n * 解析高德地图 API 返回的 Polyline 字符串\n * 格式: \"lng,lat;lng,lat;...\"\n * @param polylineStr 高德原始 polyline 字符串,或包含 polyline 属性的对象\n * @returns 解析后的点集\n */\n parsePolyline(polylineStr: string | { polyline: string }): LatLng[];\n\n /**\n * 获取路径上指定距离的点\n * @param points 路径点\n * @param distance 距离起点的米数\n * @returns 点信息(坐标+角度)\n */\n getPointAtDistance(points: LatLngPoint[], distance: number): {\n latitude: number;\n longitude: number;\n angle: number;\n } | null;\n\n /**\n * 瓦片坐标转换:经纬度 -> 瓦片坐标\n * @param coordinate 坐标点\n * @param zoom 缩放级别\n * @returns 瓦片坐标 (x, y, z)\n */\n latLngToTile(coordinate: LatLngPoint, zoom: number): { x: number; y: number; z: number } | null;\n\n /**\n * 瓦片坐标转换:瓦片坐标 -> 经纬度\n * @param tile 瓦片坐标 (x, y, z)\n * @returns 经纬度\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null;\n\n /**\n * 像素坐标转换:经纬度 -> 像素坐标\n * @param coordinate 坐标点\n * @param zoom 缩放级别\n * @returns 像素坐标 (x, y)\n */\n latLngToPixel(coordinate: LatLngPoint, zoom: number): { x: number; y: number } | null;\n\n /**\n * 像素坐标转换:像素坐标 -> 经纬度\n * @param pixel 像素坐标 (x, y)\n * @param zoom 缩放级别\n * @returns 经纬度\n */\n pixelToLatLng(pixel: { x: number; y: number }, zoom: number): LatLng | null;\n\n /**\n * 批量地理围栏检测\n * @param point 待检测点\n * @param polygons 多边形集合 (支持嵌套)\n * @returns 包含该点的多边形索引,若不在任何多边形内返回 -1\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number;\n\n /**\n * 生成热力图网格数据 (C++ 加速)\n * @param points 点集,包含权重\n * @param gridSizeMeters 网格大小(米)\n * @returns 聚合后的网格点\n */\n generateHeatmapGrid(\n points: Array<LatLngPoint & { weight?: number }>,\n gridSizeMeters: number\n ): Array<{ latitude: number; longitude: number; intensity: number }>;\n}\n"]}
@@ -85,22 +85,6 @@ export interface MarkerProps {
85
85
  * 当使用 children 时,会将 React Native 组件渲染为图片显示在地图上
86
86
  */
87
87
  children?: React.ReactNode;
88
- /**
89
- * 自定义视图宽度(像素)
90
- * 仅在使用 children 属性时有效
91
- * 已经可以省略,组件会优先尝试自动测量 children 的布局尺寸
92
- * 需要强制指定渲染尺寸时再传入
93
- * @deprecated
94
- */
95
- customViewWidth?: number;
96
- /**
97
- * 自定义视图高度(像素)
98
- * 仅在使用 children 属性时有效
99
- * 已经可以省略,组件会优先尝试自动测量 children 的布局尺寸
100
- * 需要强制指定渲染尺寸时再传入
101
- * @deprecated
102
- */
103
- customViewHeight?: number;
104
88
  /**
105
89
  * 缓存 key 建议使用 提高性能
106
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"overlays.types.d.ts","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overlays.types.d.ts","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,EAAE,WAAW,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAEpC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;IAEf;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAE9G;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAE9D;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAElE;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAE7D;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAEhE;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;IAEtF;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,EAAE,WAAW,EAAE,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC;IAExC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAE3D;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CACjH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAG3D;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB;;;OAGG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,IAAI,EAAE,WAAW,EAAE,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,EAAE,cAAc,EAAE,CAAC;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CACpG;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAEvD;;OAEG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,YAAY,EAAE,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAC;IAEvD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,KAAK,CAAC,SAAS,CAAC;IAE3D;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"overlays.types.js","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图覆盖物相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { ImageSourcePropType, ViewStyle, NativeSyntheticEvent, TextStyle } from 'react-native';\nimport type { ColorValue, LatLng, LatLngPoint, Point } from './common.types';\nimport type {\n SmoothMoveEndEvent,\n SmoothMoveProgressEvent,\n} from './route-playback.types';\n\n/**\n * 标记点属性\n */\nexport interface MarkerProps {\n /**\n * 坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n position: LatLngPoint;\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType;\n\n /**\n * 图标宽度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconWidth?: number;\n\n /**\n * 图标高度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconHeight?: number;\n\n /**\n * 标题\n */\n title?: string;\n\n /**\n * 描述\n */\n snippet?: string;\n\n /**\n * 透明度 [0, 1]\n * @platform android\n * @note iOS 不支持\n */\n opacity?: number;\n\n /**\n * 是否可拖拽\n * @default false\n */\n draggable?: boolean;\n\n /**\n * 是否平贴地图\n * @platform android\n * @note iOS 不支持\n */\n flat?: boolean;\n\n /**\n * 层级\n * @platform android\n * @note iOS 不支持 (使用 displayPriority)\n */\n zIndex?: number;\n\n /**\n * 覆盖物锚点比例\n * @platform android\n * @note iOS 使用 centerOffset\n */\n anchor?: Point;\n\n /**\n * 覆盖物偏移位置\n * @platform ios\n */\n centerOffset?: Point;\n\n /**\n * 是否显示动画\n * @platform ios\n */\n animatesDrop?: boolean;\n\n /**\n * 大头针颜色\n * Android 支持更多颜色,iOS 只支持 red, green, purple\n */\n pinColor?: 'red' | 'orange' | 'yellow' | 'green' | 'cyan' | 'blue' | 'violet' | 'magenta' | 'rose' | 'purple';\n\n /**\n * 自定义视图\n * 当使用 children 时,会将 React Native 组件渲染为图片显示在地图上\n */\n children?: React.ReactNode;\n\n /**\n * 自定义视图宽度(像素)\n * 仅在使用 children 属性时有效\n * 已经可以省略,组件会优先尝试自动测量 children 的布局尺寸\n * 需要强制指定渲染尺寸时再传入\n * @deprecated\n */\n customViewWidth?: number;\n\n /**\n * 自定义视图高度(像素)\n * 仅在使用 children 属性时有效\n * 已经可以省略,组件会优先尝试自动测量 children 的布局尺寸\n * 需要强制指定渲染尺寸时再传入\n * @deprecated\n */\n customViewHeight?: number;\n\n /**\n * 缓存 key 建议使用 提高性能\n */\n cacheKey?: string;\n\n /**\n * 是否开启生长动画\n * @default false\n */\n growAnimation?: boolean;\n\n /**\n * 点击事件\n */\n onMarkerPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽开始事件\n */\n onMarkerDragStart?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽中事件\n */\n onMarkerDrag?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽结束事件\n */\n onMarkerDragEnd?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 平滑移动轨迹点数组\n * 设置后,Marker 会沿着轨迹平滑移动\n */\n smoothMovePath?: LatLng[];\n\n /**\n * 平滑移动总时长(秒)\n * @default 10\n */\n smoothMoveDuration?: number;\n\n /**\n * 平滑移动进度事件\n */\n onSmoothMoveProgress?: (event: NativeSyntheticEvent<SmoothMoveProgressEvent>) => void;\n\n /**\n * 平滑移动完成事件\n */\n onSmoothMoveEnd?: (event: NativeSyntheticEvent<SmoothMoveEndEvent>) => void;\n}\n\n/**\n * 折线属性\n */\nexport interface PolylineProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n points: LatLngPoint[];\n\n /**\n * 线宽\n */\n strokeWidth?: number;\n\n /**\n * 线条颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 分段颜色\n */\n colors?: ColorValue[];\n\n /**\n * 是否使用渐变色\n * @platform android\n * @note iOS 不支持\n */\n gradient?: boolean;\n\n /**\n * 是否绘制大地线\n * @platform android\n * @note iOS 不支持\n */\n geodesic?: boolean;\n\n /**\n * 轨迹抽稀容差(米)\n * 设置大于 0 的值时启用 RDP 算法简化轨迹点\n * 建议值为 1.0 - 5.0,值越大简化程度越高\n */\n simplificationTolerance?: number;\n\n /**\n * 是否绘制虚线\n * @platform android\n * @note iOS 不支持\n */\n dotted?: boolean;\n\n /**\n * 纹理图片\n * 支持网络图片(http/https)、本地文件(file://)或资源名称\n */\n texture?: string;\n\n /**\n * 点击事件\n */\n onPolylinePress?: (event: NativeSyntheticEvent<{}>) => void;\n}\n\n/**\n * 多边形属性\n */\nexport interface PolygonProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n * 同时也支持嵌套数组格式 [[p1, p2, ...], [p3, p4, ...]],用于定义带孔的多边形\n * 其中第一个数组为外轮廓,后续数组为内孔\n */\n points: LatLngPoint[] | LatLngPoint[][];\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onPolygonPress?: (event: NativeSyntheticEvent<{}>) => void;\n\n /**\n * 轨迹抽稀容差(米)\n * 设置大于 0 的值时启用 RDP 算法简化多边形边界\n * 建议值为 1.0 - 5.0,值越大简化程度越高\n */\n simplificationTolerance?: number;\n\n /**\n * 简化完成事件\n */\n onPolygonSimplified?: (event: NativeSyntheticEvent<{ originalCount: number; simplifiedCount: number }>) => void;\n}\n\n/**\n * 圆形属性\n */\nexport interface CircleProps {\n /**\n * 圆心坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n center: LatLngPoint;\n\n /**\n * 半径(米)\n */\n radius: number;\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onCirclePress?: (event: NativeSyntheticEvent<{}>) => void;\n\n\n}\n\n/**\n * 热力图渐变配置\n */\nexport interface HeatMapGradient {\n /**\n * 颜色数组\n * 支持 '#RRGGBB', 'rgba()', 'red' 等\n */\n colors: ColorValue[];\n \n /**\n * 颜色起始点数组 [0-1]\n * 必须递增,例如 [0.2, 0.5, 0.9]\n */\n startPoints: number[];\n}\n\n/**\n * 热力图属性\n */\nexport interface HeatMapProps {\n /**\n * 热力点数据\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n data: LatLngPoint[];\n\n /**\n * 是否显示热力图(用于避免频繁卸载/重建导致卡顿)\n */\n visible?: boolean;\n\n /**\n * 热力半径(米)\n */\n radius?: number;\n\n /**\n * 透明度 [0, 1]\n */\n opacity?: number;\n\n /**\n * 热力图渐变配置\n */\n gradient?: HeatMapGradient;\n\n /**\n * 是否开启高清热力图(Retina适配)\n * @platform ios\n */\n allowRetinaAdapting?: boolean;\n}\n\n/**\n * 海量点标记项\n */\nexport interface MultiPointItem extends LatLng {\n /**\n * 唯一标识\n */\n id?: string | number;\n\n /**\n * 自定义数据\n */\n data?: unknown;\n}\n\n/**\n * 海量点属性\n */\nexport interface MultiPointProps {\n /**\n * 点集合\n */\n points: MultiPointItem[];\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType; \n\n /**\n * 图标宽度\n */\n iconWidth?: number;\n\n /**\n * 图标高度\n */\n iconHeight?: number;\n\n /**\n * 点击事件\n */\n onMultiPointPress?: (event: NativeSyntheticEvent<{ index: number; item: MultiPointItem }>) => void;\n}\n\n/**\n * 聚合点参数\n */\nexport interface ClusterParams {\n /**\n * 包含的标记点数量\n */\n count: number;\n\n /**\n * 纬度\n */\n latitude: number;\n\n /**\n * 经度\n */\n longitude: number;\n\n /**\n * 包含的点数据列表\n */\n pois?: ClusterPoint[];\n\n /**\n * 唯一标识 (兼容性保留)\n */\n id?: number;\n\n /**\n * 聚合点坐标 (兼容性保留)\n */\n position?: LatLng;\n}\n\n/**\n * 聚合点项\n */\nexport interface ClusterPoint {\n /**\n * 纬度(原生 Cluster 使用)\n */\n latitude?: number;\n \n /**\n * 经度(原生 Cluster 使用)\n */\n longitude?: number;\n\n /**\n * 坐标(JS ClusterLayer 使用)\n */\n position?: LatLngPoint;\n\n /**\n * 自定义数据\n */\n properties?: Record<string, unknown>;\n}\n\n/**\n * 聚合图层属性\n */\nexport interface ClusterProps {\n /**\n * 聚合点基础图标\n * 当前支持远程 URL、本地文件路径或原生资源名称\n */\n icon?: string;\n\n /**\n * 聚合半径\n */\n radius?: number;\n\n /**\n * 最小聚合数量\n */\n minClusterSize?: number;\n\n /**\n * 聚合点样式\n */\n clusterStyle?: ViewStyle;\n\n /**\n * 分级聚合样式配置\n * 根据聚合数量动态设置样式\n */\n clusterBuckets?: ({ minPoints: number } & ViewStyle)[];\n\n /**\n * 聚合点文本样式\n */\n clusterTextStyle?: TextStyle;\n\n /**\n * 坐标点列表\n */\n points: ClusterPoint[];\n\n /**\n * 暂未实现,请勿使用\n */\n renderMarker?: (item: ClusterPoint) => React.ReactNode;\n\n /**\n * 暂未实现,请勿使用\n */\n renderCluster?: (params: ClusterParams) => React.ReactNode;\n\n /**\n * 聚合点点击事件\n */\n onClusterPress?: (event: NativeSyntheticEvent<ClusterParams>) => void;\n}\n"]}
1
+ {"version":3,"file":"overlays.types.js","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图覆盖物相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { ImageSourcePropType, ViewStyle, NativeSyntheticEvent, TextStyle } from 'react-native';\nimport type { ColorValue, LatLng, LatLngPoint, Point } from './common.types';\nimport type {\n SmoothMoveEndEvent,\n SmoothMoveProgressEvent,\n} from './route-playback.types';\n\n/**\n * 标记点属性\n */\nexport interface MarkerProps {\n /**\n * 坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n position: LatLngPoint;\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType;\n\n /**\n * 图标宽度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconWidth?: number;\n\n /**\n * 图标高度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconHeight?: number;\n\n /**\n * 标题\n */\n title?: string;\n\n /**\n * 描述\n */\n snippet?: string;\n\n /**\n * 透明度 [0, 1]\n * @platform android\n * @note iOS 不支持\n */\n opacity?: number;\n\n /**\n * 是否可拖拽\n * @default false\n */\n draggable?: boolean;\n\n /**\n * 是否平贴地图\n * @platform android\n * @note iOS 不支持\n */\n flat?: boolean;\n\n /**\n * 层级\n * @platform android\n * @note iOS 不支持 (使用 displayPriority)\n */\n zIndex?: number;\n\n /**\n * 覆盖物锚点比例\n * @platform android\n * @note iOS 使用 centerOffset\n */\n anchor?: Point;\n\n /**\n * 覆盖物偏移位置\n * @platform ios\n */\n centerOffset?: Point;\n\n /**\n * 是否显示动画\n * @platform ios\n */\n animatesDrop?: boolean;\n\n /**\n * 大头针颜色\n * Android 支持更多颜色,iOS 只支持 red, green, purple\n */\n pinColor?: 'red' | 'orange' | 'yellow' | 'green' | 'cyan' | 'blue' | 'violet' | 'magenta' | 'rose' | 'purple';\n\n /**\n * 自定义视图\n * 当使用 children 时,会将 React Native 组件渲染为图片显示在地图上\n */\n children?: React.ReactNode;\n\n /**\n * 缓存 key 建议使用 提高性能\n */\n cacheKey?: string;\n\n /**\n * 是否开启生长动画\n * @default false\n */\n growAnimation?: boolean;\n\n /**\n * 点击事件\n */\n onMarkerPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽开始事件\n */\n onMarkerDragStart?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽中事件\n */\n onMarkerDrag?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽结束事件\n */\n onMarkerDragEnd?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 平滑移动轨迹点数组\n * 设置后,Marker 会沿着轨迹平滑移动\n */\n smoothMovePath?: LatLng[];\n\n /**\n * 平滑移动总时长(秒)\n * @default 10\n */\n smoothMoveDuration?: number;\n\n /**\n * 平滑移动进度事件\n */\n onSmoothMoveProgress?: (event: NativeSyntheticEvent<SmoothMoveProgressEvent>) => void;\n\n /**\n * 平滑移动完成事件\n */\n onSmoothMoveEnd?: (event: NativeSyntheticEvent<SmoothMoveEndEvent>) => void;\n}\n\n/**\n * 折线属性\n */\nexport interface PolylineProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n points: LatLngPoint[];\n\n /**\n * 线宽\n */\n strokeWidth?: number;\n\n /**\n * 线条颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 分段颜色\n */\n colors?: ColorValue[];\n\n /**\n * 是否使用渐变色\n * @platform android\n * @note iOS 不支持\n */\n gradient?: boolean;\n\n /**\n * 是否绘制大地线\n * @platform android\n * @note iOS 不支持\n */\n geodesic?: boolean;\n\n /**\n * 轨迹抽稀容差(米)\n * 设置大于 0 的值时启用 RDP 算法简化轨迹点\n * 建议值为 1.0 - 5.0,值越大简化程度越高\n */\n simplificationTolerance?: number;\n\n /**\n * 是否绘制虚线\n * @platform android\n * @note iOS 不支持\n */\n dotted?: boolean;\n\n /**\n * 纹理图片\n * 支持网络图片(http/https)、本地文件(file://)或资源名称\n */\n texture?: string;\n\n /**\n * 点击事件\n */\n onPolylinePress?: (event: NativeSyntheticEvent<{}>) => void;\n}\n\n/**\n * 多边形属性\n */\nexport interface PolygonProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n * 同时也支持嵌套数组格式 [[p1, p2, ...], [p3, p4, ...]],用于定义带孔的多边形\n * 其中第一个数组为外轮廓,后续数组为内孔\n */\n points: LatLngPoint[] | LatLngPoint[][];\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onPolygonPress?: (event: NativeSyntheticEvent<{}>) => void;\n\n /**\n * 轨迹抽稀容差(米)\n * 设置大于 0 的值时启用 RDP 算法简化多边形边界\n * 建议值为 1.0 - 5.0,值越大简化程度越高\n */\n simplificationTolerance?: number;\n\n /**\n * 简化完成事件\n */\n onPolygonSimplified?: (event: NativeSyntheticEvent<{ originalCount: number; simplifiedCount: number }>) => void;\n}\n\n/**\n * 圆形属性\n */\nexport interface CircleProps {\n /**\n * 圆心坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n center: LatLngPoint;\n\n /**\n * 半径(米)\n */\n radius: number;\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onCirclePress?: (event: NativeSyntheticEvent<{}>) => void;\n\n\n}\n\n/**\n * 热力图渐变配置\n */\nexport interface HeatMapGradient {\n /**\n * 颜色数组\n * 支持 '#RRGGBB', 'rgba()', 'red' 等\n */\n colors: ColorValue[];\n \n /**\n * 颜色起始点数组 [0-1]\n * 必须递增,例如 [0.2, 0.5, 0.9]\n */\n startPoints: number[];\n}\n\n/**\n * 热力图属性\n */\nexport interface HeatMapProps {\n /**\n * 热力点数据\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n data: LatLngPoint[];\n\n /**\n * 是否显示热力图(用于避免频繁卸载/重建导致卡顿)\n */\n visible?: boolean;\n\n /**\n * 热力半径(米)\n */\n radius?: number;\n\n /**\n * 透明度 [0, 1]\n */\n opacity?: number;\n\n /**\n * 热力图渐变配置\n */\n gradient?: HeatMapGradient;\n\n /**\n * 是否开启高清热力图(Retina适配)\n * @platform ios\n */\n allowRetinaAdapting?: boolean;\n}\n\n/**\n * 海量点标记项\n */\nexport interface MultiPointItem extends LatLng {\n /**\n * 唯一标识\n */\n id?: string | number;\n\n /**\n * 自定义数据\n */\n data?: unknown;\n}\n\n/**\n * 海量点属性\n */\nexport interface MultiPointProps {\n /**\n * 点集合\n */\n points: MultiPointItem[];\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType; \n\n /**\n * 图标宽度\n */\n iconWidth?: number;\n\n /**\n * 图标高度\n */\n iconHeight?: number;\n\n /**\n * 点击事件\n */\n onMultiPointPress?: (event: NativeSyntheticEvent<{ index: number; item: MultiPointItem }>) => void;\n}\n\n/**\n * 聚合点参数\n */\nexport interface ClusterParams {\n /**\n * 包含的标记点数量\n */\n count: number;\n\n /**\n * 纬度\n */\n latitude: number;\n\n /**\n * 经度\n */\n longitude: number;\n\n /**\n * 包含的点数据列表\n */\n pois?: ClusterPoint[];\n\n /**\n * 唯一标识 (兼容性保留)\n */\n id?: number;\n\n /**\n * 聚合点坐标 (兼容性保留)\n */\n position?: LatLng;\n}\n\n/**\n * 聚合点项\n */\nexport interface ClusterPoint {\n /**\n * 纬度(原生 Cluster 使用)\n */\n latitude?: number;\n \n /**\n * 经度(原生 Cluster 使用)\n */\n longitude?: number;\n\n /**\n * 坐标(JS ClusterLayer 使用)\n */\n position?: LatLngPoint;\n\n /**\n * 自定义数据\n */\n properties?: Record<string, unknown>;\n}\n\n/**\n * 聚合图层属性\n */\nexport interface ClusterProps {\n /**\n * 聚合点基础图标\n * 当前支持远程 URL、本地文件路径或原生资源名称\n */\n icon?: string;\n\n /**\n * 聚合半径\n */\n radius?: number;\n\n /**\n * 最小聚合数量\n */\n minClusterSize?: number;\n\n /**\n * 聚合点样式\n */\n clusterStyle?: ViewStyle;\n\n /**\n * 分级聚合样式配置\n * 根据聚合数量动态设置样式\n */\n clusterBuckets?: ({ minPoints: number } & ViewStyle)[];\n\n /**\n * 聚合点文本样式\n */\n clusterTextStyle?: TextStyle;\n\n /**\n * 坐标点列表\n */\n points: ClusterPoint[];\n\n /**\n * 暂未实现,请勿使用\n */\n renderMarker?: (item: ClusterPoint) => React.ReactNode;\n\n /**\n * 暂未实现,请勿使用\n */\n renderCluster?: (params: ClusterParams) => React.ReactNode;\n\n /**\n * 聚合点点击事件\n */\n onClusterPress?: (event: NativeSyntheticEvent<ClusterParams>) => void;\n}\n"]}
@@ -18,6 +18,9 @@ export interface RouteBounds {
18
18
  export interface FitToCoordinatesOptions {
19
19
  duration?: number;
20
20
  paddingFactor?: number;
21
+ viewportWidthPx?: number;
22
+ viewportHeightPx?: number;
23
+ paddingPx?: number;
21
24
  minZoom?: number;
22
25
  maxZoom?: number;
23
26
  singlePointZoom?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"route-playback.types.d.ts","sourceRoot":"","sources":["../../src/types/route-playback.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-playback.types.d.ts","sourceRoot":"","sources":["../../src/types/route-playback.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-playback.types.js","sourceRoot":"","sources":["../../src/types/route-playback.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { NativeSyntheticEvent } from 'react-native';\n\nimport type { LatLng, LatLngBounds, LatLngPoint, Point } from './common.types';\nimport type { MarkerProps, PolygonProps, PolylineProps } from './overlays.types';\n\nexport interface RouteBounds {\n center: LatLng;\n bounds: {\n north: number;\n south: number;\n east: number;\n west: number;\n };\n span: {\n latitudeDelta: number;\n longitudeDelta: number;\n };\n recommendedZoom: number;\n}\n\nexport interface FitToCoordinatesOptions {\n duration?: number;\n paddingFactor?: number;\n minZoom?: number;\n maxZoom?: number;\n singlePointZoom?: number;\n bearing?: number;\n tilt?: number;\n preserveBearing?: boolean;\n preserveTilt?: boolean;\n}\n\nexport interface SmoothMoveProgressEvent {\n position: LatLng;\n angle: number;\n progress: number;\n distance: number;\n totalDistance: number;\n}\n\nexport interface SmoothMoveEndEvent {\n position: LatLng;\n angle: number;\n totalDistance: number;\n}\n\nexport interface RoutePlaybackOptions {\n durationSeconds?: number;\n minDurationSeconds?: number;\n speedMultiplier?: number;\n baseSpeedMps?: number;\n updateIntervalMs?: number;\n followCamera?: boolean;\n followZoom?: number;\n bearingSmoothing?: number;\n lookAheadDistanceMeters?: number;\n simplificationTolerance?: number;\n autoFit?: boolean;\n fitOptions?: FitToCoordinatesOptions;\n onProgress?: (state: RoutePlaybackState) => void;\n onComplete?: (state: RoutePlaybackState) => void;\n}\n\nexport interface RoutePlaybackState {\n isPlaying: boolean;\n isPaused: boolean;\n progress: number;\n currentPosition: LatLng | null;\n currentAngle: number;\n totalDistance: number;\n traveledDistance: number;\n durationSeconds: number;\n smoothMovePath?: LatLng[];\n smoothMoveDuration?: number;\n}\n\nexport interface RoutePlaybackController extends RoutePlaybackState {\n start(): void;\n pause(): void;\n resume(): void;\n stop(): void;\n seek(progress: number): void;\n setSpeedMultiplier(multiplier: number): void;\n}\n\nexport interface RouteOverlayProps {\n points: LatLngPoint[];\n showStartMarker?: boolean;\n showEndMarker?: boolean;\n polylineProps?: Omit<PolylineProps, 'points'>;\n startMarkerProps?: Omit<MarkerProps, 'position'>;\n endMarkerProps?: Omit<MarkerProps, 'position'>;\n}\n\nexport interface AreaMaskOverlayProps {\n rings: LatLngPoint[][] | string;\n polygonProps?: Omit<PolygonProps, 'points'>;\n}\n\nexport interface MultiRingPolyline {\n rings: LatLng[][];\n bounds: LatLngBounds | null;\n}\n\nexport type SmoothMoveProgressEventHandler = (\n event: NativeSyntheticEvent<SmoothMoveProgressEvent>\n) => void;\n\nexport type SmoothMoveEndEventHandler = (\n event: NativeSyntheticEvent<SmoothMoveEndEvent>\n) => void;\n\nexport interface FitToCoordinatesTarget {\n moveCamera(\n position: {\n target?: LatLng;\n zoom?: number;\n bearing?: number;\n tilt?: number;\n },\n duration?: number\n ): Promise<void>;\n getCameraPosition(): Promise<{\n target?: LatLng;\n zoom?: number;\n bearing?: number;\n tilt?: number;\n }>;\n}\n\nexport interface EdgePadding {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport interface CoordinateScreenProjector {\n getLatLng(point: Point): Promise<LatLng>;\n}\n"]}
1
+ {"version":3,"file":"route-playback.types.js","sourceRoot":"","sources":["../../src/types/route-playback.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { NativeSyntheticEvent } from 'react-native';\n\nimport type { LatLng, LatLngBounds, LatLngPoint, Point } from './common.types';\nimport type { MarkerProps, PolygonProps, PolylineProps } from './overlays.types';\n\nexport interface RouteBounds {\n center: LatLng;\n bounds: {\n north: number;\n south: number;\n east: number;\n west: number;\n };\n span: {\n latitudeDelta: number;\n longitudeDelta: number;\n };\n recommendedZoom: number;\n}\n\nexport interface FitToCoordinatesOptions {\n duration?: number;\n paddingFactor?: number;\n viewportWidthPx?: number;\n viewportHeightPx?: number;\n paddingPx?: number;\n minZoom?: number;\n maxZoom?: number;\n singlePointZoom?: number;\n bearing?: number;\n tilt?: number;\n preserveBearing?: boolean;\n preserveTilt?: boolean;\n}\n\nexport interface SmoothMoveProgressEvent {\n position: LatLng;\n angle: number;\n progress: number;\n distance: number;\n totalDistance: number;\n}\n\nexport interface SmoothMoveEndEvent {\n position: LatLng;\n angle: number;\n totalDistance: number;\n}\n\nexport interface RoutePlaybackOptions {\n durationSeconds?: number;\n minDurationSeconds?: number;\n speedMultiplier?: number;\n baseSpeedMps?: number;\n updateIntervalMs?: number;\n followCamera?: boolean;\n followZoom?: number;\n bearingSmoothing?: number;\n lookAheadDistanceMeters?: number;\n simplificationTolerance?: number;\n autoFit?: boolean;\n fitOptions?: FitToCoordinatesOptions;\n onProgress?: (state: RoutePlaybackState) => void;\n onComplete?: (state: RoutePlaybackState) => void;\n}\n\nexport interface RoutePlaybackState {\n isPlaying: boolean;\n isPaused: boolean;\n progress: number;\n currentPosition: LatLng | null;\n currentAngle: number;\n totalDistance: number;\n traveledDistance: number;\n durationSeconds: number;\n smoothMovePath?: LatLng[];\n smoothMoveDuration?: number;\n}\n\nexport interface RoutePlaybackController extends RoutePlaybackState {\n start(): void;\n pause(): void;\n resume(): void;\n stop(): void;\n seek(progress: number): void;\n setSpeedMultiplier(multiplier: number): void;\n}\n\nexport interface RouteOverlayProps {\n points: LatLngPoint[];\n showStartMarker?: boolean;\n showEndMarker?: boolean;\n polylineProps?: Omit<PolylineProps, 'points'>;\n startMarkerProps?: Omit<MarkerProps, 'position'>;\n endMarkerProps?: Omit<MarkerProps, 'position'>;\n}\n\nexport interface AreaMaskOverlayProps {\n rings: LatLngPoint[][] | string;\n polygonProps?: Omit<PolygonProps, 'points'>;\n}\n\nexport interface MultiRingPolyline {\n rings: LatLng[][];\n bounds: LatLngBounds | null;\n}\n\nexport type SmoothMoveProgressEventHandler = (\n event: NativeSyntheticEvent<SmoothMoveProgressEvent>\n) => void;\n\nexport type SmoothMoveEndEventHandler = (\n event: NativeSyntheticEvent<SmoothMoveEndEvent>\n) => void;\n\nexport interface FitToCoordinatesTarget {\n moveCamera(\n position: {\n target?: LatLng;\n zoom?: number;\n bearing?: number;\n tilt?: number;\n },\n duration?: number\n ): Promise<void>;\n getCameraPosition(): Promise<{\n target?: LatLng;\n zoom?: number;\n bearing?: number;\n tilt?: number;\n }>;\n}\n\nexport interface EdgePadding {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport interface CoordinateScreenProjector {\n getLatLng(point: Point): Promise<LatLng>;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { LatLngBounds, LatLngPoint } from '../types/common.types';
2
2
  import type { FitToCoordinatesOptions, FitToCoordinatesTarget, MultiRingPolyline, RouteBounds } from '../types/route-playback.types';
3
3
  export declare function estimateZoomLevel(latitudeDelta: number, longitudeDelta: number, options?: Pick<FitToCoordinatesOptions, 'minZoom' | 'maxZoom'>): number;
4
- export declare function getRouteBounds(points: LatLngPoint[], options?: Pick<FitToCoordinatesOptions, 'paddingFactor' | 'minZoom' | 'maxZoom'>): RouteBounds | null;
4
+ export declare function getRouteBounds(points: LatLngPoint[], options?: Pick<FitToCoordinatesOptions, 'paddingFactor' | 'paddingPx' | 'viewportWidthPx' | 'viewportHeightPx' | 'minZoom' | 'maxZoom'>): RouteBounds | null;
5
5
  export declare function parseMultiRingPolyline(polyline: string): MultiRingPolyline;
6
6
  export declare function fitCameraToCoordinates(map: FitToCoordinatesTarget, points: LatLngPoint[], options?: FitToCoordinatesOptions): Promise<void>;
7
7
  export declare function buildLatLngBounds(points: LatLngPoint[]): LatLngBounds | null;
@@ -1 +1 @@
1
- {"version":3,"file":"RouteUtils.d.ts","sourceRoot":"","sources":["../../src/utils/RouteUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAQvC,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,SAAS,CAAM,GACjE,MAAM,CAQR;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,GAAG,SAAS,GAAG,SAAS,CAAM,GACnF,WAAW,GAAG,IAAI,CAmCpB;AAyBD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CA0B1E;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,sBAAsB,EAC3B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,GAAG,IAAI,CAgB5E"}
1
+ {"version":3,"file":"RouteUtils.d.ts","sourceRoot":"","sources":["../../src/utils/RouteUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAwDvC,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,SAAS,CAAM,GACjE,MAAM,CAQR;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,IAAI,CACX,uBAAuB,EACvB,eAAe,GAAG,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAC1F,GACL,WAAW,GAAG,IAAI,CAqCpB;AAyBD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CA0B1E;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,sBAAsB,EAC3B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,GAAG,IAAI,CAgB5E"}
@@ -1,8 +1,40 @@
1
+ import ExpoGaodeMapModule from '../ExpoGaodeMapModule';
1
2
  import { normalizeLatLng, normalizeLatLngList } from './GeoUtils';
2
3
  const MIN_ZOOM = 3;
3
4
  const MAX_ZOOM = 20;
4
5
  const DEFAULT_SINGLE_POINT_ZOOM = 16;
5
6
  const DEFAULT_PADDING_FACTOR = 1.2;
7
+ const DEFAULT_VIEWPORT_WIDTH_PX = 390;
8
+ const DEFAULT_VIEWPORT_HEIGHT_PX = 844;
9
+ const DEFAULT_PADDING_PX = 48;
10
+ function paddingFactorToPaddingPx(paddingFactor, viewportWidthPx, viewportHeightPx) {
11
+ if (!Number.isFinite(paddingFactor) || paddingFactor <= 1) {
12
+ return 0;
13
+ }
14
+ const paddingRatio = (1 - 1 / paddingFactor) / 2;
15
+ return Math.max(0, Math.min(viewportWidthPx, viewportHeightPx) * paddingRatio);
16
+ }
17
+ function calculateFitZoom(points, options) {
18
+ if (points.length === 0) {
19
+ return null;
20
+ }
21
+ const viewportWidthPx = options.viewportWidthPx ?? DEFAULT_VIEWPORT_WIDTH_PX;
22
+ const viewportHeightPx = options.viewportHeightPx ?? DEFAULT_VIEWPORT_HEIGHT_PX;
23
+ const paddingFromFactor = paddingFactorToPaddingPx(options.paddingFactor ?? DEFAULT_PADDING_FACTOR, viewportWidthPx, viewportHeightPx);
24
+ const paddingPx = options.paddingPx ?? (paddingFromFactor > 0 ? paddingFromFactor : DEFAULT_PADDING_PX);
25
+ try {
26
+ return ExpoGaodeMapModule.calculateFitZoom(points, {
27
+ viewportWidthPx,
28
+ viewportHeightPx,
29
+ paddingPx,
30
+ minZoom: options.minZoom,
31
+ maxZoom: options.maxZoom,
32
+ });
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
6
38
  export function estimateZoomLevel(latitudeDelta, longitudeDelta, options = {}) {
7
39
  // 使用经纬度跨度估算一个“足够看全路径”的缩放级别。
8
40
  // 这是高层 TS 兜底逻辑,不依赖具体原生 SDK 的 fitBounds 能力。
@@ -27,6 +59,8 @@ export function getRouteBounds(points, options = {}) {
27
59
  const paddingFactor = options.paddingFactor ?? DEFAULT_PADDING_FACTOR;
28
60
  const latitudeDelta = Math.max((north - south) * paddingFactor, 0.0001);
29
61
  const longitudeDelta = Math.max((east - west) * paddingFactor, 0.0001);
62
+ const nativeZoom = calculateFitZoom(normalized, options);
63
+ const fallbackZoom = estimateZoomLevel(latitudeDelta, longitudeDelta, options);
30
64
  return {
31
65
  center: {
32
66
  latitude: (north + south) / 2,
@@ -42,7 +76,7 @@ export function getRouteBounds(points, options = {}) {
42
76
  latitudeDelta,
43
77
  longitudeDelta,
44
78
  },
45
- recommendedZoom: estimateZoomLevel(latitudeDelta, longitudeDelta, options),
79
+ recommendedZoom: nativeZoom ?? fallbackZoom,
46
80
  };
47
81
  }
48
82
  function parsePolylineRing(polyline) {
@@ -1 +1 @@
1
- {"version":3,"file":"RouteUtils.js","sourceRoot":"","sources":["../../src/utils/RouteUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LatLng, LatLngBounds, LatLngPoint } from '../types/common.types';\nimport type {\n FitToCoordinatesOptions,\n FitToCoordinatesTarget,\n MultiRingPolyline,\n RouteBounds,\n} from '../types/route-playback.types';\nimport { normalizeLatLng, normalizeLatLngList } from './GeoUtils';\n\nconst MIN_ZOOM = 3;\nconst MAX_ZOOM = 20;\nconst DEFAULT_SINGLE_POINT_ZOOM = 16;\nconst DEFAULT_PADDING_FACTOR = 1.2;\n\nexport function estimateZoomLevel(\n latitudeDelta: number,\n longitudeDelta: number,\n options: Pick<FitToCoordinatesOptions, 'minZoom' | 'maxZoom'> = {}\n): number {\n // 使用经纬度跨度估算一个“足够看全路径”的缩放级别。\n // 这是高层 TS 兜底逻辑,不依赖具体原生 SDK 的 fitBounds 能力。\n const span = Math.max(latitudeDelta, longitudeDelta, 0.0001);\n const rawZoom = Math.log2(360 / span);\n const minZoom = options.minZoom ?? MIN_ZOOM;\n const maxZoom = options.maxZoom ?? MAX_ZOOM;\n return Math.max(minZoom, Math.min(maxZoom, Number(rawZoom.toFixed(2))));\n}\n\nexport function getRouteBounds(\n points: LatLngPoint[],\n options: Pick<FitToCoordinatesOptions, 'paddingFactor' | 'minZoom' | 'maxZoom'> = {}\n): RouteBounds | null {\n // 统一将路径点转换为对象坐标,再计算中心点、边界和推荐缩放。\n const normalized = normalizeLatLngList(points) as LatLng[];\n if (normalized.length === 0) {\n return null;\n }\n\n const latitudes = normalized.map((point) => point.latitude);\n const longitudes = normalized.map((point) => point.longitude);\n\n const north = Math.max(...latitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const west = Math.min(...longitudes);\n const paddingFactor = options.paddingFactor ?? DEFAULT_PADDING_FACTOR;\n const latitudeDelta = Math.max((north - south) * paddingFactor, 0.0001);\n const longitudeDelta = Math.max((east - west) * paddingFactor, 0.0001);\n\n return {\n center: {\n latitude: (north + south) / 2,\n longitude: (east + west) / 2,\n },\n bounds: {\n north,\n south,\n east,\n west,\n },\n span: {\n latitudeDelta,\n longitudeDelta,\n },\n recommendedZoom: estimateZoomLevel(latitudeDelta, longitudeDelta, options),\n };\n}\n\nfunction parsePolylineRing(polyline: string): LatLng[] {\n if (!polyline.trim()) {\n return [];\n }\n\n return polyline\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => {\n const [longitude, latitude] = segment.split(',').map((value) => Number(value.trim()));\n if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {\n return null;\n }\n\n return {\n latitude,\n longitude,\n };\n })\n .filter((point): point is LatLng => point !== null);\n}\n\nexport function parseMultiRingPolyline(polyline: string): MultiRingPolyline {\n // 高德 AOI / 多边形边界常见格式为 ring1|ring2,\n // 这里按“外环/内环”统一拆成二维坐标数组。\n const rings = polyline\n .split('|')\n .map((ring) => parsePolylineRing(ring))\n .filter((ring) => ring.length > 0);\n\n const flattened = rings.flat();\n const bounds = flattened.length\n ? {\n southwest: {\n latitude: Math.min(...flattened.map((point) => point.latitude)),\n longitude: Math.min(...flattened.map((point) => point.longitude)),\n },\n northeast: {\n latitude: Math.max(...flattened.map((point) => point.latitude)),\n longitude: Math.max(...flattened.map((point) => point.longitude)),\n },\n }\n : null;\n\n return {\n rings,\n bounds,\n };\n}\n\nexport async function fitCameraToCoordinates(\n map: FitToCoordinatesTarget,\n points: LatLngPoint[],\n options: FitToCoordinatesOptions = {}\n): Promise<void> {\n // 高层相机适配:\n // 1. 单点时直接移动到该点;\n // 2. 多点时计算中心点与推荐缩放;\n // 3. 尽量保留当前朝向和俯仰,避免突兀跳变。\n const normalized = normalizeLatLngList(points) as LatLng[];\n if (normalized.length === 0) {\n return;\n }\n\n const currentCamera: Awaited<ReturnType<FitToCoordinatesTarget['getCameraPosition']>> =\n await map.getCameraPosition().catch(() => ({}));\n\n if (normalized.length === 1) {\n const single = normalizeLatLng(normalized[0]);\n await map.moveCamera(\n {\n target: single,\n zoom: options.singlePointZoom ?? currentCamera.zoom ?? DEFAULT_SINGLE_POINT_ZOOM,\n bearing: options.preserveBearing === false ? options.bearing : currentCamera.bearing ?? options.bearing,\n tilt: options.preserveTilt === false ? options.tilt : currentCamera.tilt ?? options.tilt,\n },\n options.duration ?? 0\n );\n return;\n }\n\n const routeBounds = getRouteBounds(normalized, options);\n if (!routeBounds) {\n return;\n }\n\n await map.moveCamera(\n {\n target: routeBounds.center,\n zoom: routeBounds.recommendedZoom,\n bearing: options.preserveBearing === false ? options.bearing : currentCamera.bearing ?? options.bearing,\n tilt: options.preserveTilt === false ? options.tilt : currentCamera.tilt ?? options.tilt,\n },\n options.duration ?? 0\n );\n}\n\nexport function buildLatLngBounds(points: LatLngPoint[]): LatLngBounds | null {\n const routeBounds = getRouteBounds(points);\n if (!routeBounds) {\n return null;\n }\n\n return {\n southwest: {\n latitude: routeBounds.bounds.south,\n longitude: routeBounds.bounds.west,\n },\n northeast: {\n latitude: routeBounds.bounds.north,\n longitude: routeBounds.bounds.east,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"RouteUtils.js","sourceRoot":"","sources":["../../src/utils/RouteUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import ExpoGaodeMapModule from '../ExpoGaodeMapModule';\nimport type { LatLng, LatLngBounds, LatLngPoint } from '../types/common.types';\nimport type {\n FitToCoordinatesOptions,\n FitToCoordinatesTarget,\n MultiRingPolyline,\n RouteBounds,\n} from '../types/route-playback.types';\nimport { normalizeLatLng, normalizeLatLngList } from './GeoUtils';\n\nconst MIN_ZOOM = 3;\nconst MAX_ZOOM = 20;\nconst DEFAULT_SINGLE_POINT_ZOOM = 16;\nconst DEFAULT_PADDING_FACTOR = 1.2;\nconst DEFAULT_VIEWPORT_WIDTH_PX = 390;\nconst DEFAULT_VIEWPORT_HEIGHT_PX = 844;\nconst DEFAULT_PADDING_PX = 48;\n\nfunction paddingFactorToPaddingPx(\n paddingFactor: number,\n viewportWidthPx: number,\n viewportHeightPx: number\n): number {\n if (!Number.isFinite(paddingFactor) || paddingFactor <= 1) {\n return 0;\n }\n const paddingRatio = (1 - 1 / paddingFactor) / 2;\n return Math.max(0, Math.min(viewportWidthPx, viewportHeightPx) * paddingRatio);\n}\n\nfunction calculateFitZoom(\n points: LatLng[],\n options: Pick<\n FitToCoordinatesOptions,\n 'paddingFactor' | 'paddingPx' | 'viewportWidthPx' | 'viewportHeightPx' | 'minZoom' | 'maxZoom'\n >\n): number | null {\n if (points.length === 0) {\n return null;\n }\n\n const viewportWidthPx = options.viewportWidthPx ?? DEFAULT_VIEWPORT_WIDTH_PX;\n const viewportHeightPx = options.viewportHeightPx ?? DEFAULT_VIEWPORT_HEIGHT_PX;\n const paddingFromFactor = paddingFactorToPaddingPx(\n options.paddingFactor ?? DEFAULT_PADDING_FACTOR,\n viewportWidthPx,\n viewportHeightPx\n );\n const paddingPx = options.paddingPx ?? (paddingFromFactor > 0 ? paddingFromFactor : DEFAULT_PADDING_PX);\n\n try {\n return ExpoGaodeMapModule.calculateFitZoom(points, {\n viewportWidthPx,\n viewportHeightPx,\n paddingPx,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n });\n } catch {\n return null;\n }\n}\n\nexport function estimateZoomLevel(\n latitudeDelta: number,\n longitudeDelta: number,\n options: Pick<FitToCoordinatesOptions, 'minZoom' | 'maxZoom'> = {}\n): number {\n // 使用经纬度跨度估算一个“足够看全路径”的缩放级别。\n // 这是高层 TS 兜底逻辑,不依赖具体原生 SDK 的 fitBounds 能力。\n const span = Math.max(latitudeDelta, longitudeDelta, 0.0001);\n const rawZoom = Math.log2(360 / span);\n const minZoom = options.minZoom ?? MIN_ZOOM;\n const maxZoom = options.maxZoom ?? MAX_ZOOM;\n return Math.max(minZoom, Math.min(maxZoom, Number(rawZoom.toFixed(2))));\n}\n\nexport function getRouteBounds(\n points: LatLngPoint[],\n options: Pick<\n FitToCoordinatesOptions,\n 'paddingFactor' | 'paddingPx' | 'viewportWidthPx' | 'viewportHeightPx' | 'minZoom' | 'maxZoom'\n > = {}\n): RouteBounds | null {\n // 统一将路径点转换为对象坐标,再计算中心点、边界和推荐缩放。\n const normalized = normalizeLatLngList(points) as LatLng[];\n if (normalized.length === 0) {\n return null;\n }\n\n const latitudes = normalized.map((point) => point.latitude);\n const longitudes = normalized.map((point) => point.longitude);\n\n const north = Math.max(...latitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const west = Math.min(...longitudes);\n const paddingFactor = options.paddingFactor ?? DEFAULT_PADDING_FACTOR;\n const latitudeDelta = Math.max((north - south) * paddingFactor, 0.0001);\n const longitudeDelta = Math.max((east - west) * paddingFactor, 0.0001);\n const nativeZoom = calculateFitZoom(normalized, options);\n const fallbackZoom = estimateZoomLevel(latitudeDelta, longitudeDelta, options);\n\n return {\n center: {\n latitude: (north + south) / 2,\n longitude: (east + west) / 2,\n },\n bounds: {\n north,\n south,\n east,\n west,\n },\n span: {\n latitudeDelta,\n longitudeDelta,\n },\n recommendedZoom: nativeZoom ?? fallbackZoom,\n };\n}\n\nfunction parsePolylineRing(polyline: string): LatLng[] {\n if (!polyline.trim()) {\n return [];\n }\n\n return polyline\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => {\n const [longitude, latitude] = segment.split(',').map((value) => Number(value.trim()));\n if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {\n return null;\n }\n\n return {\n latitude,\n longitude,\n };\n })\n .filter((point): point is LatLng => point !== null);\n}\n\nexport function parseMultiRingPolyline(polyline: string): MultiRingPolyline {\n // 高德 AOI / 多边形边界常见格式为 ring1|ring2,\n // 这里按“外环/内环”统一拆成二维坐标数组。\n const rings = polyline\n .split('|')\n .map((ring) => parsePolylineRing(ring))\n .filter((ring) => ring.length > 0);\n\n const flattened = rings.flat();\n const bounds = flattened.length\n ? {\n southwest: {\n latitude: Math.min(...flattened.map((point) => point.latitude)),\n longitude: Math.min(...flattened.map((point) => point.longitude)),\n },\n northeast: {\n latitude: Math.max(...flattened.map((point) => point.latitude)),\n longitude: Math.max(...flattened.map((point) => point.longitude)),\n },\n }\n : null;\n\n return {\n rings,\n bounds,\n };\n}\n\nexport async function fitCameraToCoordinates(\n map: FitToCoordinatesTarget,\n points: LatLngPoint[],\n options: FitToCoordinatesOptions = {}\n): Promise<void> {\n // 高层相机适配:\n // 1. 单点时直接移动到该点;\n // 2. 多点时计算中心点与推荐缩放;\n // 3. 尽量保留当前朝向和俯仰,避免突兀跳变。\n const normalized = normalizeLatLngList(points) as LatLng[];\n if (normalized.length === 0) {\n return;\n }\n\n const currentCamera: Awaited<ReturnType<FitToCoordinatesTarget['getCameraPosition']>> =\n await map.getCameraPosition().catch(() => ({}));\n\n if (normalized.length === 1) {\n const single = normalizeLatLng(normalized[0]);\n await map.moveCamera(\n {\n target: single,\n zoom: options.singlePointZoom ?? currentCamera.zoom ?? DEFAULT_SINGLE_POINT_ZOOM,\n bearing: options.preserveBearing === false ? options.bearing : currentCamera.bearing ?? options.bearing,\n tilt: options.preserveTilt === false ? options.tilt : currentCamera.tilt ?? options.tilt,\n },\n options.duration ?? 0\n );\n return;\n }\n\n const routeBounds = getRouteBounds(normalized, options);\n if (!routeBounds) {\n return;\n }\n\n await map.moveCamera(\n {\n target: routeBounds.center,\n zoom: routeBounds.recommendedZoom,\n bearing: options.preserveBearing === false ? options.bearing : currentCamera.bearing ?? options.bearing,\n tilt: options.preserveTilt === false ? options.tilt : currentCamera.tilt ?? options.tilt,\n },\n options.duration ?? 0\n );\n}\n\nexport function buildLatLngBounds(points: LatLngPoint[]): LatLngBounds | null {\n const routeBounds = getRouteBounds(points);\n if (!routeBounds) {\n return null;\n }\n\n return {\n southwest: {\n latitude: routeBounds.bounds.south,\n longitude: routeBounds.bounds.west,\n },\n northeast: {\n latitude: routeBounds.bounds.north,\n longitude: routeBounds.bounds.east,\n },\n };\n}\n"]}