expo-gaode-map-navigation 2.0.16 → 2.0.18

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 (31) hide show
  1. package/android/build.gradle +6 -0
  2. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapModule.kt +8 -0
  3. package/android/src/main/java/expo/modules/gaodemap/map/modules/LocationManager.kt +32 -1
  4. package/build/map/ExpoGaodeMapModule.d.ts.map +1 -1
  5. package/build/map/ExpoGaodeMapModule.js +11 -3
  6. package/build/map/ExpoGaodeMapModule.js.map +1 -1
  7. package/build/map/types/location.types.d.ts +26 -0
  8. package/build/map/types/location.types.d.ts.map +1 -1
  9. package/build/map/types/location.types.js.map +1 -1
  10. package/build/map/types/native-module.types.d.ts +5 -0
  11. package/build/map/types/native-module.types.d.ts.map +1 -1
  12. package/build/map/types/native-module.types.js.map +1 -1
  13. package/build/map/utils/ErrorHandler.d.ts +4 -0
  14. package/build/map/utils/ErrorHandler.d.ts.map +1 -1
  15. package/build/map/utils/ErrorHandler.js +8 -0
  16. package/build/map/utils/ErrorHandler.js.map +1 -1
  17. package/ios/map/ExpoGaodeMapModule.swift +14 -0
  18. package/ios/map/cpp/ClusterEngine.cpp +4 -14
  19. package/ios/map/cpp/ClusterEngine.hpp +1 -12
  20. package/ios/map/cpp/ClusterTypes.hpp +18 -0
  21. package/ios/map/cpp/ColorParser.cpp +22 -3
  22. package/ios/map/cpp/GeometryEngine.cpp +1 -1
  23. package/ios/map/cpp/QuadTree.hpp +1 -1
  24. package/ios/map/modules/LocationManager.swift +7 -0
  25. package/package.json +7 -2
  26. package/shared/cpp/ClusterEngine.cpp +4 -14
  27. package/shared/cpp/ClusterEngine.hpp +1 -12
  28. package/shared/cpp/ClusterTypes.hpp +18 -0
  29. package/shared/cpp/ColorParser.cpp +22 -3
  30. package/shared/cpp/GeometryEngine.cpp +1 -1
  31. package/shared/cpp/QuadTree.hpp +1 -1
@@ -41,6 +41,12 @@ android {
41
41
  }
42
42
  }
43
43
 
44
+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
45
+ kotlinOptions {
46
+ freeCompilerArgs += ["-Xskip-metadata-version-check"]
47
+ }
48
+ }
49
+
44
50
  dependencies {
45
51
  def customSdkPath = null
46
52
  println "ExpoGaodeMapNavigation: Checking for custom SDK property in rootProject: ${rootProject.name}"
@@ -662,6 +662,14 @@ class ExpoGaodeMapModule : Module() {
662
662
  getLocationManager().setGpsFirst(gpsFirst)
663
663
  }
664
664
 
665
+ /**
666
+ * 设置是否允许返回模拟位置
667
+ * @param mockEnable 是否允许模拟位置
668
+ */
669
+ Function("setMockEnable") { mockEnable: Boolean ->
670
+ getLocationManager().setMockEnable(mockEnable)
671
+ }
672
+
665
673
  /**
666
674
  * 设置是否等待 WIFI 列表刷新
667
675
  * @param onceLocationLatest 是否等待刷新
@@ -33,6 +33,8 @@ class LocationManager(context: Context) {
33
33
  private var onLocationUpdate: ((Map<String, Any?>) -> Unit)? = null
34
34
  /** 是否启用后台定位 */
35
35
  private var allowsBackgroundLocationUpdates = false
36
+ /** 是否允许返回模拟位置 */
37
+ private var mockEnable = false
36
38
 
37
39
  init {
38
40
  initLocationClient()
@@ -93,6 +95,7 @@ class LocationManager(context: Context) {
93
95
  locationMode = opt.locationMode
94
96
  isNeedAddress = opt.isNeedAddress
95
97
  httpTimeOut = opt.httpTimeOut
98
+ setMockEnable(mockEnable)
96
99
  }
97
100
  }
98
101
 
@@ -209,6 +212,13 @@ class LocationManager(context: Context) {
209
212
  applyLocationOption()
210
213
  }
211
214
 
215
+ /** 设置是否允许返回模拟位置 */
216
+ fun setMockEnable(mockEnable: Boolean) {
217
+ this.mockEnable = mockEnable
218
+ getOrCreateLocationOption().setMockEnable(mockEnable)
219
+ applyLocationOption()
220
+ }
221
+
212
222
  /** 设置是否等待 WIFI 列表刷新 */
213
223
  fun setOnceLocationLatest(onceLocationLatest: Boolean) {
214
224
  getOrCreateLocationOption().isOnceLocationLatest = onceLocationLatest
@@ -280,6 +290,7 @@ class LocationManager(context: Context) {
280
290
  isNeedAddress = true
281
291
  interval = 2000
282
292
  httpTimeOut = 30000
293
+ setMockEnable(mockEnable)
283
294
  }
284
295
  locationClient?.setLocationOption(locationOption)
285
296
  }
@@ -330,7 +341,27 @@ class LocationManager(context: Context) {
330
341
  "aoiName" to location.aoiName,
331
342
  "description" to location.locationDetail,
332
343
  "coordType" to location.coordType,
333
- "buildingId" to location.buildingId
344
+ "buildingId" to location.buildingId,
345
+ "isMock" to isMockLocation(location),
346
+ "trustedLevel" to getTrustedLevel(location)
334
347
  )
335
348
  }
349
+
350
+ private fun isMockLocation(location: AMapLocation): Boolean {
351
+ return try {
352
+ val method = location.javaClass.getMethod("isMock")
353
+ method.invoke(location) as? Boolean ?: location.isFromMockProvider
354
+ } catch (_: Exception) {
355
+ location.isFromMockProvider
356
+ }
357
+ }
358
+
359
+ private fun getTrustedLevel(location: AMapLocation): Int? {
360
+ return try {
361
+ val method = location.javaClass.getMethod("getTrustedLevel")
362
+ (method.invoke(location) as? Number)?.toInt()
363
+ } catch (_: Exception) {
364
+ null
365
+ }
366
+ }
336
367
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapModule.d.ts","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpoGaodeMapModule.d.ts","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,13 @@ import { Platform } from 'react-native';
3
3
  import { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';
4
4
  import { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';
5
5
  let nativeModuleCache = null;
6
+ function describeConfig(config) {
7
+ return {
8
+ hasAndroidKey: Boolean(config.androidKey),
9
+ hasIOSKey: Boolean(config.iosKey),
10
+ hasWebKey: Boolean(config.webKey),
11
+ };
12
+ }
6
13
  function getNativeModule(optional = false) {
7
14
  if (nativeModuleCache) {
8
15
  return nativeModuleCache;
@@ -49,6 +56,7 @@ const privacySensitiveMethodNames = new Set([
49
56
  'setSensorEnable',
50
57
  'setWifiScan',
51
58
  'setGpsFirst',
59
+ 'setMockEnable',
52
60
  'setOnceLocationLatest',
53
61
  'setGeoLanguage',
54
62
  'setLocationCacheEnable',
@@ -98,14 +106,14 @@ const helperMethods = {
98
106
  throw ErrorHandler.invalidApiKey('both');
99
107
  }
100
108
  // 如果原生已配置,或者只提供了 webKey,继续初始化
101
- ErrorLogger.warn(isNativeConfigured
109
+ ErrorLogger.info(isNativeConfigured
102
110
  ? 'SDK 使用原生端配置的 API Key'
103
- : 'SDK 初始化仅使用 webKey', { config });
111
+ : 'SDK 初始化仅使用 webKey', describeConfig(config));
104
112
  }
105
113
  _sdkConfig = config ?? null;
106
114
  nativeModule.initSDK(config);
107
115
  _isSDKInitialized = true;
108
- ErrorLogger.warn('SDK 初始化成功', { config });
116
+ ErrorLogger.info('SDK 初始化成功', describeConfig(config));
109
117
  }
110
118
  catch (error) {
111
119
  _isSDKInitialized = false;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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","sourcesContent":["import { requireNativeModule } from 'expo';\nimport { Platform } from 'react-native';\n\nimport {\n LatLng,\n Coordinates,\n ReGeocode,\n LocationListener,\n LatLngPoint,\n CoordinateType,\n} from './types';\nimport type { ExpoGaodeMapModule as NativeExpoGaodeMapModule } from './types/native-module.types';\nimport { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';\nimport { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';\nimport { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';\n\nlet nativeModuleCache: NativeExpoGaodeMapModule | null = null;\n\nfunction getNativeModule(optional = false): NativeExpoGaodeMapModule | null {\n if (nativeModuleCache) {\n return nativeModuleCache;\n }\n\n try {\n nativeModuleCache = requireNativeModule<NativeExpoGaodeMapModule>('ExpoGaodeMap');\n return nativeModuleCache;\n } catch (error) {\n if (optional) {\n return null;\n }\n const moduleError = ErrorHandler.nativeModuleUnavailable();\n ErrorLogger.log(moduleError);\n throw moduleError;\n }\n}\n\nfunction getBoundNativeValue(\n module: NativeExpoGaodeMapModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nconst nativeModule = new Proxy({} as NativeExpoGaodeMapModule, {\n get(_target, prop) {\n const module = getNativeModule(true);\n return module ? getBoundNativeValue(module, prop) : undefined;\n },\n});\n\n// 记录最近一次 initSDK 的配置(含 webKey)\nlet _sdkConfig: SDKConfig | null = null;\nlet _isSDKInitialized = false;\n\nconst privacySensitiveMethodNames = new Set<string>([\n 'start',\n 'stop',\n 'isStarted',\n 'getCurrentLocation',\n 'coordinateConvert',\n 'setLocatingWithReGeocode',\n 'setLocationMode',\n 'setInterval',\n 'setOnceLocation',\n 'setSensorEnable',\n 'setWifiScan',\n 'setGpsFirst',\n 'setOnceLocationLatest',\n 'setGeoLanguage',\n 'setLocationCacheEnable',\n 'setHttpTimeOut',\n 'setDesiredAccuracy',\n 'setLocationTimeout',\n 'setReGeocodeTimeout',\n 'setDistanceFilter',\n 'setPausesLocationUpdatesAutomatically',\n 'setAllowsBackgroundLocationUpdates',\n 'setLocationProtocol',\n 'startUpdatingHeading',\n 'stopUpdatingHeading',\n 'checkLocationPermission',\n 'requestLocationPermission',\n 'requestBackgroundLocationPermission',\n 'addLocationListener',\n]);\n\nfunction assertPrivacyReady(scene: 'map' | 'sdk' = 'sdk'): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n const status = nativeModule.getPrivacyStatus();\n if (!status.isReady) {\n throw ErrorHandler.privacyNotAgreed(scene);\n }\n}\n\n// 扩展原生模块,添加便捷方法\nconst helperMethods = {\n\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\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey){\n throw ErrorHandler.invalidApiKey('both');\n }\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.warn(\n isNativeConfigured \n ? 'SDK 使用原生端配置的 API Key' \n : 'SDK 初始化仅使用 webKey',\n { config }\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 /**\n * 设置当前隐私协议版本\n * 当版本号变化时,之前的同意状态会失效\n */\n setPrivacyVersion(version: string): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyVersion(version);\n },\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.resetPrivacyConsent();\n },\n\n /**\n * 一次性同步完整的隐私状态\n * 推荐业务层只调用这个方法\n */\n setPrivacyConfig(config: PrivacyConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyConfig(config);\n },\n\n getPrivacyStatus(): PrivacyStatus {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n return {\n hasShow: false,\n hasContainsPrivacy: false,\n hasAgree: false,\n isReady: false,\n privacyVersion: null,\n agreedPrivacyVersion: null,\n restoredFromStorage: false,\n };\n }\n return nativeModule.getPrivacyStatus();\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 start(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.start();\n } catch (error) {\n ErrorLogger.warn('start 失败', { error });\n }\n },\n\n stop(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.stop();\n } catch (error) {\n ErrorLogger.warn('stop 失败', { error });\n }\n },\n\n isStarted(): Promise<boolean> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return Promise.resolve(false);\n try {\n return nativeModule.isStarted();\n } catch (error) {\n ErrorLogger.warn('isStarted 失败', { error });\n return Promise.resolve(false);\n }\n },\n\n async getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.getCurrentLocation();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取当前位置');\n }\n },\n\n async coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.coordinateConvert(normalizeLatLng(coordinate), type);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n\n setLocatingWithReGeocode(isReGeocode: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLocatingWithReGeocode(isReGeocode);\n } catch (error) {\n ErrorLogger.warn('setLocatingWithReGeocode 失败', { isReGeocode, error });\n }\n },\n\n get isBackgroundLocationEnabled(): boolean {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return false;\n return nativeModule.isBackgroundLocationEnabled === true;\n },\n\n /**\n * 检查位置权限状态\n */\n async checkLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.checkLocationPermission();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '检查权限');\n }\n },\n\n /**\n * 请求前台位置权限(增强版)\n */\n async requestLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('前台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求前台权限');\n }\n },\n\n /**\n * 请求后台位置权限\n * 注意:必须在前台权限已授予后才能请求\n */\n async requestBackgroundLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestBackgroundLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('后台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求后台权限');\n }\n },\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限\n */\n openAppSettings(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n nativeModule.openAppSettings();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '打开设置');\n }\n },\n\n setAllowsBackgroundLocationUpdates(allows: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n if (\n Platform.OS === 'ios' &&\n allows &&\n nativeModule &&\n nativeModule.isBackgroundLocationEnabled === false\n ) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] iOS 后台定位未正确配置,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请检查 Info.plist 是否包含 UIBackgroundModes: location,或者在 app.json 中配置 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n\n if (\n Platform.OS === 'android' &&\n allows &&\n nativeModule &&\n nativeModule.checkLocationPermission\n ) {\n nativeModule\n .checkLocationPermission()\n .then((status: PermissionStatus) => {\n if (!status.backgroundLocation) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] Android 后台位置权限未授予,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请先通过 requestBackgroundLocationPermission 或系统设置授予后台定位权限,或者检查是否在 app.json 中配置了 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n })\n .catch(() => {\n // 忽略检查失败,只影响日志,不影响功能\n });\n }\n\n nativeModule.setAllowsBackgroundLocationUpdates(allows);\n },\n\n /**\n * 添加定位监听器(便捷方法)\n * 自动订阅 onLocationUpdate 事件,提供容错处理\n * @param listener 定位回调函数\n * @returns 订阅对象,调用 remove() 取消监听\n * 注意:如果使用 Config Plugin 配置了 API Key,无需调用 initSDK()\n */\n addLocationListener(listener: LocationListener): { remove: () => void } {\n assertPrivacyReady('sdk');\n const module = getNativeModule();\n if (!module) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n if (!module.addListener) {\n ErrorLogger.warn('Native module does not support events');\n return {\n remove: () => { },\n };\n }\n\n return module.addListener('onLocationUpdate', listener) || {\n remove: () => { },\n };\n },\n\n // ==================== 几何计算方法 ====================\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.distanceBetweenCoordinates(\n normalizeLatLng(coordinate1),\n normalizeLatLng(coordinate2)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算距离');\n }\n },\n\n /**\n * 根据多个坐标点计算可同时可见的推荐缩放级别\n * @param points 坐标点集合(至少 1 个)\n * @param options 视口与缩放边界选项\n * @returns 推荐 zoom\n */\n calculateFitZoom(\n points: LatLngPoint[],\n options: {\n viewportWidthPx?: number;\n viewportHeightPx?: number;\n paddingPx?: number;\n minZoom?: number;\n maxZoom?: number;\n } = {}\n ): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n const normalized = normalizeLatLngList(points);\n const minZoom = options.minZoom ?? 3;\n const maxZoom = options.maxZoom ?? 20;\n if (normalized.length === 0) {\n return minZoom;\n }\n\n try {\n return nativeModule.calculateFitZoom(\n normalized,\n options.viewportWidthPx ?? 390,\n options.viewportHeightPx ?? 844,\n options.paddingPx ?? 48,\n minZoom,\n maxZoom\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算拟合缩放级别');\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInCircle(\n normalizeLatLng(point),\n normalizeLatLng(center),\n radius\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在圆内');\n }\n },\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInPolygon(\n normalizeLatLng(point),\n normalizeLatLngList(polygon)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在多边形内');\n }\n },\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculatePolygonArea(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算多边形面积');\n }\n },\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateRectangleArea(\n normalizeLatLng(southWest),\n normalizeLatLng(northEast)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算矩形面积');\n }\n },\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getNearestPointOnPath(\n normalizeLatLngList(path),\n normalizeLatLng(target)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取最近点');\n }\n },\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[]): LatLng | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateCentroid(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算质心');\n }\n },\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点集合\n * @returns 边界信息,包含 north, south, east, west 和 center\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null {\n if (!nativeModule) return null;\n try {\n const normalized = normalizeLatLngList(points);\n if (normalized.length === 0) return null;\n return nativeModule.calculatePathBounds(normalized);\n } catch (error) {\n ErrorLogger.warn('calculatePathBounds 失败', { pointsCount: points.length, error });\n return null;\n }\n },\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.encodeGeoHash(normalizeLatLng(coordinate), precision);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'GeoHash 编码');\n }\n },\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[] {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.simplifyPolyline(normalizeLatLngList(points), tolerance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '轨迹抽稀');\n }\n },\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number {\n if (!nativeModule) return 0;\n try {\n return nativeModule.calculatePathLength(normalizeLatLngList(points));\n } catch (error) {\n ErrorLogger.warn('calculatePathLength 失败', { pointsCount: points.length, error });\n return 0;\n }\n },\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 if (!nativeModule || !polylineStr) return [];\n try {\n // 兼容性处理:如果传入的是对象 { polyline: '...' },自动提取字符串\n let finalStr: string = '';\n if (typeof polylineStr === 'object' && polylineStr !== null && 'polyline' in polylineStr) {\n finalStr = polylineStr.polyline || '';\n } else if (typeof polylineStr === 'string') {\n finalStr = polylineStr;\n }\n\n if (!finalStr) return [];\n return nativeModule.parsePolyline(finalStr);\n } catch (error) {\n ErrorLogger.warn('解析 Polyline 失败', { polylineStr, error });\n return [];\n }\n },\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getPointAtDistance(normalizeLatLngList(points), distance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取路径上的点');\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.latLngToTile(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToTile 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图瓦片坐标转换为经纬度\n * @param tile 瓦片坐标(x, y, z)\n * @returns 经纬度点\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.tileToLatLng(tile);\n } catch (error) {\n ErrorLogger.warn('tileToLatLng 失败', { tile, error });\n return null;\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.latLngToPixel(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToPixel 失败', { coordinate, zoom, error });\n return null;\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.pixelToLatLng(pixel, zoom);\n } catch (error) {\n ErrorLogger.warn('pixelToLatLng 失败', { pixel, zoom, error });\n return null;\n }\n },\n\n /**\n * 批量地理围栏检测\n * @param point 待检查的点\n * @param polygons 多边形数组,格式为 LatLngPoint[][] 或 LatLngPoint[][][]\n * @returns 包含点索引的数组(-1 表示不在任何多边形内)\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number {\n if (!nativeModule) return -1;\n try {\n const normalizedPoint = normalizeLatLng(point);\n\n // 处理三维数组 (LatLngPoint[][][]) 和二维数组 (LatLngPoint[][])\n if (Array.isArray(polygons[0]) && Array.isArray(polygons[0][0])) {\n const normalizedMultiPolygons = (polygons as LatLngPoint[][][]).map((polygonRings) =>\n normalizeLatLngList(polygonRings)\n );\n\n for (let index = 0; index < normalizedMultiPolygons.length; index += 1) {\n if (nativeModule.isPointInPolygon(normalizedPoint, normalizedMultiPolygons[index])) {\n return index;\n }\n }\n\n return -1;\n }\n\n const normalizedPolygons = polygons as LatLngPoint[][];\n const processedPolygons = normalizedPolygons.map(p => normalizeLatLngList(p));\n return nativeModule.findPointInPolygons(normalizedPoint, processedPolygons);\n } catch (error) {\n ErrorLogger.warn('findPointInPolygons 失败', { point, error });\n return -1;\n }\n },\n\n /**\n * 生成网格聚合数据 (常用于展示网格聚合图或大规模点数据处理)\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 if (!nativeModule || points.length === 0) return [];\n try {\n return nativeModule.generateHeatmapGrid(points, gridSizeMeters);\n } catch (error) {\n ErrorLogger.warn('generateHeatmapGrid 失败', { pointsCount: points.length, gridSizeMeters, error });\n return [];\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return _sdkConfig;\n};\n\ntype HiddenNativeMethodName = 'setPrivacyShow' | 'setPrivacyAgree';\n\nconst hiddenNativeMethodNames = new Set<PropertyKey>([\n 'setPrivacyShow',\n 'setPrivacyAgree',\n]);\n\nexport type ExpoGaodeMapModule =\n Omit<\n NativeExpoGaodeMapModule,\n keyof typeof helperMethods | HiddenNativeMethodName\n > &\n typeof helperMethods;\n\nconst ExpoGaodeMapModuleWithHelpers = new Proxy(helperMethods, {\n get(target, prop, receiver) {\n if (Reflect.has(target, prop)) {\n return Reflect.get(target, prop, receiver);\n }\n if (hiddenNativeMethodNames.has(prop)) {\n return undefined;\n }\n const nativeModule = getNativeModule(true);\n if (!nativeModule) {\n return undefined;\n }\n\n const value = Reflect.get(nativeModule as object, prop, nativeModule as object);\n if (\n typeof prop === 'string' &&\n privacySensitiveMethodNames.has(prop) &&\n typeof value === 'function'\n ) {\n return (...args: unknown[]) => {\n assertPrivacyReady('sdk');\n return (value as (...fnArgs: unknown[]) => unknown).apply(nativeModule, args);\n };\n }\n\n return getBoundNativeValue(nativeModule, prop);\n },\n}) as ExpoGaodeMapModule;\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return _sdkConfig?.webKey;\n}\n\nexport default ExpoGaodeMapModuleWithHelpers;\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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","sourcesContent":["import { requireNativeModule } from 'expo';\nimport { Platform } from 'react-native';\n\nimport {\n LatLng,\n Coordinates,\n ReGeocode,\n LocationListener,\n LatLngPoint,\n CoordinateType,\n} from './types';\nimport type { ExpoGaodeMapModule as NativeExpoGaodeMapModule } from './types/native-module.types';\nimport { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';\nimport { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';\nimport { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';\n\nlet nativeModuleCache: NativeExpoGaodeMapModule | null = null;\n\nfunction describeConfig(config: SDKConfig) {\n return {\n hasAndroidKey: Boolean(config.androidKey),\n hasIOSKey: Boolean(config.iosKey),\n hasWebKey: Boolean(config.webKey),\n };\n}\n\nfunction getNativeModule(optional = false): NativeExpoGaodeMapModule | null {\n if (nativeModuleCache) {\n return nativeModuleCache;\n }\n\n try {\n nativeModuleCache = requireNativeModule<NativeExpoGaodeMapModule>('ExpoGaodeMap');\n return nativeModuleCache;\n } catch (error) {\n if (optional) {\n return null;\n }\n const moduleError = ErrorHandler.nativeModuleUnavailable();\n ErrorLogger.log(moduleError);\n throw moduleError;\n }\n}\n\nfunction getBoundNativeValue(\n module: NativeExpoGaodeMapModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nconst nativeModule = new Proxy({} as NativeExpoGaodeMapModule, {\n get(_target, prop) {\n const module = getNativeModule(true);\n return module ? getBoundNativeValue(module, prop) : undefined;\n },\n});\n\n// 记录最近一次 initSDK 的配置(含 webKey)\nlet _sdkConfig: SDKConfig | null = null;\nlet _isSDKInitialized = false;\n\nconst privacySensitiveMethodNames = new Set<string>([\n 'start',\n 'stop',\n 'isStarted',\n 'getCurrentLocation',\n 'coordinateConvert',\n 'setLocatingWithReGeocode',\n 'setLocationMode',\n 'setInterval',\n 'setOnceLocation',\n 'setSensorEnable',\n 'setWifiScan',\n 'setGpsFirst',\n 'setMockEnable',\n 'setOnceLocationLatest',\n 'setGeoLanguage',\n 'setLocationCacheEnable',\n 'setHttpTimeOut',\n 'setDesiredAccuracy',\n 'setLocationTimeout',\n 'setReGeocodeTimeout',\n 'setDistanceFilter',\n 'setPausesLocationUpdatesAutomatically',\n 'setAllowsBackgroundLocationUpdates',\n 'setLocationProtocol',\n 'startUpdatingHeading',\n 'stopUpdatingHeading',\n 'checkLocationPermission',\n 'requestLocationPermission',\n 'requestBackgroundLocationPermission',\n 'addLocationListener',\n]);\n\nfunction assertPrivacyReady(scene: 'map' | 'sdk' = 'sdk'): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n const status = nativeModule.getPrivacyStatus();\n if (!status.isReady) {\n throw ErrorHandler.privacyNotAgreed(scene);\n }\n}\n\n// 扩展原生模块,添加便捷方法\nconst helperMethods = {\n\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\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey){\n throw ErrorHandler.invalidApiKey('both');\n }\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.info(\n isNativeConfigured \n ? 'SDK 使用原生端配置的 API Key' \n : 'SDK 初始化仅使用 webKey',\n describeConfig(config)\n );\n }\n _sdkConfig = config ?? null;\n nativeModule.initSDK(config);\n _isSDKInitialized = true;\n ErrorLogger.info('SDK 初始化成功', describeConfig(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 /**\n * 设置当前隐私协议版本\n * 当版本号变化时,之前的同意状态会失效\n */\n setPrivacyVersion(version: string): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyVersion(version);\n },\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.resetPrivacyConsent();\n },\n\n /**\n * 一次性同步完整的隐私状态\n * 推荐业务层只调用这个方法\n */\n setPrivacyConfig(config: PrivacyConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyConfig(config);\n },\n\n getPrivacyStatus(): PrivacyStatus {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n return {\n hasShow: false,\n hasContainsPrivacy: false,\n hasAgree: false,\n isReady: false,\n privacyVersion: null,\n agreedPrivacyVersion: null,\n restoredFromStorage: false,\n };\n }\n return nativeModule.getPrivacyStatus();\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 start(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.start();\n } catch (error) {\n ErrorLogger.warn('start 失败', { error });\n }\n },\n\n stop(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.stop();\n } catch (error) {\n ErrorLogger.warn('stop 失败', { error });\n }\n },\n\n isStarted(): Promise<boolean> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return Promise.resolve(false);\n try {\n return nativeModule.isStarted();\n } catch (error) {\n ErrorLogger.warn('isStarted 失败', { error });\n return Promise.resolve(false);\n }\n },\n\n async getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.getCurrentLocation();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取当前位置');\n }\n },\n\n async coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.coordinateConvert(normalizeLatLng(coordinate), type);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n\n setLocatingWithReGeocode(isReGeocode: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLocatingWithReGeocode(isReGeocode);\n } catch (error) {\n ErrorLogger.warn('setLocatingWithReGeocode 失败', { isReGeocode, error });\n }\n },\n\n get isBackgroundLocationEnabled(): boolean {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return false;\n return nativeModule.isBackgroundLocationEnabled === true;\n },\n\n /**\n * 检查位置权限状态\n */\n async checkLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.checkLocationPermission();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '检查权限');\n }\n },\n\n /**\n * 请求前台位置权限(增强版)\n */\n async requestLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('前台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求前台权限');\n }\n },\n\n /**\n * 请求后台位置权限\n * 注意:必须在前台权限已授予后才能请求\n */\n async requestBackgroundLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestBackgroundLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('后台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求后台权限');\n }\n },\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限\n */\n openAppSettings(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n nativeModule.openAppSettings();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '打开设置');\n }\n },\n\n setAllowsBackgroundLocationUpdates(allows: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n if (\n Platform.OS === 'ios' &&\n allows &&\n nativeModule &&\n nativeModule.isBackgroundLocationEnabled === false\n ) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] iOS 后台定位未正确配置,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请检查 Info.plist 是否包含 UIBackgroundModes: location,或者在 app.json 中配置 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n\n if (\n Platform.OS === 'android' &&\n allows &&\n nativeModule &&\n nativeModule.checkLocationPermission\n ) {\n nativeModule\n .checkLocationPermission()\n .then((status: PermissionStatus) => {\n if (!status.backgroundLocation) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] Android 后台位置权限未授予,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请先通过 requestBackgroundLocationPermission 或系统设置授予后台定位权限,或者检查是否在 app.json 中配置了 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n })\n .catch(() => {\n // 忽略检查失败,只影响日志,不影响功能\n });\n }\n\n nativeModule.setAllowsBackgroundLocationUpdates(allows);\n },\n\n /**\n * 添加定位监听器(便捷方法)\n * 自动订阅 onLocationUpdate 事件,提供容错处理\n * @param listener 定位回调函数\n * @returns 订阅对象,调用 remove() 取消监听\n * 注意:如果使用 Config Plugin 配置了 API Key,无需调用 initSDK()\n */\n addLocationListener(listener: LocationListener): { remove: () => void } {\n assertPrivacyReady('sdk');\n const module = getNativeModule();\n if (!module) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n if (!module.addListener) {\n ErrorLogger.warn('Native module does not support events');\n return {\n remove: () => { },\n };\n }\n\n return module.addListener('onLocationUpdate', listener) || {\n remove: () => { },\n };\n },\n\n // ==================== 几何计算方法 ====================\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.distanceBetweenCoordinates(\n normalizeLatLng(coordinate1),\n normalizeLatLng(coordinate2)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算距离');\n }\n },\n\n /**\n * 根据多个坐标点计算可同时可见的推荐缩放级别\n * @param points 坐标点集合(至少 1 个)\n * @param options 视口与缩放边界选项\n * @returns 推荐 zoom\n */\n calculateFitZoom(\n points: LatLngPoint[],\n options: {\n viewportWidthPx?: number;\n viewportHeightPx?: number;\n paddingPx?: number;\n minZoom?: number;\n maxZoom?: number;\n } = {}\n ): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n const normalized = normalizeLatLngList(points);\n const minZoom = options.minZoom ?? 3;\n const maxZoom = options.maxZoom ?? 20;\n if (normalized.length === 0) {\n return minZoom;\n }\n\n try {\n return nativeModule.calculateFitZoom(\n normalized,\n options.viewportWidthPx ?? 390,\n options.viewportHeightPx ?? 844,\n options.paddingPx ?? 48,\n minZoom,\n maxZoom\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算拟合缩放级别');\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInCircle(\n normalizeLatLng(point),\n normalizeLatLng(center),\n radius\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在圆内');\n }\n },\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInPolygon(\n normalizeLatLng(point),\n normalizeLatLngList(polygon)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在多边形内');\n }\n },\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculatePolygonArea(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算多边形面积');\n }\n },\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateRectangleArea(\n normalizeLatLng(southWest),\n normalizeLatLng(northEast)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算矩形面积');\n }\n },\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getNearestPointOnPath(\n normalizeLatLngList(path),\n normalizeLatLng(target)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取最近点');\n }\n },\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[]): LatLng | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateCentroid(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算质心');\n }\n },\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点集合\n * @returns 边界信息,包含 north, south, east, west 和 center\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null {\n if (!nativeModule) return null;\n try {\n const normalized = normalizeLatLngList(points);\n if (normalized.length === 0) return null;\n return nativeModule.calculatePathBounds(normalized);\n } catch (error) {\n ErrorLogger.warn('calculatePathBounds 失败', { pointsCount: points.length, error });\n return null;\n }\n },\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.encodeGeoHash(normalizeLatLng(coordinate), precision);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'GeoHash 编码');\n }\n },\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[] {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.simplifyPolyline(normalizeLatLngList(points), tolerance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '轨迹抽稀');\n }\n },\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number {\n if (!nativeModule) return 0;\n try {\n return nativeModule.calculatePathLength(normalizeLatLngList(points));\n } catch (error) {\n ErrorLogger.warn('calculatePathLength 失败', { pointsCount: points.length, error });\n return 0;\n }\n },\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 if (!nativeModule || !polylineStr) return [];\n try {\n // 兼容性处理:如果传入的是对象 { polyline: '...' },自动提取字符串\n let finalStr: string = '';\n if (typeof polylineStr === 'object' && polylineStr !== null && 'polyline' in polylineStr) {\n finalStr = polylineStr.polyline || '';\n } else if (typeof polylineStr === 'string') {\n finalStr = polylineStr;\n }\n\n if (!finalStr) return [];\n return nativeModule.parsePolyline(finalStr);\n } catch (error) {\n ErrorLogger.warn('解析 Polyline 失败', { polylineStr, error });\n return [];\n }\n },\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 if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getPointAtDistance(normalizeLatLngList(points), distance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取路径上的点');\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.latLngToTile(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToTile 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图瓦片坐标转换为经纬度\n * @param tile 瓦片坐标(x, y, z)\n * @returns 经纬度点\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.tileToLatLng(tile);\n } catch (error) {\n ErrorLogger.warn('tileToLatLng 失败', { tile, error });\n return null;\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.latLngToPixel(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToPixel 失败', { coordinate, zoom, error });\n return null;\n }\n },\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 if (!nativeModule) return null;\n try {\n return nativeModule.pixelToLatLng(pixel, zoom);\n } catch (error) {\n ErrorLogger.warn('pixelToLatLng 失败', { pixel, zoom, error });\n return null;\n }\n },\n\n /**\n * 批量地理围栏检测\n * @param point 待检查的点\n * @param polygons 多边形数组,格式为 LatLngPoint[][] 或 LatLngPoint[][][]\n * @returns 包含点索引的数组(-1 表示不在任何多边形内)\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number {\n if (!nativeModule) return -1;\n try {\n const normalizedPoint = normalizeLatLng(point);\n\n // 处理三维数组 (LatLngPoint[][][]) 和二维数组 (LatLngPoint[][])\n if (Array.isArray(polygons[0]) && Array.isArray(polygons[0][0])) {\n const normalizedMultiPolygons = (polygons as LatLngPoint[][][]).map((polygonRings) =>\n normalizeLatLngList(polygonRings)\n );\n\n for (let index = 0; index < normalizedMultiPolygons.length; index += 1) {\n if (nativeModule.isPointInPolygon(normalizedPoint, normalizedMultiPolygons[index])) {\n return index;\n }\n }\n\n return -1;\n }\n\n const normalizedPolygons = polygons as LatLngPoint[][];\n const processedPolygons = normalizedPolygons.map(p => normalizeLatLngList(p));\n return nativeModule.findPointInPolygons(normalizedPoint, processedPolygons);\n } catch (error) {\n ErrorLogger.warn('findPointInPolygons 失败', { point, error });\n return -1;\n }\n },\n\n /**\n * 生成网格聚合数据 (常用于展示网格聚合图或大规模点数据处理)\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 if (!nativeModule || points.length === 0) return [];\n try {\n return nativeModule.generateHeatmapGrid(points, gridSizeMeters);\n } catch (error) {\n ErrorLogger.warn('generateHeatmapGrid 失败', { pointsCount: points.length, gridSizeMeters, error });\n return [];\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return _sdkConfig;\n};\n\ntype HiddenNativeMethodName = 'setPrivacyShow' | 'setPrivacyAgree';\n\nconst hiddenNativeMethodNames = new Set<PropertyKey>([\n 'setPrivacyShow',\n 'setPrivacyAgree',\n]);\n\nexport type ExpoGaodeMapModule =\n Omit<\n NativeExpoGaodeMapModule,\n keyof typeof helperMethods | HiddenNativeMethodName\n > &\n typeof helperMethods;\n\nconst ExpoGaodeMapModuleWithHelpers = new Proxy(helperMethods, {\n get(target, prop, receiver) {\n if (Reflect.has(target, prop)) {\n return Reflect.get(target, prop, receiver);\n }\n if (hiddenNativeMethodNames.has(prop)) {\n return undefined;\n }\n const nativeModule = getNativeModule(true);\n if (!nativeModule) {\n return undefined;\n }\n\n const value = Reflect.get(nativeModule as object, prop, nativeModule as object);\n if (\n typeof prop === 'string' &&\n privacySensitiveMethodNames.has(prop) &&\n typeof value === 'function'\n ) {\n return (...args: unknown[]) => {\n assertPrivacyReady('sdk');\n return (value as (...fnArgs: unknown[]) => unknown).apply(nativeModule, args);\n };\n }\n\n return getBoundNativeValue(nativeModule, prop);\n },\n}) as ExpoGaodeMapModule;\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return _sdkConfig?.webKey;\n}\n\nexport default ExpoGaodeMapModuleWithHelpers;\n"]}
@@ -36,6 +36,26 @@ export interface Coordinates extends LatLng {
36
36
  * 格式化地址(仅在启用逆地理编码时可用)
37
37
  */
38
38
  address?: string;
39
+ /**
40
+ * 是否来自模拟位置
41
+ * @platform android
42
+ */
43
+ isMock?: boolean;
44
+ /**
45
+ * 定位可信度等级(1-4)
46
+ * @platform android
47
+ */
48
+ trustedLevel?: number;
49
+ /**
50
+ * 是否由软件模拟产生
51
+ * @platform ios iOS 15+
52
+ */
53
+ isSimulatedBySoftware?: boolean;
54
+ /**
55
+ * 是否由外接设备产生
56
+ * @platform ios iOS 15+
57
+ */
58
+ isProducedByAccessory?: boolean;
39
59
  }
40
60
  /**
41
61
  * 逆地理编码信息
@@ -261,6 +281,12 @@ export interface LocationOptions {
261
281
  * @default false
262
282
  */
263
283
  gpsFirst?: boolean;
284
+ /**
285
+ * 是否允许返回模拟位置
286
+ * @platform android
287
+ * @default false
288
+ */
289
+ mockEnable?: boolean;
264
290
  /**
265
291
  * 是否等待WIFI列表刷新
266
292
  * 定位精度会更高,但是定位速度会变慢1-3秒
@@ -1 +1 @@
1
- {"version":3,"file":"location.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/location.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/location.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"location.types.js","sourceRoot":"","sources":["../../../src/map/types/location.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2HH;;;GAGG;AACH,MAAM,CAAN,IAAY,gBA8BX;AA9BD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,iFAAqB,CAAA;IAErB;;OAEG;IACH,uDAAQ,CAAA;IAER;;OAEG;IACH,+EAAoB,CAAA;IAEpB;;OAEG;IACH,yEAAiB,CAAA;IAEjB;;OAEG;IACH,iEAAa,CAAA;IAEb;;OAEG;IACH,6EAAmB,CAAA;AACrB,CAAC,EA9BW,gBAAgB,KAAhB,gBAAgB,QA8B3B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,YAeX;AAfD,WAAY,YAAY;IACtB;;OAEG;IACH,+DAAgB,CAAA;IAEhB;;OAEG;IACH,iEAAiB,CAAA;IAEjB;;OAEG;IACH,iEAAiB,CAAA;AACnB,CAAC,EAfW,YAAY,KAAZ,YAAY,QAevB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAwCX;AAxCD,WAAY,cAAc;IACxB;;OAEG;IACH,oDAAS,CAAA;IAET;;OAEG;IACH,qDAAS,CAAA;IAET;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,yDAAW,CAAA;IAEX;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,iDAAO,CAAA;AACT,CAAC,EAxCW,cAAc,KAAd,cAAc,QAwCzB","sourcesContent":["/**\n * 高德地图定位相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { LatLng } from './common.types';\n\n/**\n * 坐标信息(基础定位)\n */\nexport interface Coordinates extends LatLng {\n /**\n * 海拔高度(米)\n */\n altitude: number;\n\n /**\n * 水平精度(米)\n */\n accuracy: number;\n\n /**\n * 移动方向(度,需要 GPS)\n */\n heading: number;\n\n /**\n * 移动速度(米/秒,需要 GPS)\n */\n speed: number;\n\n /**\n * 时间戳\n */\n timestamp: number;\n\n /**\n * 是否有可用坐标\n * @platform ios\n */\n isAvailableCoordinate?: boolean;\n\n /**\n * 格式化地址(仅在启用逆地理编码时可用)\n */\n address?: string;\n}\n\n/**\n * 逆地理编码信息\n */\nexport interface ReGeocode extends Coordinates {\n /**\n * 格式化地址\n */\n address: string;\n\n /**\n * 国家\n */\n country: string;\n\n /**\n * 省/直辖市,如 `湖北省`\n */\n province: string;\n\n /**\n * 市,如 `武汉市`\n */\n city: string;\n\n /**\n * 区,如 `武昌区`\n */\n district: string;\n\n /**\n * 城市编码\n */\n cityCode: string;\n\n /**\n * 区域编码\n */\n adCode: string;\n\n /**\n * 街道名称\n */\n street: string;\n\n /**\n * 门牌号\n */\n streetNumber: string;\n\n /**\n * 兴趣点名称\n */\n poiName: string;\n\n /**\n * 所属兴趣点名称\n */\n aoiName: string;\n\n /**\n * 定位信息描述\n * @platform android\n */\n description?: string;\n\n /**\n * 坐标系类型\n * @platform android\n */\n coordType?: 'GCJ02' | 'WGS84';\n\n /**\n * 室内定位建筑物ID\n * @platform android\n */\n buildingId?: string;\n}\n\n/**\n * 定位精度级别\n * @platform ios\n */\nexport enum LocationAccuracy {\n /**\n * 最适合导航\n */\n BestForNavigation = 0,\n\n /**\n * 最高精度(约10米,耗时约10秒)\n */\n Best = 1,\n\n /**\n * 10米精度\n */\n NearestTenMeters = 2,\n\n /**\n * 100米精度(推荐)\n */\n HundredMeters = 3,\n\n /**\n * 1公里精度\n */\n Kilometer = 4,\n\n /**\n * 3公里精度\n */\n ThreeKilometers = 5,\n}\n\n/**\n * 定位模式\n * @platform android\n */\nexport enum LocationMode {\n /**\n * 高精度模式(网络+卫星)\n */\n HighAccuracy = 1,\n\n /**\n * 低功耗模式(仅网络)\n */\n BatterySaving = 2,\n\n /**\n * 仅设备模式(仅卫星)\n */\n DeviceSensors = 3,\n}\n\n/**\n * 坐标系类型\n */\nexport enum CoordinateType {\n /**\n * 高德坐标系\n */\n AMap = -1,\n\n /**\n * 百度坐标系\n */\n Baidu = 0,\n\n /**\n * MapBar坐标系\n */\n MapBar = 1,\n\n /**\n * MapABC坐标系\n */\n MapABC = 2,\n\n /**\n * 搜搜地图坐标系\n */\n SoSoMap = 3,\n\n /**\n * 阿里云坐标系\n */\n AliYun = 4,\n\n /**\n * 谷歌坐标系\n */\n Google = 5,\n\n /**\n * GPS坐标系\n */\n GPS = 6,\n}\n\n/**\n * 地理语言\n */\nexport type GeoLanguage = 'DEFAULT' | 'EN' | 'ZH';\n\n/**\n * 网络协议\n * @platform android\n */\nexport type LocationProtocol = 'HTTP' | 'HTTPS';\n\n/**\n * 定位配置选项\n */\nexport interface LocationOptions {\n /**\n * 是否返回逆地理信息\n * @default true\n */\n withReGeocode?: boolean;\n\n /**\n * 定位精度\n * @platform ios\n */\n accuracy?: LocationAccuracy;\n\n /**\n * 定位模式\n * @platform android\n */\n mode?: LocationMode;\n\n /**\n * 是否单次定位\n * @platform android\n * @default false\n */\n onceLocation?: boolean;\n\n /**\n * 定位间隔(毫秒)\n * @platform android\n * @default 2000\n */\n interval?: number;\n\n /**\n * 定位超时时间(秒)\n * @platform ios\n * @default 10\n */\n timeout?: number;\n\n /**\n * 逆地理编码超时时间(秒)\n * @platform ios\n * @default 2\n */\n reGeocodeTimeout?: number;\n\n /**\n * 最小更新距离(米)\n * @platform ios\n */\n distanceFilter?: number;\n\n /**\n * 是否启用设备传感器\n * @platform android\n * @default false\n */\n sensorEnable?: boolean;\n\n /**\n * 是否允许WIFI刷新\n * @platform android\n * @default true\n */\n wifiScan?: boolean;\n\n /**\n * 是否GPS优先\n * @platform android\n * @default false\n */\n gpsFirst?: boolean;\n\n /**\n * 是否等待WIFI列表刷新\n * 定位精度会更高,但是定位速度会变慢1-3秒\n * @platform android\n * @default false\n */\n onceLocationLatest?: boolean;\n\n /**\n * 逆地理语言\n */\n geoLanguage?: GeoLanguage;\n\n /**\n * 是否允许后台定位\n * @default false\n */\n allowsBackgroundLocationUpdates?: boolean;\n\n /**\n * 是否自动暂停定位\n * @platform ios\n * @default false\n */\n pausesLocationUpdatesAutomatically?: boolean;\n\n /**\n * 是否使用缓存策略\n * @platform android\n * @default true\n */\n locationCacheEnable?: boolean;\n\n /**\n * 网络请求超时时间(毫秒)\n * @platform android\n * @default 30000\n */\n httpTimeout?: number;\n\n /**\n * 网络协议\n * @platform android\n * @default 'HTTP'\n */\n protocol?: LocationProtocol;\n}\n\n/**\n * 定位事件监听器\n */\nexport type LocationListener = (location: Coordinates | ReGeocode) => void;\n\n/**\n * 方向更新事件数据\n */\nexport interface HeadingUpdate {\n /** 磁北方向角度 (0-359.9) */\n magneticHeading: number;\n\n /** 真北方向角度 (0-359.9) */\n trueHeading: number;\n\n /** 方向精度 */\n headingAccuracy: number;\n\n /** X 轴原始数据 */\n x: number;\n\n /** Y 轴原始数据 */\n y: number;\n\n /** Z 轴原始数据 */\n z: number;\n\n /** 时间戳 */\n timestamp: number;\n}\n\n/**\n * 方向事件监听器\n */\nexport type HeadingListener = (heading: HeadingUpdate) => void;\n\n\n\n"]}
1
+ {"version":3,"file":"location.types.js","sourceRoot":"","sources":["../../../src/map/types/location.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmJH;;;GAGG;AACH,MAAM,CAAN,IAAY,gBA8BX;AA9BD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,iFAAqB,CAAA;IAErB;;OAEG;IACH,uDAAQ,CAAA;IAER;;OAEG;IACH,+EAAoB,CAAA;IAEpB;;OAEG;IACH,yEAAiB,CAAA;IAEjB;;OAEG;IACH,iEAAa,CAAA;IAEb;;OAEG;IACH,6EAAmB,CAAA;AACrB,CAAC,EA9BW,gBAAgB,KAAhB,gBAAgB,QA8B3B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,YAeX;AAfD,WAAY,YAAY;IACtB;;OAEG;IACH,+DAAgB,CAAA;IAEhB;;OAEG;IACH,iEAAiB,CAAA;IAEjB;;OAEG;IACH,iEAAiB,CAAA;AACnB,CAAC,EAfW,YAAY,KAAZ,YAAY,QAevB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAwCX;AAxCD,WAAY,cAAc;IACxB;;OAEG;IACH,oDAAS,CAAA;IAET;;OAEG;IACH,qDAAS,CAAA;IAET;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,yDAAW,CAAA;IAEX;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,uDAAU,CAAA;IAEV;;OAEG;IACH,iDAAO,CAAA;AACT,CAAC,EAxCW,cAAc,KAAd,cAAc,QAwCzB","sourcesContent":["/**\n * 高德地图定位相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { LatLng } from './common.types';\n\n/**\n * 坐标信息(基础定位)\n */\nexport interface Coordinates extends LatLng {\n /**\n * 海拔高度(米)\n */\n altitude: number;\n\n /**\n * 水平精度(米)\n */\n accuracy: number;\n\n /**\n * 移动方向(度,需要 GPS)\n */\n heading: number;\n\n /**\n * 移动速度(米/秒,需要 GPS)\n */\n speed: number;\n\n /**\n * 时间戳\n */\n timestamp: number;\n\n /**\n * 是否有可用坐标\n * @platform ios\n */\n isAvailableCoordinate?: boolean;\n\n /**\n * 格式化地址(仅在启用逆地理编码时可用)\n */\n address?: string;\n\n /**\n * 是否来自模拟位置\n * @platform android\n */\n isMock?: boolean;\n\n /**\n * 定位可信度等级(1-4)\n * @platform android\n */\n trustedLevel?: number;\n\n /**\n * 是否由软件模拟产生\n * @platform ios iOS 15+\n */\n isSimulatedBySoftware?: boolean;\n\n /**\n * 是否由外接设备产生\n * @platform ios iOS 15+\n */\n isProducedByAccessory?: boolean;\n}\n\n/**\n * 逆地理编码信息\n */\nexport interface ReGeocode extends Coordinates {\n /**\n * 格式化地址\n */\n address: string;\n\n /**\n * 国家\n */\n country: string;\n\n /**\n * 省/直辖市,如 `湖北省`\n */\n province: string;\n\n /**\n * 市,如 `武汉市`\n */\n city: string;\n\n /**\n * 区,如 `武昌区`\n */\n district: string;\n\n /**\n * 城市编码\n */\n cityCode: string;\n\n /**\n * 区域编码\n */\n adCode: string;\n\n /**\n * 街道名称\n */\n street: string;\n\n /**\n * 门牌号\n */\n streetNumber: string;\n\n /**\n * 兴趣点名称\n */\n poiName: string;\n\n /**\n * 所属兴趣点名称\n */\n aoiName: string;\n\n /**\n * 定位信息描述\n * @platform android\n */\n description?: string;\n\n /**\n * 坐标系类型\n * @platform android\n */\n coordType?: 'GCJ02' | 'WGS84';\n\n /**\n * 室内定位建筑物ID\n * @platform android\n */\n buildingId?: string;\n}\n\n/**\n * 定位精度级别\n * @platform ios\n */\nexport enum LocationAccuracy {\n /**\n * 最适合导航\n */\n BestForNavigation = 0,\n\n /**\n * 最高精度(约10米,耗时约10秒)\n */\n Best = 1,\n\n /**\n * 10米精度\n */\n NearestTenMeters = 2,\n\n /**\n * 100米精度(推荐)\n */\n HundredMeters = 3,\n\n /**\n * 1公里精度\n */\n Kilometer = 4,\n\n /**\n * 3公里精度\n */\n ThreeKilometers = 5,\n}\n\n/**\n * 定位模式\n * @platform android\n */\nexport enum LocationMode {\n /**\n * 高精度模式(网络+卫星)\n */\n HighAccuracy = 1,\n\n /**\n * 低功耗模式(仅网络)\n */\n BatterySaving = 2,\n\n /**\n * 仅设备模式(仅卫星)\n */\n DeviceSensors = 3,\n}\n\n/**\n * 坐标系类型\n */\nexport enum CoordinateType {\n /**\n * 高德坐标系\n */\n AMap = -1,\n\n /**\n * 百度坐标系\n */\n Baidu = 0,\n\n /**\n * MapBar坐标系\n */\n MapBar = 1,\n\n /**\n * MapABC坐标系\n */\n MapABC = 2,\n\n /**\n * 搜搜地图坐标系\n */\n SoSoMap = 3,\n\n /**\n * 阿里云坐标系\n */\n AliYun = 4,\n\n /**\n * 谷歌坐标系\n */\n Google = 5,\n\n /**\n * GPS坐标系\n */\n GPS = 6,\n}\n\n/**\n * 地理语言\n */\nexport type GeoLanguage = 'DEFAULT' | 'EN' | 'ZH';\n\n/**\n * 网络协议\n * @platform android\n */\nexport type LocationProtocol = 'HTTP' | 'HTTPS';\n\n/**\n * 定位配置选项\n */\nexport interface LocationOptions {\n /**\n * 是否返回逆地理信息\n * @default true\n */\n withReGeocode?: boolean;\n\n /**\n * 定位精度\n * @platform ios\n */\n accuracy?: LocationAccuracy;\n\n /**\n * 定位模式\n * @platform android\n */\n mode?: LocationMode;\n\n /**\n * 是否单次定位\n * @platform android\n * @default false\n */\n onceLocation?: boolean;\n\n /**\n * 定位间隔(毫秒)\n * @platform android\n * @default 2000\n */\n interval?: number;\n\n /**\n * 定位超时时间(秒)\n * @platform ios\n * @default 10\n */\n timeout?: number;\n\n /**\n * 逆地理编码超时时间(秒)\n * @platform ios\n * @default 2\n */\n reGeocodeTimeout?: number;\n\n /**\n * 最小更新距离(米)\n * @platform ios\n */\n distanceFilter?: number;\n\n /**\n * 是否启用设备传感器\n * @platform android\n * @default false\n */\n sensorEnable?: boolean;\n\n /**\n * 是否允许WIFI刷新\n * @platform android\n * @default true\n */\n wifiScan?: boolean;\n\n /**\n * 是否GPS优先\n * @platform android\n * @default false\n */\n gpsFirst?: boolean;\n\n /**\n * 是否允许返回模拟位置\n * @platform android\n * @default false\n */\n mockEnable?: boolean;\n\n /**\n * 是否等待WIFI列表刷新\n * 定位精度会更高,但是定位速度会变慢1-3秒\n * @platform android\n * @default false\n */\n onceLocationLatest?: boolean;\n\n /**\n * 逆地理语言\n */\n geoLanguage?: GeoLanguage;\n\n /**\n * 是否允许后台定位\n * @default false\n */\n allowsBackgroundLocationUpdates?: boolean;\n\n /**\n * 是否自动暂停定位\n * @platform ios\n * @default false\n */\n pausesLocationUpdatesAutomatically?: boolean;\n\n /**\n * 是否使用缓存策略\n * @platform android\n * @default true\n */\n locationCacheEnable?: boolean;\n\n /**\n * 网络请求超时时间(毫秒)\n * @platform android\n * @default 30000\n */\n httpTimeout?: number;\n\n /**\n * 网络协议\n * @platform android\n * @default 'HTTP'\n */\n protocol?: LocationProtocol;\n}\n\n/**\n * 定位事件监听器\n */\nexport type LocationListener = (location: Coordinates | ReGeocode) => void;\n\n/**\n * 方向更新事件数据\n */\nexport interface HeadingUpdate {\n /** 磁北方向角度 (0-359.9) */\n magneticHeading: number;\n\n /** 真北方向角度 (0-359.9) */\n trueHeading: number;\n\n /** 方向精度 */\n headingAccuracy: number;\n\n /** X 轴原始数据 */\n x: number;\n\n /** Y 轴原始数据 */\n y: number;\n\n /** Z 轴原始数据 */\n z: number;\n\n /** 时间戳 */\n timestamp: number;\n}\n\n/**\n * 方向事件监听器\n */\nexport type HeadingListener = (heading: HeadingUpdate) => void;\n\n\n"]}
@@ -109,6 +109,11 @@ export interface ExpoGaodeMapModule extends NativeModule<ExpoGaodeMapModuleEvent
109
109
  * @param gpsFirst true: GPS 优先; false: 网络优先
110
110
  */
111
111
  setGpsFirst(gpsFirst: boolean): void;
112
+ /**
113
+ * 设置是否允许返回模拟位置(Android)
114
+ * @param mockEnable true: 允许; false: 不允许
115
+ */
116
+ setMockEnable(mockEnable: boolean): void;
112
117
  /**
113
118
  * 设置是否等待 WiFi 列表刷新(Android)
114
119
  * @param onceLocationLatest true: 等待; false: 不等待
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/native-module.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC,wBAAwB,CAAC;IAChF;;OAEG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,wBAAwB,EAClD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACpC;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC1B,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAG1B;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC;;OAEG;IACH,mBAAmB,IAAI,IAAI,CAAC;IAE5B;;OAEG;IACH,gBAAgB,IAAI,aAAa,CAAC;IAElC;;;;OAIG;IACH,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9C;;;OAGG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGlF;;;OAGG;IACH,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC;;;OAGG;IACH,eAAe,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/C;;;OAGG;IACH,eAAe,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAE7C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;;OAGG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,OAAO,GAAG,IAAI,CAAC;IAE3D;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,qCAAqC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAE7D;;;OAGG;IACH,kCAAkC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAE9C;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5C;;OAEG;IACH,oBAAoB,IAAI,IAAI,CAAC;IAE7B;;OAEG;IACH,mBAAmB,IAAI,IAAI,CAAC;IAE5B;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAErD;;;OAGG;IACH,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEvD;;;;OAIG;IACH,mCAAmC,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjE;;;OAGG;IACH,eAAe,IAAI,IAAI,CAAC;IAExB;;;OAGG;IACH,qBAAqB,IAAI,OAAO,CAAC;IAEjC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAExE;;;;;OAKG;IACH,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC;IAEvF;;;;;;;;OAQG;IACH,gBAAgB,CACd,MAAM,EAAE,WAAW,EAAE,EACrB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAAC;IAIV;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAElF;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC;IAExF;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC;IAEvE;;;;;OAKG;IACH,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,GAAG,MAAM,CAAC;IAE/E;;;;;OAKG;IACH,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG;QAC/D,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IAET;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IAE3E;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG;QAC1C,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;KACrB,GAAG,IAAI,CAAC;IAET;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAElE;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAErE;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEnD;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,CAAC;IAEpE;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG;QAC3D,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC;IAET;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEhG;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IAEvE;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEtF;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAE5E;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAE/F;;;;;OAKG;IACH,mBAAmB,CACjB,MAAM,EAAE,KAAK,CAAC,WAAW,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAChD,cAAc,EAAE,MAAM,GACrB,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE"}
1
+ {"version":3,"file":"native-module.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/native-module.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.types.js","sourceRoot":"","sources":["../../../src/map/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 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 */\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 */\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: 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"]}
1
+ {"version":3,"file":"native-module.types.js","sourceRoot":"","sources":["../../../src/map/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 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 */\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 */\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 * 设置是否允许返回模拟位置(Android)\n * @param mockEnable true: 允许; false: 不允许\n */\n setMockEnable(mockEnable: 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: 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"]}
@@ -113,5 +113,9 @@ export declare class ErrorLogger {
113
113
  * 记录警告
114
114
  */
115
115
  static warn(message: string, details?: unknown): void;
116
+ /**
117
+ * 记录调试信息
118
+ */
119
+ static info(message: string, details?: unknown): void;
116
120
  }
117
121
  //# sourceMappingURL=ErrorHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/map/utils/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,SAAS;IACnB,eAAe;IACf,mBAAmB,wBAAwB;IAC3C,cAAc;IACd,kBAAkB,uBAAuB;IACzC,mBAAmB;IACnB,eAAe,oBAAoB;IACnC,YAAY;IACZ,iBAAiB,sBAAsB;IACvC,WAAW;IACX,eAAe,oBAAoB;IACnC,cAAc;IACd,yBAAyB,8BAA8B;IACvD,eAAe;IACf,wBAAwB,6BAA6B;IACrD,WAAW;IACX,iBAAiB,sBAAsB;IACvC,WAAW;IACX,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,KAAK,CAAC;gBAEV,OAAO,EAAE,YAAY;CAqBlC;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,UAAU,CAA4C;IAErE;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,aAAa;IAwBzC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa;IA8B5D;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,aAAa;IAuDzE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,GAAG,aAAa;IAiDlE;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa;IAuCrD;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,aAAa;IA+B/C;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;IAqC/D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,aAAa;IAgB9F;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,aAAa;IAmBzD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;CA6DvE;AAED;;GAEG;AACH,qBAAa,WAAW;IAEtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmD;IAE3E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO;IAIlC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa;IAU/B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAK/C"}
1
+ {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/map/utils/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,SAAS;IACnB,eAAe;IACf,mBAAmB,wBAAwB;IAC3C,cAAc;IACd,kBAAkB,uBAAuB;IACzC,mBAAmB;IACnB,eAAe,oBAAoB;IACnC,YAAY;IACZ,iBAAiB,sBAAsB;IACvC,WAAW;IACX,eAAe,oBAAoB;IACnC,cAAc;IACd,yBAAyB,8BAA8B;IACvD,eAAe;IACf,wBAAwB,6BAA6B;IACrD,WAAW;IACX,iBAAiB,sBAAsB;IACvC,WAAW;IACX,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,KAAK,CAAC;gBAEV,OAAO,EAAE,YAAY;CAqBlC;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,UAAU,CAA4C;IAErE;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,aAAa;IAwBzC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa;IA8B5D;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,aAAa;IAuDzE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,GAAG,aAAa;IAiDlE;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa;IAuCrD;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,aAAa;IA+B/C;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;IAqC/D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,aAAa;IAgB9F;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,aAAa;IAmBzD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;CA6DvE;AAED;;GAEG;AACH,qBAAa,WAAW;IAEtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmD;IAE3E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO;IAIlC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa;IAU/B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAM9C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAK/C"}
@@ -458,5 +458,13 @@ export class ErrorLogger {
458
458
  return;
459
459
  console.warn(`⚠️ expo-gaode-map-navigation: ${message}`, details || '');
460
460
  }
461
+ /**
462
+ * 记录调试信息
463
+ */
464
+ static info(message, details) {
465
+ if (!this.isEnabled)
466
+ return;
467
+ console.info(`expo-gaode-map-navigation: ${message}`, details || '');
468
+ }
461
469
  }
462
470
  //# sourceMappingURL=ErrorHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../../src/map/utils/ErrorHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 高德地图错误处理工具\n * 提供友好的错误提示和解决方案指引\n */\n\n/**\n * 错误类型枚举\n */\nexport enum ErrorType {\n /** SDK 未初始化 */\n SDK_NOT_INITIALIZED = 'SDK_NOT_INITIALIZED',\n /** 隐私协议未确认 */\n PRIVACY_NOT_AGREED = 'PRIVACY_NOT_AGREED',\n /** API Key 配置错误 */\n INVALID_API_KEY = 'INVALID_API_KEY',\n /** 权限未授予 */\n PERMISSION_DENIED = 'PERMISSION_DENIED',\n /** 定位失败 */\n LOCATION_FAILED = 'LOCATION_FAILED',\n /** 原生模块不可用 */\n NATIVE_MODULE_UNAVAILABLE = 'NATIVE_MODULE_UNAVAILABLE',\n /** 地图视图未初始化 */\n MAP_VIEW_NOT_INITIALIZED = 'MAP_VIEW_NOT_INITIALIZED',\n /** 参数错误 */\n INVALID_PARAMETER = 'INVALID_PARAMETER',\n /** 网络错误 */\n NETWORK_ERROR = 'NETWORK_ERROR',\n}\n\n/**\n * 错误详情接口\n */\nexport interface ErrorDetails {\n /** 错误类型 */\n type: ErrorType;\n /** 错误消息 */\n message: string;\n /** 解决方案 */\n solution: string;\n /** 文档链接 */\n docUrl?: string;\n /** 原始错误 */\n originalError?: Error;\n}\n\n/**\n * 自定义错误类\n */\nexport class GaodeMapError extends Error {\n type: ErrorType;\n solution: string;\n docUrl?: string;\n originalError?: Error;\n\n constructor(details: ErrorDetails) {\n const fullMessage = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n🗺️ 高德地图错误 [${details.type}]\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n❌ 错误信息:\n ${details.message}\n\n💡 解决方案:\n ${details.solution}\n\n${details.docUrl ? `📖 详细文档:\\n ${details.docUrl}\\n` : ''}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;\n super(fullMessage);\n this.name = 'GaodeMapError';\n this.type = details.type;\n this.solution = details.solution;\n this.docUrl = details.docUrl;\n this.originalError = details.originalError;\n }\n}\n\n/**\n * 错误处理器类\n */\nexport class ErrorHandler {\n private static docBaseUrl = 'https://TomWq.github.io/expo-gaode-map';\n\n /**\n * SDK 未初始化错误\n */\n static sdkNotInitialized(): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.SDK_NOT_INITIALIZED,\n message: '高德地图 SDK 尚未初始化',\n solution: `请在使用地图功能前先调用 initSDK():\n\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\nuseEffect(() => {\n // 在组件挂载时初始化\n ExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n });\n}, []);\n\n⚠️ 常见原因:\n1. 忘记调用 initSDK() 就使用了定位或地图功能\n2. initSDK() 调用时机过晚(应在 useEffect 中尽早调用)\n3. 使用 Config Plugin 但未重新构建原生代码`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * 隐私协议未确认错误\n */\n static privacyNotAgreed(scene: 'map' | 'sdk'): GaodeMapError {\n const sceneText = scene === 'map' ? '渲染 MapView' : '初始化 SDK';\n return new GaodeMapError({\n type: ErrorType.PRIVACY_NOT_AGREED,\n message: `调用高德地图前未完成隐私合规确认:${sceneText}`,\n solution: `请在调用任何高德地图 SDK 接口前,先明确完成隐私告知与同意:\n\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\n// 应用启动后,先展示你自己的隐私弹窗\nExpoGaodeMapModule.setPrivacyConfig({\n hasShow: true,\n hasContainsPrivacy: true,\n hasAgree: true,\n});\n\n// 然后再初始化 SDK / 渲染地图\nExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n});\n\n⚠️ 升级注意:\n1. 不能只 import 包后直接渲染 MapView\n2. Android 若未先设置隐私,原生 SDK 可能直接报 555570\n3. 推荐在应用首次启动时先弹出隐私协议,同意后再进入地图页面`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * API Key 配置错误\n */\n static invalidApiKey(platform: 'android' | 'ios' | 'both'): GaodeMapError {\n const platformText = {\n android: 'Android',\n ios: 'iOS',\n both: 'Android 和 iOS',\n }[platform];\n\n return new GaodeMapError({\n type: ErrorType.INVALID_API_KEY,\n message: `${platformText} API Key 配置错误或未配置`,\n solution: `⚠️ API Key 与 Bundle ID 不匹配是最常见的原因!\n\n请检查以下步骤:\n\n1️⃣ 确认 API Key 的配置:\n • 访问高德开放平台:https://lbs.amap.com/\n • 检查您的应用配置中的 Bundle ID 是否与当前项目一致\n • iOS Bundle ID:在 Xcode → Target → General → Bundle Identifier 查看\n • Android 包名:在 android/app/build.gradle → applicationId 查看\n\n2️⃣ 重新创建正确的 API Key(如果 Bundle ID 不同):\n • 在高德开放平台创建新应用\n • 填写正确的 Bundle ID(iOS)或包名(Android)\n • 获取新的 API Key\n\n3️⃣ 配置 API Key(推荐使用 Config Plugin):\n\n在 app.json 中配置:\n{\n \"expo\": {\n \"plugins\": [\n [\n \"expo-gaode-map-navigation\",\n {\n \"androidKey\": \"your-android-key\",\n \"iosKey\": \"your-ios-key\"\n }\n ]\n ]\n }\n}\n\n然后重新构建:\nnpx expo prebuild --clean\nnpx expo run:${platform === 'ios' ? 'ios' : 'android'}\n\n4️⃣ 或在代码中配置:\nExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n});`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * 权限未授予错误\n */\n static permissionDenied(permissionType: 'location'): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.PERMISSION_DENIED,\n message: '定位权限未授予,无法使用定位功能',\n solution: `请按以下步骤授予权限:\n\n1️⃣ 请求权限:\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\nconst checkPermission = async () => {\n // 检查权限状态\n const status = await ExpoGaodeMapModule.checkLocationPermission();\n \n if (!status.granted) {\n // 请求权限\n const result = await ExpoGaodeMapModule.requestLocationPermission();\n \n if (!result.granted) {\n // 用户拒绝授权,引导用户去设置\n Alert.alert(\n '需要定位权限',\n '请在设置中开启定位权限以使用地图功能',\n [\n { text: '取消', style: 'cancel' },\n { text: '去设置', onPress: () => Linking.openSettings() }\n ]\n );\n }\n }\n};\n\n2️⃣ iOS 配置(在 app.json 中):\n{\n \"expo\": {\n \"ios\": {\n \"infoPlist\": {\n \"NSLocationWhenInUseUsageDescription\": \"需要获取您的位置信息以显示地图\",\n \"NSLocationAlwaysAndWhenInUseUsageDescription\": \"需要获取您的位置信息\"\n }\n }\n }\n}\n\n3️⃣ Android 配置(Config Plugin 会自动添加):\n使用 expo-gaode-map-navigation 的 Config Plugin 会自动添加必要的权限声明`,\n docUrl: `${this.docBaseUrl}/guide/getting-started.html#权限配置`,\n });\n }\n\n /**\n * 定位失败错误\n */\n static locationFailed(reason?: string): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.LOCATION_FAILED,\n message: `定位失败${reason ? `:${reason}` : ''}`,\n solution: `⚠️ 最常见原因:API Key 与 Bundle ID 不匹配!\n\n请按以下顺序排查:\n\n1️⃣ 检查 API Key 配置(最常见问题):\n • 访问高德开放平台:https://lbs.amap.com/\n • 确认您的应用的 Bundle ID 与当前项目一致\n • iOS Bundle ID:在 Xcode → Target → General → Bundle Identifier\n • Android 包名:在 android/app/build.gradle → applicationId\n \n 如果 Bundle ID 不同,必须在高德平台重新创建应用并获取新 Key\n\n2️⃣ 检查设备 GPS 和网络:\n • 确认设备 GPS 已开启\n • 检查网络连接是否正常\n • 尝试在室外空旷处测试\n\n3️⃣ 检查定位权限:\n • iOS:设置 → 隐私 → 定位服务 → 允许应用访问\n • Android:设置 → 应用 → 权限管理 → 位置信息\n\n4️⃣ 配置定位参数(如果 API Key 正确但定位仍失败):\nExpoGaodeMapModule.setLocationTimeout(30); // 增加超时时间\nExpoGaodeMapModule.setInterval(2000); // 设置定位间隔\n\n// Android 特有配置\nExpoGaodeMapModule.setLocationMode(2); // 高精度模式\nExpoGaodeMapModule.setGpsFirst(true); // GPS 优先\n\n// iOS 特有配置\nExpoGaodeMapModule.setDesiredAccuracy(0); // 最佳精度`,\n docUrl: `${this.docBaseUrl}/api/location.html`,\n });\n }\n\n /**\n * 原生模块不可用错误\n */\n static nativeModuleUnavailable(): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.NATIVE_MODULE_UNAVAILABLE,\n message: 'expo-gaode-map-navigation 原生模块不可用',\n solution: `请检查以下步骤:\n\n1️⃣ 确认已正确安装:\nnpm install expo-gaode-map-navigation\n# 或\nbun install expo-gaode-map-navigation\n\n2️⃣ 重新构建原生代码:\nnpx expo prebuild --clean\nnpx expo run:android\nnpx expo run:ios\n\n3️⃣ 检查 Expo 版本兼容性:\n• expo-gaode-map-navigation 需要 Expo SDK 49+\n• 不支持 Expo Go,必须使用 Development Build\n\n4️⃣ 检查是否与其他包冲突:\n• 不能同时安装 expo-gaode-map 和 expo-gaode-map-navigation\n• 两个包选择其一使用\n\n5️⃣ 清理缓存后重试:\ncd android && ./gradlew clean && cd ..\ncd ios && pod deintegrate && pod install && cd ..`,\n docUrl: `${this.docBaseUrl}/guide/getting-started.html`,\n });\n }\n\n /**\n * 地图视图未初始化错误\n */\n static mapViewNotInitialized(methodName: string): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.MAP_VIEW_NOT_INITIALIZED,\n message: `无法调用 ${methodName}:地图视图尚未初始化`,\n solution: `请确保:\n\n1️⃣ MapView 已经渲染完成\n2️⃣ 使用 ref 获取地图实例后再调用方法\n\n正确用法:\nimport { MapView, MapViewRef } from 'expo-gaode-map-navigation';\n\nconst App = () => {\n const mapRef = useRef<MapViewRef>(null);\n \n // ❌ 错误:在渲染前调用\n // mapRef.current?.moveCamera(...);\n \n // ✅ 正确:等待地图加载完成\n const handleMapReady = () => {\n mapRef.current?.moveCamera({\n target: { latitude: 39.9, longitude: 116.4 },\n zoom: 15,\n });\n };\n \n return (\n <MapView\n ref={mapRef}\n onMapReady={handleMapReady}\n />\n );\n};`,\n docUrl: `${this.docBaseUrl}/api/mapview.html`,\n });\n }\n\n /**\n * 参数错误\n */\n static invalidParameter(paramName: string, expected: string, received: unknown): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.INVALID_PARAMETER,\n message: `参数 \"${paramName}\" 类型错误`,\n solution: `期望类型:${expected}\n实际接收:${typeof received} (${JSON.stringify(received)})\n\n请检查传入的参数是否符合要求。\n\n💡 提示:\n• 使用 TypeScript 可以在编译时发现类型错误\n• 参考 API 文档了解正确的参数类型`,\n docUrl: `${this.docBaseUrl}/api/`,\n });\n }\n\n /**\n * 网络错误\n */\n static networkError(originalError?: Error): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.NETWORK_ERROR,\n message: '网络请求失败',\n solution: `请检查:\n\n1️⃣ 网络连接是否正常\n2️⃣ API Key 是否有效\n3️⃣ 是否超出配额限制\n\n💡 如果问题持续,请:\n• 检查高德开放平台控制台\n• 查看 API 调用量和配额\n• 确认 Key 的服务是否已开通`,\n docUrl: `${this.docBaseUrl}/guide/troubleshooting.html`,\n originalError,\n });\n }\n\n /**\n * 包装原生错误,提供更友好的提示\n */\n static wrapNativeError(error: unknown, context: string): GaodeMapError {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const scene = context.includes('MapView') || context.includes('渲染') ? 'map' : 'sdk';\n\n if (\n errorMessage.includes('PRIVACY_NOT_AGREED') ||\n errorMessage.includes('隐私协议未完成确认') ||\n errorMessage.includes('隐私合规校验失败') ||\n errorMessage.includes('555570') ||\n errorMessage.includes('确保调用SDK任何接口前先调用更新隐私合规')\n ) {\n return this.privacyNotAgreed(scene);\n }\n \n // SDK 未初始化相关错误\n if (\n errorMessage.includes('not initialized') ||\n errorMessage.includes('未初始化') ||\n errorMessage.includes('SDK未设置')\n ) {\n return this.sdkNotInitialized();\n }\n \n // API Key 相关错误\n if (\n errorMessage.includes('key') ||\n errorMessage.includes('invalid') ||\n errorMessage.includes('鉴权失败')\n ) {\n return this.invalidApiKey('both');\n }\n \n // 权限相关错误\n if (\n errorMessage.includes('permission') ||\n errorMessage.includes('权限')\n ) {\n return this.permissionDenied('location');\n }\n \n // 定位相关错误\n if (\n errorMessage.includes('location') ||\n errorMessage.includes('定位')\n ) {\n return this.locationFailed(errorMessage);\n }\n \n // 通用错误\n return new GaodeMapError({\n type: ErrorType.INVALID_PARAMETER,\n message: `${context} 失败`,\n solution: `原始错误信息:${errorMessage}\n\n如果问题持续,请:\n1. 查看完整的错误堆栈\n2. 检查 API 调用参数\n3. 提交 Issue:https://github.com/TomWq/expo-gaode-map/issues`,\n originalError: error instanceof Error ? error : undefined,\n });\n }\n}\n\n/**\n * 错误日志工具\n */\nexport class ErrorLogger {\n // 兼容不同环境:Bun/Jest/Node\n private static isEnabled = typeof __DEV__ !== 'undefined' ? __DEV__ : true;\n\n /**\n * 启用/禁用错误日志\n */\n static setEnabled(enabled: boolean) {\n this.isEnabled = enabled;\n }\n\n /**\n * 记录错误\n */\n static log(error: GaodeMapError) {\n if (!this.isEnabled) return;\n\n console.error(error.message);\n \n if (error.originalError) {\n console.error('原始错误:', error.originalError);\n }\n }\n\n /**\n * 记录警告\n */\n static warn(message: string, details?: unknown) {\n if (!this.isEnabled) return;\n \n console.warn(`⚠️ expo-gaode-map-navigation: ${message}`, details || '');\n }\n}\n"]}
1
+ {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../../src/map/utils/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,SAmBX;AAnBD,WAAY,SAAS;IACnB,eAAe;IACf,wDAA2C,CAAA;IAC3C,cAAc;IACd,sDAAyC,CAAA;IACzC,mBAAmB;IACnB,gDAAmC,CAAA;IACnC,YAAY;IACZ,oDAAuC,CAAA;IACvC,WAAW;IACX,gDAAmC,CAAA;IACnC,cAAc;IACd,oEAAuD,CAAA;IACvD,eAAe;IACf,kEAAqD,CAAA;IACrD,WAAW;IACX,oDAAuC,CAAA;IACvC,WAAW;IACX,4CAA+B,CAAA;AACjC,CAAC,EAnBW,SAAS,KAAT,SAAS,QAmBpB;AAkBD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,CAAY;IAChB,QAAQ,CAAS;IACjB,MAAM,CAAU;IAChB,aAAa,CAAS;IAEtB,YAAY,OAAqB;QAC/B,MAAM,WAAW,GAAG;;eAET,OAAO,CAAC,IAAI;;;;KAItB,OAAO,CAAC,OAAO;;;KAGf,OAAO,CAAC,QAAQ;;EAEnB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;CACzD,CAAC;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,UAAU,GAAG,wCAAwC,CAAC;IAErE;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACtB,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,mBAAmB;YACnC,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE;;;;;;;;;;;;;;;+BAee;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,4BAA4B;SACvD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAoB;QAC1C,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,kBAAkB;YAClC,OAAO,EAAE,oBAAoB,SAAS,EAAE;YACxC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;gCAoBgB;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,4BAA4B;SACvD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAoC;QACvD,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,SAAS;YAClB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,eAAe;SACtB,CAAC,QAAQ,CAAC,CAAC;QAEZ,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,eAAe;YAC/B,OAAO,EAAE,GAAG,YAAY,mBAAmB;YAC3C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAkCD,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;;;;;;IAMjD;YACE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,4BAA4B;SACvD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAA0B;QAChD,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAwC0C;YACpD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,kCAAkC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAe;QACnC,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,eAAe;YAC/B,OAAO,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA8BkC;YAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,oBAAoB;SAC/C,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,uBAAuB;QAC5B,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,yBAAyB;YACzC,OAAO,EAAE,mCAAmC;YAC5C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;kDAsBkC;YAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,6BAA6B;SACxD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAkB;QAC7C,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,wBAAwB;YACxC,OAAO,EAAE,QAAQ,UAAU,YAAY;YACvC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4Bb;YACG,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,mBAAmB;SAC9C,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAiB;QAC5E,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,OAAO,EAAE,OAAO,SAAS,QAAQ;YACjC,QAAQ,EAAE,QAAQ,QAAQ;OACzB,OAAO,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;qBAM9B;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,OAAO;SAClC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,aAAqB;QACvC,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,aAAa;YAC7B,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE;;;;;;;;;kBASE;YACZ,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,6BAA6B;YACvD,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAc,EAAE,OAAe;QACpD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAEpF,IACE,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC3C,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAC9C,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,eAAe;QACf,IACE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACxC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,eAAe;QACf,IACE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;YAChC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC7B,CAAC;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,SAAS;QACT,IACE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,SAAS;QACT,IACE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO;QACP,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,OAAO,EAAE,GAAG,OAAO,KAAK;YACxB,QAAQ,EAAE,UAAU,YAAY;;;;;2DAKqB;YACrD,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC1D,CAAC,CAAC;IACL,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB,uBAAuB;IACf,MAAM,CAAC,SAAS,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAgB;QAChC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,KAAoB;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,OAAiB;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,OAAO,CAAC,IAAI,CAAC,kCAAkC,OAAO,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,OAAiB;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,OAAO,CAAC,IAAI,CAAC,8BAA8B,OAAO,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC","sourcesContent":["/**\n * 高德地图错误处理工具\n * 提供友好的错误提示和解决方案指引\n */\n\n/**\n * 错误类型枚举\n */\nexport enum ErrorType {\n /** SDK 未初始化 */\n SDK_NOT_INITIALIZED = 'SDK_NOT_INITIALIZED',\n /** 隐私协议未确认 */\n PRIVACY_NOT_AGREED = 'PRIVACY_NOT_AGREED',\n /** API Key 配置错误 */\n INVALID_API_KEY = 'INVALID_API_KEY',\n /** 权限未授予 */\n PERMISSION_DENIED = 'PERMISSION_DENIED',\n /** 定位失败 */\n LOCATION_FAILED = 'LOCATION_FAILED',\n /** 原生模块不可用 */\n NATIVE_MODULE_UNAVAILABLE = 'NATIVE_MODULE_UNAVAILABLE',\n /** 地图视图未初始化 */\n MAP_VIEW_NOT_INITIALIZED = 'MAP_VIEW_NOT_INITIALIZED',\n /** 参数错误 */\n INVALID_PARAMETER = 'INVALID_PARAMETER',\n /** 网络错误 */\n NETWORK_ERROR = 'NETWORK_ERROR',\n}\n\n/**\n * 错误详情接口\n */\nexport interface ErrorDetails {\n /** 错误类型 */\n type: ErrorType;\n /** 错误消息 */\n message: string;\n /** 解决方案 */\n solution: string;\n /** 文档链接 */\n docUrl?: string;\n /** 原始错误 */\n originalError?: Error;\n}\n\n/**\n * 自定义错误类\n */\nexport class GaodeMapError extends Error {\n type: ErrorType;\n solution: string;\n docUrl?: string;\n originalError?: Error;\n\n constructor(details: ErrorDetails) {\n const fullMessage = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n🗺️ 高德地图错误 [${details.type}]\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n❌ 错误信息:\n ${details.message}\n\n💡 解决方案:\n ${details.solution}\n\n${details.docUrl ? `📖 详细文档:\\n ${details.docUrl}\\n` : ''}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;\n super(fullMessage);\n this.name = 'GaodeMapError';\n this.type = details.type;\n this.solution = details.solution;\n this.docUrl = details.docUrl;\n this.originalError = details.originalError;\n }\n}\n\n/**\n * 错误处理器类\n */\nexport class ErrorHandler {\n private static docBaseUrl = 'https://TomWq.github.io/expo-gaode-map';\n\n /**\n * SDK 未初始化错误\n */\n static sdkNotInitialized(): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.SDK_NOT_INITIALIZED,\n message: '高德地图 SDK 尚未初始化',\n solution: `请在使用地图功能前先调用 initSDK():\n\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\nuseEffect(() => {\n // 在组件挂载时初始化\n ExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n });\n}, []);\n\n⚠️ 常见原因:\n1. 忘记调用 initSDK() 就使用了定位或地图功能\n2. initSDK() 调用时机过晚(应在 useEffect 中尽早调用)\n3. 使用 Config Plugin 但未重新构建原生代码`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * 隐私协议未确认错误\n */\n static privacyNotAgreed(scene: 'map' | 'sdk'): GaodeMapError {\n const sceneText = scene === 'map' ? '渲染 MapView' : '初始化 SDK';\n return new GaodeMapError({\n type: ErrorType.PRIVACY_NOT_AGREED,\n message: `调用高德地图前未完成隐私合规确认:${sceneText}`,\n solution: `请在调用任何高德地图 SDK 接口前,先明确完成隐私告知与同意:\n\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\n// 应用启动后,先展示你自己的隐私弹窗\nExpoGaodeMapModule.setPrivacyConfig({\n hasShow: true,\n hasContainsPrivacy: true,\n hasAgree: true,\n});\n\n// 然后再初始化 SDK / 渲染地图\nExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n});\n\n⚠️ 升级注意:\n1. 不能只 import 包后直接渲染 MapView\n2. Android 若未先设置隐私,原生 SDK 可能直接报 555570\n3. 推荐在应用首次启动时先弹出隐私协议,同意后再进入地图页面`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * API Key 配置错误\n */\n static invalidApiKey(platform: 'android' | 'ios' | 'both'): GaodeMapError {\n const platformText = {\n android: 'Android',\n ios: 'iOS',\n both: 'Android 和 iOS',\n }[platform];\n\n return new GaodeMapError({\n type: ErrorType.INVALID_API_KEY,\n message: `${platformText} API Key 配置错误或未配置`,\n solution: `⚠️ API Key 与 Bundle ID 不匹配是最常见的原因!\n\n请检查以下步骤:\n\n1️⃣ 确认 API Key 的配置:\n • 访问高德开放平台:https://lbs.amap.com/\n • 检查您的应用配置中的 Bundle ID 是否与当前项目一致\n • iOS Bundle ID:在 Xcode → Target → General → Bundle Identifier 查看\n • Android 包名:在 android/app/build.gradle → applicationId 查看\n\n2️⃣ 重新创建正确的 API Key(如果 Bundle ID 不同):\n • 在高德开放平台创建新应用\n • 填写正确的 Bundle ID(iOS)或包名(Android)\n • 获取新的 API Key\n\n3️⃣ 配置 API Key(推荐使用 Config Plugin):\n\n在 app.json 中配置:\n{\n \"expo\": {\n \"plugins\": [\n [\n \"expo-gaode-map-navigation\",\n {\n \"androidKey\": \"your-android-key\",\n \"iosKey\": \"your-ios-key\"\n }\n ]\n ]\n }\n}\n\n然后重新构建:\nnpx expo prebuild --clean\nnpx expo run:${platform === 'ios' ? 'ios' : 'android'}\n\n4️⃣ 或在代码中配置:\nExpoGaodeMapModule.initSDK({\n androidKey: 'your-android-key',\n iosKey: 'your-ios-key',\n});`,\n docUrl: `${this.docBaseUrl}/guide/initialization.html`,\n });\n }\n\n /**\n * 权限未授予错误\n */\n static permissionDenied(permissionType: 'location'): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.PERMISSION_DENIED,\n message: '定位权限未授予,无法使用定位功能',\n solution: `请按以下步骤授予权限:\n\n1️⃣ 请求权限:\nimport {ExpoGaodeMapModule} from 'expo-gaode-map-navigation';\n\nconst checkPermission = async () => {\n // 检查权限状态\n const status = await ExpoGaodeMapModule.checkLocationPermission();\n \n if (!status.granted) {\n // 请求权限\n const result = await ExpoGaodeMapModule.requestLocationPermission();\n \n if (!result.granted) {\n // 用户拒绝授权,引导用户去设置\n Alert.alert(\n '需要定位权限',\n '请在设置中开启定位权限以使用地图功能',\n [\n { text: '取消', style: 'cancel' },\n { text: '去设置', onPress: () => Linking.openSettings() }\n ]\n );\n }\n }\n};\n\n2️⃣ iOS 配置(在 app.json 中):\n{\n \"expo\": {\n \"ios\": {\n \"infoPlist\": {\n \"NSLocationWhenInUseUsageDescription\": \"需要获取您的位置信息以显示地图\",\n \"NSLocationAlwaysAndWhenInUseUsageDescription\": \"需要获取您的位置信息\"\n }\n }\n }\n}\n\n3️⃣ Android 配置(Config Plugin 会自动添加):\n使用 expo-gaode-map-navigation 的 Config Plugin 会自动添加必要的权限声明`,\n docUrl: `${this.docBaseUrl}/guide/getting-started.html#权限配置`,\n });\n }\n\n /**\n * 定位失败错误\n */\n static locationFailed(reason?: string): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.LOCATION_FAILED,\n message: `定位失败${reason ? `:${reason}` : ''}`,\n solution: `⚠️ 最常见原因:API Key 与 Bundle ID 不匹配!\n\n请按以下顺序排查:\n\n1️⃣ 检查 API Key 配置(最常见问题):\n • 访问高德开放平台:https://lbs.amap.com/\n • 确认您的应用的 Bundle ID 与当前项目一致\n • iOS Bundle ID:在 Xcode → Target → General → Bundle Identifier\n • Android 包名:在 android/app/build.gradle → applicationId\n \n 如果 Bundle ID 不同,必须在高德平台重新创建应用并获取新 Key\n\n2️⃣ 检查设备 GPS 和网络:\n • 确认设备 GPS 已开启\n • 检查网络连接是否正常\n • 尝试在室外空旷处测试\n\n3️⃣ 检查定位权限:\n • iOS:设置 → 隐私 → 定位服务 → 允许应用访问\n • Android:设置 → 应用 → 权限管理 → 位置信息\n\n4️⃣ 配置定位参数(如果 API Key 正确但定位仍失败):\nExpoGaodeMapModule.setLocationTimeout(30); // 增加超时时间\nExpoGaodeMapModule.setInterval(2000); // 设置定位间隔\n\n// Android 特有配置\nExpoGaodeMapModule.setLocationMode(2); // 高精度模式\nExpoGaodeMapModule.setGpsFirst(true); // GPS 优先\n\n// iOS 特有配置\nExpoGaodeMapModule.setDesiredAccuracy(0); // 最佳精度`,\n docUrl: `${this.docBaseUrl}/api/location.html`,\n });\n }\n\n /**\n * 原生模块不可用错误\n */\n static nativeModuleUnavailable(): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.NATIVE_MODULE_UNAVAILABLE,\n message: 'expo-gaode-map-navigation 原生模块不可用',\n solution: `请检查以下步骤:\n\n1️⃣ 确认已正确安装:\nnpm install expo-gaode-map-navigation\n# 或\nbun install expo-gaode-map-navigation\n\n2️⃣ 重新构建原生代码:\nnpx expo prebuild --clean\nnpx expo run:android\nnpx expo run:ios\n\n3️⃣ 检查 Expo 版本兼容性:\n• expo-gaode-map-navigation 需要 Expo SDK 49+\n• 不支持 Expo Go,必须使用 Development Build\n\n4️⃣ 检查是否与其他包冲突:\n• 不能同时安装 expo-gaode-map 和 expo-gaode-map-navigation\n• 两个包选择其一使用\n\n5️⃣ 清理缓存后重试:\ncd android && ./gradlew clean && cd ..\ncd ios && pod deintegrate && pod install && cd ..`,\n docUrl: `${this.docBaseUrl}/guide/getting-started.html`,\n });\n }\n\n /**\n * 地图视图未初始化错误\n */\n static mapViewNotInitialized(methodName: string): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.MAP_VIEW_NOT_INITIALIZED,\n message: `无法调用 ${methodName}:地图视图尚未初始化`,\n solution: `请确保:\n\n1️⃣ MapView 已经渲染完成\n2️⃣ 使用 ref 获取地图实例后再调用方法\n\n正确用法:\nimport { MapView, MapViewRef } from 'expo-gaode-map-navigation';\n\nconst App = () => {\n const mapRef = useRef<MapViewRef>(null);\n \n // ❌ 错误:在渲染前调用\n // mapRef.current?.moveCamera(...);\n \n // ✅ 正确:等待地图加载完成\n const handleMapReady = () => {\n mapRef.current?.moveCamera({\n target: { latitude: 39.9, longitude: 116.4 },\n zoom: 15,\n });\n };\n \n return (\n <MapView\n ref={mapRef}\n onMapReady={handleMapReady}\n />\n );\n};`,\n docUrl: `${this.docBaseUrl}/api/mapview.html`,\n });\n }\n\n /**\n * 参数错误\n */\n static invalidParameter(paramName: string, expected: string, received: unknown): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.INVALID_PARAMETER,\n message: `参数 \"${paramName}\" 类型错误`,\n solution: `期望类型:${expected}\n实际接收:${typeof received} (${JSON.stringify(received)})\n\n请检查传入的参数是否符合要求。\n\n💡 提示:\n• 使用 TypeScript 可以在编译时发现类型错误\n• 参考 API 文档了解正确的参数类型`,\n docUrl: `${this.docBaseUrl}/api/`,\n });\n }\n\n /**\n * 网络错误\n */\n static networkError(originalError?: Error): GaodeMapError {\n return new GaodeMapError({\n type: ErrorType.NETWORK_ERROR,\n message: '网络请求失败',\n solution: `请检查:\n\n1️⃣ 网络连接是否正常\n2️⃣ API Key 是否有效\n3️⃣ 是否超出配额限制\n\n💡 如果问题持续,请:\n• 检查高德开放平台控制台\n• 查看 API 调用量和配额\n• 确认 Key 的服务是否已开通`,\n docUrl: `${this.docBaseUrl}/guide/troubleshooting.html`,\n originalError,\n });\n }\n\n /**\n * 包装原生错误,提供更友好的提示\n */\n static wrapNativeError(error: unknown, context: string): GaodeMapError {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const scene = context.includes('MapView') || context.includes('渲染') ? 'map' : 'sdk';\n\n if (\n errorMessage.includes('PRIVACY_NOT_AGREED') ||\n errorMessage.includes('隐私协议未完成确认') ||\n errorMessage.includes('隐私合规校验失败') ||\n errorMessage.includes('555570') ||\n errorMessage.includes('确保调用SDK任何接口前先调用更新隐私合规')\n ) {\n return this.privacyNotAgreed(scene);\n }\n \n // SDK 未初始化相关错误\n if (\n errorMessage.includes('not initialized') ||\n errorMessage.includes('未初始化') ||\n errorMessage.includes('SDK未设置')\n ) {\n return this.sdkNotInitialized();\n }\n \n // API Key 相关错误\n if (\n errorMessage.includes('key') ||\n errorMessage.includes('invalid') ||\n errorMessage.includes('鉴权失败')\n ) {\n return this.invalidApiKey('both');\n }\n \n // 权限相关错误\n if (\n errorMessage.includes('permission') ||\n errorMessage.includes('权限')\n ) {\n return this.permissionDenied('location');\n }\n \n // 定位相关错误\n if (\n errorMessage.includes('location') ||\n errorMessage.includes('定位')\n ) {\n return this.locationFailed(errorMessage);\n }\n \n // 通用错误\n return new GaodeMapError({\n type: ErrorType.INVALID_PARAMETER,\n message: `${context} 失败`,\n solution: `原始错误信息:${errorMessage}\n\n如果问题持续,请:\n1. 查看完整的错误堆栈\n2. 检查 API 调用参数\n3. 提交 Issue:https://github.com/TomWq/expo-gaode-map/issues`,\n originalError: error instanceof Error ? error : undefined,\n });\n }\n}\n\n/**\n * 错误日志工具\n */\nexport class ErrorLogger {\n // 兼容不同环境:Bun/Jest/Node\n private static isEnabled = typeof __DEV__ !== 'undefined' ? __DEV__ : true;\n\n /**\n * 启用/禁用错误日志\n */\n static setEnabled(enabled: boolean) {\n this.isEnabled = enabled;\n }\n\n /**\n * 记录错误\n */\n static log(error: GaodeMapError) {\n if (!this.isEnabled) return;\n\n console.error(error.message);\n \n if (error.originalError) {\n console.error('原始错误:', error.originalError);\n }\n }\n\n /**\n * 记录警告\n */\n static warn(message: string, details?: unknown) {\n if (!this.isEnabled) return;\n \n console.warn(`⚠️ expo-gaode-map-navigation: ${message}`, details || '');\n }\n\n /**\n * 记录调试信息\n */\n static info(message: string, details?: unknown) {\n if (!this.isEnabled) return;\n\n console.info(`expo-gaode-map-navigation: ${message}`, details || '');\n }\n}\n"]}
@@ -206,6 +206,13 @@ public class ExpoGaodeMapModule: Module {
206
206
  "speed": location.speed,
207
207
  "timestamp": location.timestamp.timeIntervalSince1970 * 1000
208
208
  ]
209
+
210
+ if #available(iOS 15.0, *) {
211
+ if let sourceInformation = location.sourceInformation {
212
+ locationData["isSimulatedBySoftware"] = sourceInformation.isSimulatedBySoftware
213
+ locationData["isProducedByAccessory"] = sourceInformation.isProducedByAccessory
214
+ }
215
+ }
209
216
 
210
217
  if let regeocode = regeocode {
211
218
  locationData["address"] = regeocode.formattedAddress
@@ -684,6 +691,13 @@ public class ExpoGaodeMapModule: Module {
684
691
  Function("setGpsFirst") { (_: Bool) in
685
692
  // iOS 不支持此配置
686
693
  }
694
+
695
+ /**
696
+ * 设置是否允许模拟位置 (Android 专用,iOS 空实现)
697
+ */
698
+ Function("setMockEnable") { (_: Bool) in
699
+ // iOS 不支持此配置
700
+ }
687
701
 
688
702
  /**
689
703
  * 设置是否等待 WIFI 列表刷新 (Android 专用,iOS 空实现)
@@ -1,4 +1,5 @@
1
1
  #include "ClusterEngine.hpp"
2
+ #include "GeometryEngine.hpp"
2
3
  #include "QuadTree.hpp"
3
4
  #include <cmath>
4
5
  #include <algorithm>
@@ -11,19 +12,8 @@ static inline double cluster_toRadians(double degrees) {
11
12
  return degrees * 0.017453292519943295;
12
13
  }
13
14
 
14
- static double haversineMeters(const ClusterPoint& a, const ClusterPoint& b) {
15
- const double lat1 = cluster_toRadians(a.lat);
16
- const double lat2 = cluster_toRadians(b.lat);
17
- const double dLat = lat2 - lat1;
18
- const double dLon = cluster_toRadians(b.lon - a.lon);
19
-
20
- const double sinHalfLat = std::sin(dLat * 0.5);
21
- const double sinHalfLon = std::sin(dLon * 0.5);
22
-
23
- const double h = sinHalfLat * sinHalfLat + std::cos(lat1) * std::cos(lat2) * sinHalfLon * sinHalfLon;
24
- const double c = 2.0 * std::atan2(std::sqrt(h), std::sqrt(1.0 - h));
25
-
26
- return 6371000.0 * c;
15
+ static double clusterDistanceMeters(const ClusterPoint& a, const ClusterPoint& b) {
16
+ return calculateDistance(a.lat, a.lon, b.lat, b.lon);
27
17
  }
28
18
 
29
19
  std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points, double radiusMeters) {
@@ -95,7 +85,7 @@ std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points
95
85
  if (globalVisited[neighbor.index]) continue;
96
86
 
97
87
  // Precise check
98
- if (haversineMeters(p, neighbor) <= radiusMeters) {
88
+ if (clusterDistanceMeters(p, neighbor) <= radiusMeters) {
99
89
  cluster.indices.push_back(neighbor.index);
100
90
  globalVisited[neighbor.index] = true;
101
91
  }
@@ -1,20 +1,9 @@
1
1
  #pragma once
2
2
 
3
- #include <vector>
3
+ #include "ClusterTypes.hpp"
4
4
 
5
5
  namespace gaodemap {
6
6
 
7
- struct ClusterPoint {
8
- double lat;
9
- double lon;
10
- int index;
11
- };
12
-
13
- struct ClusterOutput {
14
- int centerIndex;
15
- std::vector<int> indices;
16
- };
17
-
18
7
  std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points, double radiusMeters);
19
8
 
20
9
  }
@@ -0,0 +1,18 @@
1
+ #pragma once
2
+
3
+ #include <vector>
4
+
5
+ namespace gaodemap {
6
+
7
+ struct ClusterPoint {
8
+ double lat;
9
+ double lon;
10
+ int index;
11
+ };
12
+
13
+ struct ClusterOutput {
14
+ int centerIndex;
15
+ std::vector<int> indices;
16
+ };
17
+
18
+ }
@@ -1,5 +1,6 @@
1
1
  #include "ColorParser.hpp"
2
2
  #include <algorithm>
3
+ #include <cctype>
3
4
  #include <sstream>
4
5
  #include <vector>
5
6
  #include <map>
@@ -109,13 +110,29 @@ static const std::map<std::string, uint32_t> NAMED_COLORS = {
109
110
  {"transparent", 0x00000000}
110
111
  };
111
112
 
113
+ static bool isSpace(unsigned char ch) {
114
+ return std::isspace(ch) != 0;
115
+ }
116
+
117
+ static char toLower(unsigned char ch) {
118
+ return static_cast<char>(std::tolower(ch));
119
+ }
120
+
121
+ static bool isHexDigit(unsigned char ch) {
122
+ return std::isxdigit(ch) != 0;
123
+ }
124
+
112
125
  uint32_t parseColor(const std::string& colorString) {
113
126
  std::string str = colorString;
114
127
  // Remove whitespace
115
- str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());
128
+ str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char ch) {
129
+ return isSpace(ch);
130
+ }), str.end());
116
131
  // Lowercase for named colors check
117
132
  std::string lowerStr = str;
118
- std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
133
+ std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), [](unsigned char ch) {
134
+ return toLower(ch);
135
+ });
119
136
 
120
137
  if (NAMED_COLORS.count(lowerStr)) {
121
138
  return NAMED_COLORS.at(lowerStr);
@@ -125,7 +142,9 @@ uint32_t parseColor(const std::string& colorString) {
125
142
  return parseRgba(str); // pass original str with potential spaces if needed, but we removed them
126
143
  }
127
144
 
128
- if (lowerStr.find("#") == 0 || std::all_of(lowerStr.begin(), lowerStr.end(), ::isxdigit)) {
145
+ if (lowerStr.find("#") == 0 || std::all_of(lowerStr.begin(), lowerStr.end(), [](unsigned char ch) {
146
+ return isHexDigit(ch);
147
+ })) {
129
148
  return parseHex(str);
130
149
  }
131
150
 
@@ -44,7 +44,7 @@ static inline double mercatorY01(double lat) {
44
44
  return y;
45
45
  }
46
46
 
47
- static double wrappedSpan01(std::vector<double> xs) {
47
+ static double wrappedSpan01(std::vector<double>& xs) {
48
48
  if (xs.size() <= 1) {
49
49
  return 0.0;
50
50
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  #include <vector>
4
4
  #include <memory>
5
- #include "ClusterEngine.hpp"
5
+ #include "ClusterTypes.hpp"
6
6
 
7
7
  namespace gaodemap {
8
8
 
@@ -190,6 +190,13 @@ class LocationManager: NSObject, AMapLocationManagerDelegate {
190
190
  "timestamp": location.timestamp.timeIntervalSince1970 * 1000
191
191
  ]
192
192
 
193
+ if #available(iOS 15.0, *) {
194
+ if let sourceInformation = location.sourceInformation {
195
+ data["isSimulatedBySoftware"] = sourceInformation.isSimulatedBySoftware
196
+ data["isProducedByAccessory"] = sourceInformation.isProducedByAccessory
197
+ }
198
+ }
199
+
193
200
  if let geo = reGeocode {
194
201
  data["address"] = geo.formattedAddress
195
202
  data["province"] = geo.province
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-gaode-map-navigation",
3
- "version": "2.0.16",
4
- "description": "React Native AMap (Gaode Map) navigation module for Expo: route planning and turn-by-turn navigation, includes full map features.",
3
+ "version": "2.0.18",
4
+ "description": "Expo Modules AMap (Gaode Map) navigation for Expo/React Native: Config Plugin, route planning, turn-by-turn navigation, map features, and react-native-amap3d migration guidance.",
5
5
  "author": "TomWq <582752848@qq.com> (https://github.com/TomWq)",
6
6
  "repository": {
7
7
  "type": "git",
@@ -65,8 +65,13 @@
65
65
  "expo-gaode-map-navigation",
66
66
  "expo-amap",
67
67
  "react-native-amap",
68
+ "react-native-amap3d",
69
+ "react-native-amap3d-alternative",
68
70
  "react-native-gaode-map",
69
71
  "rn-amap-navigation",
72
+ "expo-gaode",
73
+ "eas-build",
74
+ "fabric",
70
75
  "amap",
71
76
  "gaode-map",
72
77
  "navigation",
@@ -1,4 +1,5 @@
1
1
  #include "ClusterEngine.hpp"
2
+ #include "GeometryEngine.hpp"
2
3
  #include "QuadTree.hpp"
3
4
  #include <cmath>
4
5
  #include <algorithm>
@@ -11,19 +12,8 @@ static inline double cluster_toRadians(double degrees) {
11
12
  return degrees * 0.017453292519943295;
12
13
  }
13
14
 
14
- static double haversineMeters(const ClusterPoint& a, const ClusterPoint& b) {
15
- const double lat1 = cluster_toRadians(a.lat);
16
- const double lat2 = cluster_toRadians(b.lat);
17
- const double dLat = lat2 - lat1;
18
- const double dLon = cluster_toRadians(b.lon - a.lon);
19
-
20
- const double sinHalfLat = std::sin(dLat * 0.5);
21
- const double sinHalfLon = std::sin(dLon * 0.5);
22
-
23
- const double h = sinHalfLat * sinHalfLat + std::cos(lat1) * std::cos(lat2) * sinHalfLon * sinHalfLon;
24
- const double c = 2.0 * std::atan2(std::sqrt(h), std::sqrt(1.0 - h));
25
-
26
- return 6371000.0 * c;
15
+ static double clusterDistanceMeters(const ClusterPoint& a, const ClusterPoint& b) {
16
+ return calculateDistance(a.lat, a.lon, b.lat, b.lon);
27
17
  }
28
18
 
29
19
  std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points, double radiusMeters) {
@@ -95,7 +85,7 @@ std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points
95
85
  if (globalVisited[neighbor.index]) continue;
96
86
 
97
87
  // Precise check
98
- if (haversineMeters(p, neighbor) <= radiusMeters) {
88
+ if (clusterDistanceMeters(p, neighbor) <= radiusMeters) {
99
89
  cluster.indices.push_back(neighbor.index);
100
90
  globalVisited[neighbor.index] = true;
101
91
  }
@@ -1,20 +1,9 @@
1
1
  #pragma once
2
2
 
3
- #include <vector>
3
+ #include "ClusterTypes.hpp"
4
4
 
5
5
  namespace gaodemap {
6
6
 
7
- struct ClusterPoint {
8
- double lat;
9
- double lon;
10
- int index;
11
- };
12
-
13
- struct ClusterOutput {
14
- int centerIndex;
15
- std::vector<int> indices;
16
- };
17
-
18
7
  std::vector<ClusterOutput> clusterPoints(const std::vector<ClusterPoint>& points, double radiusMeters);
19
8
 
20
9
  }
@@ -0,0 +1,18 @@
1
+ #pragma once
2
+
3
+ #include <vector>
4
+
5
+ namespace gaodemap {
6
+
7
+ struct ClusterPoint {
8
+ double lat;
9
+ double lon;
10
+ int index;
11
+ };
12
+
13
+ struct ClusterOutput {
14
+ int centerIndex;
15
+ std::vector<int> indices;
16
+ };
17
+
18
+ }
@@ -1,5 +1,6 @@
1
1
  #include "ColorParser.hpp"
2
2
  #include <algorithm>
3
+ #include <cctype>
3
4
  #include <sstream>
4
5
  #include <vector>
5
6
  #include <map>
@@ -109,13 +110,29 @@ static const std::map<std::string, uint32_t> NAMED_COLORS = {
109
110
  {"transparent", 0x00000000}
110
111
  };
111
112
 
113
+ static bool isSpace(unsigned char ch) {
114
+ return std::isspace(ch) != 0;
115
+ }
116
+
117
+ static char toLower(unsigned char ch) {
118
+ return static_cast<char>(std::tolower(ch));
119
+ }
120
+
121
+ static bool isHexDigit(unsigned char ch) {
122
+ return std::isxdigit(ch) != 0;
123
+ }
124
+
112
125
  uint32_t parseColor(const std::string& colorString) {
113
126
  std::string str = colorString;
114
127
  // Remove whitespace
115
- str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());
128
+ str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char ch) {
129
+ return isSpace(ch);
130
+ }), str.end());
116
131
  // Lowercase for named colors check
117
132
  std::string lowerStr = str;
118
- std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
133
+ std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), [](unsigned char ch) {
134
+ return toLower(ch);
135
+ });
119
136
 
120
137
  if (NAMED_COLORS.count(lowerStr)) {
121
138
  return NAMED_COLORS.at(lowerStr);
@@ -125,7 +142,9 @@ uint32_t parseColor(const std::string& colorString) {
125
142
  return parseRgba(str); // pass original str with potential spaces if needed, but we removed them
126
143
  }
127
144
 
128
- if (lowerStr.find("#") == 0 || std::all_of(lowerStr.begin(), lowerStr.end(), ::isxdigit)) {
145
+ if (lowerStr.find("#") == 0 || std::all_of(lowerStr.begin(), lowerStr.end(), [](unsigned char ch) {
146
+ return isHexDigit(ch);
147
+ })) {
129
148
  return parseHex(str);
130
149
  }
131
150
 
@@ -44,7 +44,7 @@ static inline double mercatorY01(double lat) {
44
44
  return y;
45
45
  }
46
46
 
47
- static double wrappedSpan01(std::vector<double> xs) {
47
+ static double wrappedSpan01(std::vector<double>& xs) {
48
48
  if (xs.size() <= 1) {
49
49
  return 0.0;
50
50
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  #include <vector>
4
4
  #include <memory>
5
- #include "ClusterEngine.hpp"
5
+ #include "ClusterTypes.hpp"
6
6
 
7
7
  namespace gaodemap {
8
8