expo-gaode-map 2.2.34 → 2.2.35-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/android/src/main/java/expo/modules/gaodemap/ExpoGaodeMapModule.kt +54 -52
- package/build/components/FoldableMapView.d.ts.map +1 -1
- package/build/components/FoldableMapView.js +46 -52
- package/build/components/FoldableMapView.js.map +1 -1
- package/build/components/overlays/Marker.d.ts.map +1 -1
- package/build/components/overlays/Marker.js +26 -30
- package/build/components/overlays/Marker.js.map +1 -1
- package/build/hooks/useRoutePlayback.d.ts +6 -0
- package/build/hooks/useRoutePlayback.d.ts.map +1 -1
- package/build/hooks/useRoutePlayback.js +23 -2
- package/build/hooks/useRoutePlayback.js.map +1 -1
- package/build/module/geometry.d.ts +3 -0
- package/build/module/geometry.d.ts.map +1 -1
- package/build/module/geometry.js +3 -0
- package/build/module/geometry.js.map +1 -1
- package/build/module/location.d.ts +39 -0
- package/build/module/location.d.ts.map +1 -1
- package/build/module/location.js +39 -0
- package/build/module/location.js.map +1 -1
- package/build/module/nativeModule.d.ts +11 -0
- package/build/module/nativeModule.d.ts.map +1 -1
- package/build/module/nativeModule.js +14 -0
- package/build/module/nativeModule.js.map +1 -1
- package/build/module/normalizers.d.ts +28 -0
- package/build/module/normalizers.d.ts.map +1 -1
- package/build/module/normalizers.js +25 -0
- package/build/module/normalizers.js.map +1 -1
- package/build/module/privacy.d.ts +7 -1
- package/build/module/privacy.d.ts.map +1 -1
- package/build/module/privacy.js +4 -1
- package/build/module/privacy.js.map +1 -1
- package/build/module/sdk.d.ts +3 -0
- package/build/module/sdk.d.ts.map +1 -1
- package/build/module/sdk.js.map +1 -1
- package/build/types/common.types.d.ts +2 -2
- package/build/types/common.types.d.ts.map +1 -1
- package/build/types/common.types.js.map +1 -1
- package/build/utils/GeoUtils.d.ts +3 -0
- package/build/utils/GeoUtils.d.ts.map +1 -1
- package/build/utils/GeoUtils.js.map +1 -1
- package/build/utils/PermissionUtils.d.ts.map +1 -1
- package/build/utils/PermissionUtils.js +3 -0
- package/build/utils/PermissionUtils.js.map +1 -1
- package/build/utils/RouteUtils.d.ts +45 -0
- package/build/utils/RouteUtils.d.ts.map +1 -1
- package/build/utils/RouteUtils.js +91 -7
- package/build/utils/RouteUtils.js.map +1 -1
- package/build/utils/lazyNativeViewManager.d.ts +3 -0
- package/build/utils/lazyNativeViewManager.d.ts.map +1 -1
- package/build/utils/lazyNativeViewManager.js.map +1 -1
- package/ios/modules/LocationManager.swift +2 -4
- package/ios/overlays/MarkerView.swift +40 -26
- package/package.json +7 -2
package/build/module/location.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 位置模块
|
|
3
|
+
*/
|
|
1
4
|
import { Platform } from 'react-native';
|
|
2
5
|
import { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';
|
|
3
6
|
import { normalizeLatLng } from '../utils/GeoUtils';
|
|
@@ -5,6 +8,9 @@ import { getNativeModule } from './nativeModule';
|
|
|
5
8
|
import { normalizeCoordinateType, normalizeGeoLanguage, normalizeHeadingEvent, normalizeLocationResult, normalizePermissionStatus, } from './normalizers';
|
|
6
9
|
import { assertPrivacyReady } from './privacy';
|
|
7
10
|
export const locationMethods = {
|
|
11
|
+
/**
|
|
12
|
+
* 开始位置更新
|
|
13
|
+
*/
|
|
8
14
|
start() {
|
|
9
15
|
assertPrivacyReady('sdk');
|
|
10
16
|
const nativeModule = getNativeModule(true);
|
|
@@ -17,6 +23,9 @@ export const locationMethods = {
|
|
|
17
23
|
ErrorLogger.warn('start 失败', { error });
|
|
18
24
|
}
|
|
19
25
|
},
|
|
26
|
+
/**
|
|
27
|
+
* 停止位置更新
|
|
28
|
+
*/
|
|
20
29
|
stop() {
|
|
21
30
|
assertPrivacyReady('sdk');
|
|
22
31
|
const nativeModule = getNativeModule(true);
|
|
@@ -29,6 +38,10 @@ export const locationMethods = {
|
|
|
29
38
|
ErrorLogger.warn('stop 失败', { error });
|
|
30
39
|
}
|
|
31
40
|
},
|
|
41
|
+
/**
|
|
42
|
+
* 检查是否正在定位
|
|
43
|
+
* @returns 是否正在定位
|
|
44
|
+
*/
|
|
32
45
|
isStarted() {
|
|
33
46
|
assertPrivacyReady('sdk');
|
|
34
47
|
const nativeModule = getNativeModule(true);
|
|
@@ -42,6 +55,10 @@ export const locationMethods = {
|
|
|
42
55
|
return Promise.resolve(false);
|
|
43
56
|
}
|
|
44
57
|
},
|
|
58
|
+
/**
|
|
59
|
+
* 获取当前位置
|
|
60
|
+
* @returns 当前位置
|
|
61
|
+
*/
|
|
45
62
|
async getCurrentLocation() {
|
|
46
63
|
assertPrivacyReady('sdk');
|
|
47
64
|
const nativeModule = getNativeModule();
|
|
@@ -56,6 +73,12 @@ export const locationMethods = {
|
|
|
56
73
|
throw ErrorHandler.wrapNativeError(error, '获取当前位置');
|
|
57
74
|
}
|
|
58
75
|
},
|
|
76
|
+
/**
|
|
77
|
+
* 坐标转换
|
|
78
|
+
* @param coordinate 坐标点
|
|
79
|
+
* @param type 坐标类型
|
|
80
|
+
* @returns 转换后的坐标
|
|
81
|
+
*/
|
|
59
82
|
async coordinateConvert(coordinate, type) {
|
|
60
83
|
assertPrivacyReady('sdk');
|
|
61
84
|
const nativeModule = getNativeModule();
|
|
@@ -74,6 +97,10 @@ export const locationMethods = {
|
|
|
74
97
|
throw ErrorHandler.wrapNativeError(error, '坐标转换');
|
|
75
98
|
}
|
|
76
99
|
},
|
|
100
|
+
/**
|
|
101
|
+
* 设置语言
|
|
102
|
+
* @param language 语言
|
|
103
|
+
*/
|
|
77
104
|
setGeoLanguage(language) {
|
|
78
105
|
assertPrivacyReady('sdk');
|
|
79
106
|
const nativeModule = getNativeModule(true);
|
|
@@ -86,6 +113,10 @@ export const locationMethods = {
|
|
|
86
113
|
ErrorLogger.warn('setGeoLanguage 失败', { language, error });
|
|
87
114
|
}
|
|
88
115
|
},
|
|
116
|
+
/**
|
|
117
|
+
* 设置是否使用逆地理编码
|
|
118
|
+
* @param isReGeocode 是否使用逆地理编码
|
|
119
|
+
*/
|
|
89
120
|
setLocatingWithReGeocode(isReGeocode) {
|
|
90
121
|
assertPrivacyReady('sdk');
|
|
91
122
|
const nativeModule = getNativeModule(true);
|
|
@@ -98,6 +129,10 @@ export const locationMethods = {
|
|
|
98
129
|
ErrorLogger.warn('setLocatingWithReGeocode 失败', { isReGeocode, error });
|
|
99
130
|
}
|
|
100
131
|
},
|
|
132
|
+
/**
|
|
133
|
+
* 检查是否已启用后台位置更新
|
|
134
|
+
* @returns 是否已启用后台位置更新
|
|
135
|
+
*/
|
|
101
136
|
get isBackgroundLocationEnabled() {
|
|
102
137
|
const nativeModule = getNativeModule(true);
|
|
103
138
|
if (!nativeModule)
|
|
@@ -177,6 +212,10 @@ export const locationMethods = {
|
|
|
177
212
|
throw ErrorHandler.wrapNativeError(error, '打开设置');
|
|
178
213
|
}
|
|
179
214
|
},
|
|
215
|
+
/**
|
|
216
|
+
* 设置是否允许后台位置更新
|
|
217
|
+
* @param allows 是否允许后台位置更新
|
|
218
|
+
*/
|
|
180
219
|
setAllowsBackgroundLocationUpdates(allows) {
|
|
181
220
|
assertPrivacyReady('sdk');
|
|
182
221
|
const nativeModule = getNativeModule();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/module/location.ts"],"names":[],"mappings":"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","sourcesContent":["import { Platform } from 'react-native';\n\nimport type {\n Coordinates,\n CoordinateType,\n GeoLanguage,\n HeadingListener,\n LatLng,\n LatLngPoint,\n LocationListener,\n ReGeocode,\n} from '../types';\nimport type { PermissionStatus } from '../types/common.types';\nimport { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';\nimport { normalizeLatLng } from '../utils/GeoUtils';\nimport { getNativeModule } from './nativeModule';\nimport {\n normalizeCoordinateType,\n normalizeGeoLanguage,\n normalizeHeadingEvent,\n normalizeLocationResult,\n normalizePermissionStatus,\n} from './normalizers';\nimport { assertPrivacyReady } from './privacy';\n\nexport const locationMethods = {\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 const location = await nativeModule.getCurrentLocation();\n return normalizeLocationResult(location);\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 const normalizedCoordinate = normalizeLatLng(coordinate);\n const normalizedType = normalizeCoordinateType(type);\n\n if (normalizedType === null) {\n return normalizedCoordinate;\n }\n\n return await nativeModule.coordinateConvert(normalizedCoordinate, normalizedType);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n\n setGeoLanguage(language: GeoLanguage | string): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setGeoLanguage(normalizeGeoLanguage(language));\n } catch (error) {\n ErrorLogger.warn('setGeoLanguage 失败', { language, 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 normalizePermissionStatus(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 = normalizePermissionStatus(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 = normalizePermissionStatus(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', (location) => {\n listener(normalizeLocationResult(location));\n }) || {\n remove: () => { },\n };\n },\n\n /**\n * 添加方向监听器(iOS)\n * 自动归一化 heading 事件字段,兼容旧版原生返回结构\n */\n addHeadingListener(listener: HeadingListener): { 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('onHeadingUpdate', (heading) => {\n listener(normalizeHeadingEvent(heading));\n }) || {\n remove: () => { },\n };\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/module/location.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 位置模块\n */\n\nimport { Platform } from 'react-native';\n\nimport type {\n Coordinates,\n CoordinateType,\n GeoLanguage,\n HeadingListener,\n LatLng,\n LatLngPoint,\n LocationListener,\n ReGeocode,\n} from '../types';\nimport type { PermissionStatus } from '../types/common.types';\nimport { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';\nimport { normalizeLatLng } from '../utils/GeoUtils';\nimport { getNativeModule } from './nativeModule';\nimport {\n normalizeCoordinateType,\n normalizeGeoLanguage,\n normalizeHeadingEvent,\n normalizeLocationResult,\n normalizePermissionStatus,\n} from './normalizers';\nimport { assertPrivacyReady } from './privacy';\n\n\nexport const locationMethods = {\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 * 停止位置更新\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 /**\n * 检查是否正在定位\n * @returns 是否正在定位\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 * 获取当前位置\n * @returns 当前位置\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 const location = await nativeModule.getCurrentLocation();\n return normalizeLocationResult(location);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取当前位置');\n }\n },\n /**\n * 坐标转换\n * @param coordinate 坐标点\n * @param type 坐标类型\n * @returns 转换后的坐标\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 const normalizedCoordinate = normalizeLatLng(coordinate);\n const normalizedType = normalizeCoordinateType(type);\n\n if (normalizedType === null) {\n return normalizedCoordinate;\n }\n\n return await nativeModule.coordinateConvert(normalizedCoordinate, normalizedType);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n /**\n * 设置语言\n * @param language 语言\n */\n setGeoLanguage(language: GeoLanguage | string): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setGeoLanguage(normalizeGeoLanguage(language));\n } catch (error) {\n ErrorLogger.warn('setGeoLanguage 失败', { language, error });\n }\n },\n /**\n * 设置是否使用逆地理编码\n * @param isReGeocode 是否使用逆地理编码\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 * 检查是否已启用后台位置更新\n * @returns 是否已启用后台位置更新\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 normalizePermissionStatus(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 = normalizePermissionStatus(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 = normalizePermissionStatus(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 * 设置是否允许后台位置更新\n * @param allows 是否允许后台位置更新\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', (location) => {\n listener(normalizeLocationResult(location));\n }) || {\n remove: () => { },\n };\n },\n\n /**\n * 添加方向监听器(iOS)\n * 自动归一化 heading 事件字段,兼容旧版原生返回结构\n */\n addHeadingListener(listener: HeadingListener): { 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('onHeadingUpdate', (heading) => {\n listener(normalizeHeadingEvent(heading));\n }) || {\n remove: () => { },\n };\n },\n};\n"]}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { NativeExpoGaodeMapModule } from '../types/native-module.types';
|
|
2
|
+
/**
|
|
3
|
+
* 获取原生模块
|
|
4
|
+
* @param optional 是否可选
|
|
5
|
+
* @returns 原生模块
|
|
6
|
+
*/
|
|
2
7
|
export declare function getNativeModule(optional?: boolean): NativeExpoGaodeMapModule | null;
|
|
8
|
+
/**
|
|
9
|
+
* 获取原生模块的属性或方法
|
|
10
|
+
* @param module 原生模块
|
|
11
|
+
* @param prop 属性或方法名
|
|
12
|
+
* @returns 原生模块的属性或方法
|
|
13
|
+
*/
|
|
3
14
|
export declare function getBoundNativeValue(module: NativeExpoGaodeMapModule, prop: PropertyKey): unknown;
|
|
4
15
|
export declare const nativeModule: NativeExpoGaodeMapModule;
|
|
5
16
|
//# sourceMappingURL=nativeModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeModule.d.ts","sourceRoot":"","sources":["../../src/module/nativeModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nativeModule.d.ts","sourceRoot":"","sources":["../../src/module/nativeModule.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAK7E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,UAAQ,GAAG,wBAAwB,GAAG,IAAI,CAgBjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,WAAW,GAChB,OAAO,CAOT;AAED,eAAO,MAAM,YAAY,0BAKvB,CAAC"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 高德地图原生模块
|
|
3
|
+
*/
|
|
1
4
|
import { requireNativeModule } from 'expo';
|
|
2
5
|
import { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';
|
|
3
6
|
let nativeModuleCache = null;
|
|
7
|
+
/**
|
|
8
|
+
* 获取原生模块
|
|
9
|
+
* @param optional 是否可选
|
|
10
|
+
* @returns 原生模块
|
|
11
|
+
*/
|
|
4
12
|
export function getNativeModule(optional = false) {
|
|
5
13
|
if (nativeModuleCache) {
|
|
6
14
|
return nativeModuleCache;
|
|
@@ -18,6 +26,12 @@ export function getNativeModule(optional = false) {
|
|
|
18
26
|
throw moduleError;
|
|
19
27
|
}
|
|
20
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* 获取原生模块的属性或方法
|
|
31
|
+
* @param module 原生模块
|
|
32
|
+
* @param prop 属性或方法名
|
|
33
|
+
* @returns 原生模块的属性或方法
|
|
34
|
+
*/
|
|
21
35
|
export function getBoundNativeValue(module, prop) {
|
|
22
36
|
const value = Reflect.get(module, prop, module);
|
|
23
37
|
if (typeof value === 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeModule.js","sourceRoot":"","sources":["../../src/module/nativeModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAElE,IAAI,iBAAiB,GAAoC,IAAI,CAAC;AAE9D,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAG,KAAK;IAC9C,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,iBAAiB,GAAG,mBAAmB,CAA2B,cAAc,CAAC,CAAC;QAClF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7B,MAAM,WAAW,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAgC,EAChC,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,EAA8B,EAAE;IACpE,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;CACF,CAAC,CAAC","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"nativeModule.js","sourceRoot":"","sources":["../../src/module/nativeModule.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAElE,IAAI,iBAAiB,GAAoC,IAAI,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAG,KAAK;IAC9C,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,iBAAiB,GAAG,mBAAmB,CAA2B,cAAc,CAAC,CAAC;QAClF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7B,MAAM,WAAW,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAgC,EAChC,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,EAA8B,EAAE;IACpE,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;CACF,CAAC,CAAC","sourcesContent":["/**\n * 高德地图原生模块\n */\nimport { requireNativeModule } from 'expo';\n\nimport type { NativeExpoGaodeMapModule } from '../types/native-module.types';\nimport { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';\n\nlet nativeModuleCache: NativeExpoGaodeMapModule | null = null;\n\n/**\n * 获取原生模块\n * @param optional 是否可选\n * @returns 原生模块\n */\nexport function 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\n/**\n * 获取原生模块的属性或方法\n * @param module 原生模块\n * @param prop 属性或方法名\n * @returns 原生模块的属性或方法\n */\nexport function 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\nexport const nativeModule = new Proxy({} as NativeExpoGaodeMapModule, {\n get(_target, prop) {\n const module = getNativeModule(true);\n return module ? getBoundNativeValue(module, prop) : undefined;\n },\n});\n"]}
|
|
@@ -1,9 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 坐标类型归一化器
|
|
3
|
+
*/
|
|
1
4
|
import type { Coordinates, CoordinateType, GeoLanguage, HeadingUpdate, LatLngPoint, ReGeocode } from '../types';
|
|
2
5
|
import type { PermissionStatus } from '../types/common.types';
|
|
6
|
+
/**
|
|
7
|
+
* 归一化坐标类型
|
|
8
|
+
* @param type 坐标类型
|
|
9
|
+
* @returns 归一化后的坐标类型
|
|
10
|
+
*/
|
|
3
11
|
export declare function normalizeCoordinateType(type: CoordinateType): number | null;
|
|
12
|
+
/**
|
|
13
|
+
* 归一化语言语言
|
|
14
|
+
* @param language 语言
|
|
15
|
+
* @returns 归一化后的语言
|
|
16
|
+
*/
|
|
4
17
|
export declare function normalizeGeoLanguage(language: GeoLanguage | string): GeoLanguage;
|
|
18
|
+
/**
|
|
19
|
+
* 归一化位置结果
|
|
20
|
+
* @param location 位置结果
|
|
21
|
+
* @returns 归一化后的位置结果
|
|
22
|
+
*/
|
|
5
23
|
export declare function normalizeLocationResult<T extends Coordinates | ReGeocode>(location: T): T;
|
|
24
|
+
/**
|
|
25
|
+
* 归一化方向更新事件
|
|
26
|
+
* @param payload 方向更新事件
|
|
27
|
+
* @returns 归一化后的方向更新事件
|
|
28
|
+
*/
|
|
6
29
|
export declare function normalizeHeadingEvent(payload: HeadingUpdate | Record<string, unknown>): HeadingUpdate;
|
|
30
|
+
/**
|
|
31
|
+
* 归一化权限状态
|
|
32
|
+
* @param permission 权限状态
|
|
33
|
+
* @returns 归一化后的权限状态
|
|
34
|
+
*/
|
|
7
35
|
export declare function normalizePermissionStatus(permission: PermissionStatus | Record<string, unknown>): PermissionStatus;
|
|
8
36
|
export type { LatLngPoint };
|
|
9
37
|
//# sourceMappingURL=normalizers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizers.d.ts","sourceRoot":"","sources":["../../src/module/normalizers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalizers.d.ts","sourceRoot":"","sources":["../../src/module/normalizers.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAqB3E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,CAyBhF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAQzF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAcrG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAqDlH;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { ErrorHandler } from '../utils/ErrorHandler';
|
|
2
2
|
import { CoordinateType as CoordinateTypeValue } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* 归一化坐标类型
|
|
5
|
+
* @param type 坐标类型
|
|
6
|
+
* @returns 归一化后的坐标类型
|
|
7
|
+
*/
|
|
3
8
|
export function normalizeCoordinateType(type) {
|
|
4
9
|
switch (type) {
|
|
5
10
|
case CoordinateTypeValue.AMap:
|
|
@@ -18,6 +23,11 @@ export function normalizeCoordinateType(type) {
|
|
|
18
23
|
throw ErrorHandler.invalidParameter('type', 'CoordinateType.AMap | MapBar | Baidu | MapABC | SoSoMap | Google | GPS', type);
|
|
19
24
|
}
|
|
20
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* 归一化语言语言
|
|
28
|
+
* @param language 语言
|
|
29
|
+
* @returns 归一化后的语言
|
|
30
|
+
*/
|
|
21
31
|
export function normalizeGeoLanguage(language) {
|
|
22
32
|
const normalized = String(language).trim().toUpperCase();
|
|
23
33
|
switch (normalized) {
|
|
@@ -39,6 +49,11 @@ export function normalizeGeoLanguage(language) {
|
|
|
39
49
|
throw ErrorHandler.invalidParameter('language', "'DEFAULT' | 'EN' | 'ZH' | 常见别名(如 'en', 'zh-CN')", language);
|
|
40
50
|
}
|
|
41
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* 归一化位置结果
|
|
54
|
+
* @param location 位置结果
|
|
55
|
+
* @returns 归一化后的位置结果
|
|
56
|
+
*/
|
|
42
57
|
export function normalizeLocationResult(location) {
|
|
43
58
|
const rawLocation = location;
|
|
44
59
|
const heading = rawLocation.heading ?? rawLocation.bearing ?? 0;
|
|
@@ -47,6 +62,11 @@ export function normalizeLocationResult(location) {
|
|
|
47
62
|
heading,
|
|
48
63
|
};
|
|
49
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* 归一化方向更新事件
|
|
67
|
+
* @param payload 方向更新事件
|
|
68
|
+
* @returns 归一化后的方向更新事件
|
|
69
|
+
*/
|
|
50
70
|
export function normalizeHeadingEvent(payload) {
|
|
51
71
|
const raw = payload;
|
|
52
72
|
const fallbackHeading = Number(raw.heading ?? raw.trueHeading ?? raw.magneticHeading ?? 0);
|
|
@@ -61,6 +81,11 @@ export function normalizeHeadingEvent(payload) {
|
|
|
61
81
|
timestamp: Number(raw.timestamp ?? Date.now()),
|
|
62
82
|
};
|
|
63
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* 归一化权限状态
|
|
86
|
+
* @param permission 权限状态
|
|
87
|
+
* @returns 归一化后的权限状态
|
|
88
|
+
*/
|
|
64
89
|
export function normalizePermissionStatus(permission) {
|
|
65
90
|
const raw = permission;
|
|
66
91
|
const rawStatus = String(raw.status ?? '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../src/module/normalizers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../src/module/normalizers.ts"],"names":[],"mappings":"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","sourcesContent":["\n/**\n * 坐标类型归一化器\n */\nimport type {\n Coordinates,\n CoordinateType,\n GeoLanguage,\n HeadingUpdate,\n LatLngPoint,\n ReGeocode,\n} from '../types';\nimport type { PermissionStatus } from '../types/common.types';\nimport { ErrorHandler } from '../utils/ErrorHandler';\nimport { CoordinateType as CoordinateTypeValue } from '../types';\n\n\n/**\n * 归一化坐标类型\n * @param type 坐标类型\n * @returns 归一化后的坐标类型\n */\nexport function normalizeCoordinateType(type: CoordinateType): number | null {\n switch (type) {\n case CoordinateTypeValue.AMap:\n return null;\n case CoordinateTypeValue.MapBar:\n return 1;\n case CoordinateTypeValue.Baidu:\n return 2;\n case CoordinateTypeValue.MapABC:\n case CoordinateTypeValue.SoSoMap:\n return 3;\n case CoordinateTypeValue.Google:\n case CoordinateTypeValue.GPS:\n return 0;\n default:\n throw ErrorHandler.invalidParameter(\n 'type',\n 'CoordinateType.AMap | MapBar | Baidu | MapABC | SoSoMap | Google | GPS',\n type\n );\n }\n}\n\n/**\n * 归一化语言语言\n * @param language 语言\n * @returns 归一化后的语言\n */\nexport function normalizeGeoLanguage(language: GeoLanguage | string): GeoLanguage {\n const normalized = String(language).trim().toUpperCase();\n\n switch (normalized) {\n case 'DEFAULT':\n return 'DEFAULT';\n case 'EN':\n case 'EN-US':\n case 'EN_US':\n case 'EN-GB':\n case 'EN_GB':\n return 'EN';\n case 'ZH':\n case 'ZH-CN':\n case 'ZH_CN':\n case 'ZH-HANS':\n case 'ZH_HANS':\n return 'ZH';\n default:\n throw ErrorHandler.invalidParameter(\n 'language',\n \"'DEFAULT' | 'EN' | 'ZH' | 常见别名(如 'en', 'zh-CN')\",\n language\n );\n }\n}\n\n/**\n * 归一化位置结果\n * @param location 位置结果\n * @returns 归一化后的位置结果\n */\nexport function normalizeLocationResult<T extends Coordinates | ReGeocode>(location: T): T {\n const rawLocation = location as T & { bearing?: number; heading?: number };\n const heading = rawLocation.heading ?? rawLocation.bearing ?? 0;\n\n return {\n ...rawLocation,\n heading,\n };\n}\n\n/**\n * 归一化方向更新事件\n * @param payload 方向更新事件\n * @returns 归一化后的方向更新事件\n */\nexport function normalizeHeadingEvent(payload: HeadingUpdate | Record<string, unknown>): HeadingUpdate {\n const raw = payload as Record<string, unknown>;\n const fallbackHeading = Number(raw.heading ?? raw.trueHeading ?? raw.magneticHeading ?? 0);\n const fallbackAccuracy = Number(raw.accuracy ?? raw.headingAccuracy ?? 0);\n\n return {\n magneticHeading: Number(raw.magneticHeading ?? fallbackHeading),\n trueHeading: Number(raw.trueHeading ?? fallbackHeading),\n headingAccuracy: fallbackAccuracy,\n x: Number(raw.x ?? 0),\n y: Number(raw.y ?? 0),\n z: Number(raw.z ?? 0),\n timestamp: Number(raw.timestamp ?? Date.now()),\n };\n}\n\n/**\n * 归一化权限状态\n * @param permission 权限状态\n * @returns 归一化后的权限状态\n */\nexport function normalizePermissionStatus(permission: PermissionStatus | Record<string, unknown>): PermissionStatus {\n const raw = permission as Partial<PermissionStatus> & Record<string, unknown>;\n const rawStatus = String(raw.status ?? '');\n\n let status: 'granted' | 'denied' | 'undetermined';\n switch (rawStatus) {\n case 'granted':\n case 'authorizedAlways':\n case 'authorizedWhenInUse':\n status = 'granted';\n break;\n case 'denied':\n case 'restricted':\n status = 'denied';\n break;\n case 'notDetermined':\n case 'undetermined':\n case 'unknown':\n case '':\n default:\n status = 'undetermined';\n break;\n }\n\n const granted = Boolean(raw.granted ?? (status === 'granted'));\n const shouldShowRationale =\n typeof raw.shouldShowRationale === 'boolean' ? raw.shouldShowRationale : undefined;\n const explicitPermanent =\n typeof raw.isPermanentlyDenied === 'boolean' ? raw.isPermanentlyDenied : undefined;\n\n const canAskAgain =\n typeof raw.canAskAgain === 'boolean'\n ? raw.canAskAgain\n : granted\n ? true\n : typeof shouldShowRationale === 'boolean'\n ? shouldShowRationale\n : explicitPermanent === true\n ? false\n : status === 'undetermined';\n\n const isPermanentlyDenied =\n explicitPermanent ??\n (!granted && status === 'denied' && canAskAgain === false);\n\n return {\n ...raw,\n expires: raw.expires ?? 'never',\n granted,\n status: status as unknown as PermissionStatus['status'],\n canAskAgain,\n isPermanentlyDenied,\n };\n}\n\nexport type { LatLngPoint };\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 隐私模块模块
|
|
3
|
+
*/
|
|
1
4
|
import type { PrivacyConfig, PrivacyStatus } from '../types/common.types';
|
|
2
5
|
export declare function assertPrivacyReady(scene?: 'map' | 'sdk'): void;
|
|
3
6
|
export declare const privacyMethods: {
|
|
@@ -12,9 +15,12 @@ export declare const privacyMethods: {
|
|
|
12
15
|
resetPrivacyConsent(): void;
|
|
13
16
|
/**
|
|
14
17
|
* 一次性同步完整的隐私状态
|
|
15
|
-
*
|
|
18
|
+
* 强烈推荐业务层只调用这个方法
|
|
16
19
|
*/
|
|
17
20
|
setPrivacyConfig(config: PrivacyConfig): void;
|
|
21
|
+
/**
|
|
22
|
+
* 获取当前隐私状态
|
|
23
|
+
*/
|
|
18
24
|
getPrivacyStatus(): PrivacyStatus;
|
|
19
25
|
};
|
|
20
26
|
//# sourceMappingURL=privacy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/module/privacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI1E,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,KAAK,GAAG,KAAa,GAAG,IAAI,CASrE;AAED,eAAO,MAAM,cAAc;IACzB;;;OAGG;+BACwB,MAAM,GAAG,IAAI;IAMxC;;OAEG;2BACoB,IAAI;IAM3B;;;OAGG;6BACsB,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/module/privacy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI1E,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,KAAK,GAAG,KAAa,GAAG,IAAI,CASrE;AAED,eAAO,MAAM,cAAc;IACzB;;;OAGG;+BACwB,MAAM,GAAG,IAAI;IAMxC;;OAEG;2BACoB,IAAI;IAM3B;;;OAGG;6BACsB,aAAa,GAAG,IAAI;IAM7C;;OAEG;wBACiB,aAAa;CAelC,CAAC"}
|
package/build/module/privacy.js
CHANGED
|
@@ -32,7 +32,7 @@ export const privacyMethods = {
|
|
|
32
32
|
},
|
|
33
33
|
/**
|
|
34
34
|
* 一次性同步完整的隐私状态
|
|
35
|
-
*
|
|
35
|
+
* 强烈推荐业务层只调用这个方法
|
|
36
36
|
*/
|
|
37
37
|
setPrivacyConfig(config) {
|
|
38
38
|
const nativeModule = getNativeModule();
|
|
@@ -40,6 +40,9 @@ export const privacyMethods = {
|
|
|
40
40
|
throw ErrorHandler.nativeModuleUnavailable();
|
|
41
41
|
nativeModule.setPrivacyConfig(config);
|
|
42
42
|
},
|
|
43
|
+
/**
|
|
44
|
+
* 获取当前隐私状态
|
|
45
|
+
*/
|
|
43
46
|
getPrivacyStatus() {
|
|
44
47
|
const nativeModule = getNativeModule();
|
|
45
48
|
if (!nativeModule) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../src/module/privacy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../src/module/privacy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,kBAAkB,CAAC,QAAuB,KAAK;IAC7D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,YAAY,CAAC,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,OAAe;QAC/B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY;YAAE,MAAM,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAChE,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY;YAAE,MAAM,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAChE,YAAY,CAAC,mBAAmB,EAAE,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAAqB;QACpC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY;YAAE,MAAM,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAChE,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,IAAI;gBACpB,oBAAoB,EAAE,IAAI;gBAC1B,mBAAmB,EAAE,KAAK;aAC3B,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;CACF,CAAC","sourcesContent":["/**\n * 隐私模块模块\n */\nimport type { PrivacyConfig, PrivacyStatus } from '../types/common.types';\nimport { ErrorHandler } from '../utils/ErrorHandler';\nimport { getNativeModule } from './nativeModule';\n\nexport function 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\nexport const privacyMethods = {\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 /**\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"]}
|
package/build/module/sdk.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/module/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAOvD,eAAO,MAAM,UAAU;IACrB;;;OAGG;oBACa,SAAS,GAAG,IAAI;wBAuCZ,OAAO;mCAII,OAAO,GAAG,IAAI;kBAU/B,MAAM;CAUrB,CAAC;AAEF;;EAEE;AACF,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAE/C;AAED;;EAEE;AACF,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C"}
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/module/sdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAOvD,eAAO,MAAM,UAAU;IACrB;;;OAGG;oBACa,SAAS,GAAG,IAAI;wBAuCZ,OAAO;mCAII,OAAO,GAAG,IAAI;kBAU/B,MAAM;CAUrB,CAAC;AAEF;;EAEE;AACF,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAE/C;AAED;;EAEE;AACF,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C"}
|
package/build/module/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/module/sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/module/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SDK 模块\n */\nimport type { SDKConfig } from '../types/common.types';\nimport { ErrorHandler, ErrorLogger } from '../utils/ErrorHandler';\nimport { getNativeModule } from './nativeModule';\n\nlet sdkConfig: SDKConfig | null = null;\nlet isSDKInitialized = false;\n\nexport const sdkMethods = {\n /**\n * 初始化 SDK,并缓存配置(包含 webKey)\n * 注意:允许不提供任何 API Key,因为原生端可能已通过 Config Plugin 配置\n */\n initSDK(config: SDKConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n try {\n const privacyStatus = nativeModule.getPrivacyStatus();\n if (!privacyStatus.isReady) {\n throw ErrorHandler.privacyNotAgreed('sdk');\n }\n\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey) {\n throw ErrorHandler.invalidApiKey('both');\n }\n\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.warn(\n isNativeConfigured\n ? 'SDK 使用原生端配置的 API Key'\n : 'SDK 初始化仅使用 webKey',\n { config }\n );\n }\n\n sdkConfig = config ?? null;\n nativeModule.initSDK(config);\n isSDKInitialized = true;\n ErrorLogger.warn('SDK 初始化成功', { config });\n } catch (error) {\n isSDKInitialized = false;\n throw ErrorHandler.wrapNativeError(error, 'SDK 初始化');\n }\n },\n\n isSDKInitialized(): boolean {\n return isSDKInitialized;\n },\n\n setLoadWorldVectorMap(enabled: boolean): void {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLoadWorldVectorMap(enabled);\n } catch (error) {\n ErrorLogger.warn('setLoadWorldVectorMap 失败', { enabled, error });\n }\n },\n\n getVersion(): string {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return '0.0.0';\n try {\n return nativeModule.getVersion();\n } catch (error) {\n ErrorLogger.warn('getVersion 失败', { error });\n return '0.0.0';\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return sdkConfig;\n}\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return sdkConfig?.webKey;\n}\n"]}
|
|
@@ -7,9 +7,9 @@ import { PermissionResponse } from 'expo-modules-core';
|
|
|
7
7
|
* SDK 配置参数
|
|
8
8
|
*/
|
|
9
9
|
export interface SDKConfig {
|
|
10
|
-
/** Android 平台的高德地图 API Key */
|
|
10
|
+
/** Android 平台的高德地图 API Key,一般不要主动配置,推荐使用 Config Plugin 配置 */
|
|
11
11
|
androidKey?: string;
|
|
12
|
-
/** iOS 平台的高德地图 API Key */
|
|
12
|
+
/** iOS 平台的高德地图 API Key,一般不要主动配置,推荐使用 Config Plugin 配置 */
|
|
13
13
|
iosKey?: string;
|
|
14
14
|
/** web api key 如果要使用expo-gaode-map-web-api相关的功能,需要配置web api key*/
|
|
15
15
|
webKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,
|
|
1
|
+
{"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"AA8LA;;GAEG;AACH,MAAM,CAAN,IAAY,OA0BX;AA1BD,WAAY,OAAO;IACjB;;OAEG;IACH,6CAAY,CAAA;IAEZ;;OAEG;IACH,+CAAa,CAAA;IAEb;;OAEG;IACH,uCAAS,CAAA;IAET;;OAEG;IACH,qCAAQ,CAAA;IAER;;;OAGG;IACH,mCAAO,CAAA;AACT,CAAC,EA1BW,OAAO,KAAP,OAAO,QA0BlB","sourcesContent":["/**\n * 高德地图通用类型定义\n * 基于 Expo Modules API\n */\nimport { PermissionResponse } from 'expo-modules-core';\n\n/**\n * SDK 配置参数\n */\nexport interface SDKConfig {\n /** Android 平台的高德地图 API Key */\n androidKey?: string;\n /** iOS 平台的高德地图 API Key */\n iosKey?: string;\n /** web api key 如果要使用expo-gaode-map-web-api相关的功能,需要配置web api key*/\n webKey?: string;\n}\n\n/**\n * 隐私同意配置\n * 推荐优先使用该配置对象一次性完成隐私状态同步\n */\nexport interface PrivacyConfig {\n /** 是否已经向用户展示隐私弹窗或隐私说明 */\n hasShow: boolean;\n /** 展示内容中是否包含隐私政策条款 */\n hasContainsPrivacy: boolean;\n /** 用户是否已经同意隐私政策 */\n hasAgree: boolean;\n /** 可选的隐私协议版本号;变更后会要求重新同意 */\n privacyVersion?: string;\n}\n/**\n * 隐私政策状态\n */\nexport interface PrivacyStatus {\n hasShow: boolean;\n hasContainsPrivacy: boolean;\n hasAgree: boolean;\n isReady: boolean;\n privacyVersion?: string | null;\n agreedPrivacyVersion?: string | null;\n restoredFromStorage?: boolean;\n}\n\n/**\n * 权限状态(增强版,支持 Android 14+ 和 iOS 17+)\n */\nexport interface PermissionStatus extends PermissionResponse{\n /** 是否已授权(前台位置权限) */\n granted: boolean;\n \n // Android 专用字段\n /** Android 精确位置权限 */\n fineLocation?: boolean;\n /** Android 粗略位置权限 */\n coarseLocation?: boolean;\n /** Android 后台位置权限(Android 10+) */\n backgroundLocation?: boolean;\n /** 是否应显示权限说明(Android) */\n shouldShowRationale?: boolean;\n /** 权限是否被永久拒绝(Android) */\n isPermanentlyDenied?: boolean;\n /** 是否为 Android 14+(Android) */\n isAndroid14Plus?: boolean;\n \n // 其他字段\n /** 额外的消息说明 */\n message?: string;\n}\n\n/**\n * 点坐标(屏幕坐标)\n */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/**\n * 地理坐标\n */\nexport interface LatLng {\n /**\n * 纬度\n */\n latitude: number;\n\n /**\n * 经度\n */\n longitude: number;\n}\n\n/**\n * 坐标点类型\n * 支持对象格式 { latitude, longitude }\n * 或数组格式 [longitude, latitude] (GeoJSON 标准)\n * 注意:GeoJSON 标准允许数组包含更多元素(如海拔),但本组件只使用前两个\n */\nexport type LatLngPoint = LatLng | [number, number] | number[];\n\n/**\n * 地图标注点(POI)\n */\nexport interface MapPoi {\n /**\n * 标注点 ID\n */\n id: string;\n\n /**\n * 标注点名称\n */\n name: string;\n\n /**\n * 标注点坐标\n */\n position: LatLng;\n}\n\n/**\n * 矩形坐标边界\n */\nexport interface LatLngBounds {\n /**\n * 西南坐标\n */\n southwest: LatLng;\n\n /**\n * 东北坐标\n */\n northeast: LatLng;\n}\n\n/**\n * 地图相机位置\n */\nexport interface CameraPosition {\n /**\n * 中心坐标\n */\n target?: LatLng;\n\n /**\n * 缩放级别(3-20)\n */\n zoom?: number;\n\n /**\n * 朝向、旋转角度(0-360度)\n */\n bearing?: number;\n\n /**\n * 倾斜角度(0-60度)\n */\n tilt?: number;\n}\n\n/**\n * 地图相机更新参数\n *\n * 与 `CameraPosition` 不同,这个类型用于描述“局部更新”:\n * 你可以只传 `zoom`、只传 `target`,或组合传入需要变更的字段。\n */\nexport interface CameraUpdate {\n /**\n * 中心坐标\n */\n target?: LatLng;\n\n /**\n * 缩放级别(3-20)\n */\n zoom?: number;\n\n /**\n * 朝向、旋转角度(0-360度)\n */\n bearing?: number;\n\n /**\n * 倾斜角度(0-60度)\n */\n tilt?: number;\n}\n\n/**\n * 地图类型\n */\nexport enum MapType {\n /**\n * 标准地图\n */\n Standard = 1,\n\n /**\n * 卫星地图\n */\n Satellite = 2,\n\n /**\n * 夜间地图\n */\n Night = 3,\n\n /**\n * 导航地图\n */\n Navi = 4,\n\n /**\n * 公交地图\n * @platform android\n */\n Bus = 5,\n}\n\n/**\n * 颜色值类型\n * 支持:\n * - 十六进制字符串: '#AARRGGBB' 或 '#RRGGBB'\n * - 数字格式: 0xAARRGGBB (用于 Android)\n */\nexport type ColorValue = string | number;\n"]}
|
|
1
|
+
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"AA8LA;;GAEG;AACH,MAAM,CAAN,IAAY,OA0BX;AA1BD,WAAY,OAAO;IACjB;;OAEG;IACH,6CAAY,CAAA;IAEZ;;OAEG;IACH,+CAAa,CAAA;IAEb;;OAEG;IACH,uCAAS,CAAA;IAET;;OAEG;IACH,qCAAQ,CAAA;IAER;;;OAGG;IACH,mCAAO,CAAA;AACT,CAAC,EA1BW,OAAO,KAAP,OAAO,QA0BlB","sourcesContent":["/**\n * 高德地图通用类型定义\n * 基于 Expo Modules API\n */\nimport { PermissionResponse } from 'expo-modules-core';\n\n/**\n * SDK 配置参数\n */\nexport interface SDKConfig {\n /** Android 平台的高德地图 API Key,一般不要主动配置,推荐使用 Config Plugin 配置 */\n androidKey?: string;\n /** iOS 平台的高德地图 API Key,一般不要主动配置,推荐使用 Config Plugin 配置 */\n iosKey?: string;\n /** web api key 如果要使用expo-gaode-map-web-api相关的功能,需要配置web api key*/\n webKey?: string;\n}\n\n/**\n * 隐私同意配置\n * 推荐优先使用该配置对象一次性完成隐私状态同步\n */\nexport interface PrivacyConfig {\n /** 是否已经向用户展示隐私弹窗或隐私说明 */\n hasShow: boolean;\n /** 展示内容中是否包含隐私政策条款 */\n hasContainsPrivacy: boolean;\n /** 用户是否已经同意隐私政策 */\n hasAgree: boolean;\n /** 可选的隐私协议版本号;变更后会要求重新同意 */\n privacyVersion?: string;\n}\n/**\n * 隐私政策状态\n */\nexport interface PrivacyStatus {\n hasShow: boolean;\n hasContainsPrivacy: boolean;\n hasAgree: boolean;\n isReady: boolean;\n privacyVersion?: string | null;\n agreedPrivacyVersion?: string | null;\n restoredFromStorage?: boolean;\n}\n\n/**\n * 权限状态(增强版,支持 Android 14+ 和 iOS 17+)\n */\nexport interface PermissionStatus extends PermissionResponse{\n /** 是否已授权(前台位置权限) */\n granted: boolean;\n \n // Android 专用字段\n /** Android 精确位置权限 */\n fineLocation?: boolean;\n /** Android 粗略位置权限 */\n coarseLocation?: boolean;\n /** Android 后台位置权限(Android 10+) */\n backgroundLocation?: boolean;\n /** 是否应显示权限说明(Android) */\n shouldShowRationale?: boolean;\n /** 权限是否被永久拒绝(Android) */\n isPermanentlyDenied?: boolean;\n /** 是否为 Android 14+(Android) */\n isAndroid14Plus?: boolean;\n \n // 其他字段\n /** 额外的消息说明 */\n message?: string;\n}\n\n/**\n * 点坐标(屏幕坐标)\n */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/**\n * 地理坐标\n */\nexport interface LatLng {\n /**\n * 纬度\n */\n latitude: number;\n\n /**\n * 经度\n */\n longitude: number;\n}\n\n/**\n * 坐标点类型\n * 支持对象格式 { latitude, longitude }\n * 或数组格式 [longitude, latitude] (GeoJSON 标准)\n * 注意:GeoJSON 标准允许数组包含更多元素(如海拔),但本组件只使用前两个\n */\nexport type LatLngPoint = LatLng | [number, number] | number[];\n\n/**\n * 地图标注点(POI)\n */\nexport interface MapPoi {\n /**\n * 标注点 ID\n */\n id: string;\n\n /**\n * 标注点名称\n */\n name: string;\n\n /**\n * 标注点坐标\n */\n position: LatLng;\n}\n\n/**\n * 矩形坐标边界\n */\nexport interface LatLngBounds {\n /**\n * 西南坐标\n */\n southwest: LatLng;\n\n /**\n * 东北坐标\n */\n northeast: LatLng;\n}\n\n/**\n * 地图相机位置\n */\nexport interface CameraPosition {\n /**\n * 中心坐标\n */\n target?: LatLng;\n\n /**\n * 缩放级别(3-20)\n */\n zoom?: number;\n\n /**\n * 朝向、旋转角度(0-360度)\n */\n bearing?: number;\n\n /**\n * 倾斜角度(0-60度)\n */\n tilt?: number;\n}\n\n/**\n * 地图相机更新参数\n *\n * 与 `CameraPosition` 不同,这个类型用于描述“局部更新”:\n * 你可以只传 `zoom`、只传 `target`,或组合传入需要变更的字段。\n */\nexport interface CameraUpdate {\n /**\n * 中心坐标\n */\n target?: LatLng;\n\n /**\n * 缩放级别(3-20)\n */\n zoom?: number;\n\n /**\n * 朝向、旋转角度(0-360度)\n */\n bearing?: number;\n\n /**\n * 倾斜角度(0-60度)\n */\n tilt?: number;\n}\n\n/**\n * 地图类型\n */\nexport enum MapType {\n /**\n * 标准地图\n */\n Standard = 1,\n\n /**\n * 卫星地图\n */\n Satellite = 2,\n\n /**\n * 夜间地图\n */\n Night = 3,\n\n /**\n * 导航地图\n */\n Navi = 4,\n\n /**\n * 公交地图\n * @platform android\n */\n Bus = 5,\n}\n\n/**\n * 颜色值类型\n * 支持:\n * - 十六进制字符串: '#AARRGGBB' 或 '#RRGGBB'\n * - 数字格式: 0xAARRGGBB (用于 Android)\n */\nexport type ColorValue = string | number;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/GeoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAO5D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA+B1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"GeoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/GeoUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAO5D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA+B1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoUtils.js","sourceRoot":"","sources":["../../src/utils/GeoUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GeoUtils.js","sourceRoot":"","sources":["../../src/utils/GeoUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 地理位置工具类\n */\nimport { LatLng, LatLngPoint } from '../types/common.types';\n\ntype LatLngLike = {\n latitude?: unknown;\n longitude?: unknown;\n};\n\n/**\n * 将坐标点归一化为对象格式\n * 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象\n * 注意:数组格式遵循 GeoJSON 标准,即 [经度, 纬度]\n * \n * @param point 坐标点\n * @returns { latitude, longitude } 对象\n */\nexport function normalizeLatLng(point: LatLngPoint): LatLng {\n if (Array.isArray(point)) {\n let longitude = Number(point[0]);\n let latitude = Number(point[1]);\n\n // 智能纠错:如果纬度超出范围 [-90, 90] 且交换后在范围内,则认为是用户传反了\n if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {\n console.warn(\n `[expo-gaode-map] 检测到坐标数组格式可能为 [latitude, longitude] (${point}),已自动纠正为 [longitude, latitude]。建议显式使用 [经度, 纬度] 格式以遵循 GeoJSON 标准。`\n );\n return {\n latitude: longitude,\n longitude: latitude\n };\n }\n\n return {\n longitude,\n latitude,\n };\n }\n // 对象格式:强制转换为数字,防止传入 string 类型导致原生层 Crash\n if (point && typeof point === 'object') {\n const p = point as LatLngLike;\n return {\n latitude: Number(p.latitude),\n longitude: Number(p.longitude),\n };\n }\n \n return point as LatLng;\n}\n\n/**\n * 将坐标点数组归一化为对象数组\n * 支持一维数组 [p1, p2, ...] 或二维嵌套数组 [[p1, p2, ...], [p3, p4, ...]]\n * \n * @param points 坐标点数组或嵌套数组\n * @returns 归一化后的坐标数组\n */\nexport function normalizeLatLngList(points: LatLngPoint[]): LatLng[];\nexport function normalizeLatLngList(points: LatLngPoint[][]): LatLng[][];\nexport function normalizeLatLngList(points: LatLngPoint[] | LatLngPoint[][]): LatLng[] | LatLng[][];\nexport function normalizeLatLngList(\n points: LatLngPoint[] | LatLngPoint[][]\n): LatLng[] | LatLng[][] {\n if (!points || points.length === 0) return [];\n\n // 检查是否为嵌套数组 (检查第一项是否也是数组或对象,且不符合 LatLngPoint 的基本判断)\n // 如果第一项是数组且长度 > 2,或者第一项的第一个元素也是数组/对象,则认为是嵌套数组\n const firstItem = points[0];\n \n if (Array.isArray(firstItem)) {\n // 如果第一项是 [number, number],则这可能是一个一维坐标点数组 (LatLngPoint[])\n // 除非所有元素都是数组且至少有一个子数组长度不等于2,或者我们明确知道这是嵌套的\n // 为了支持 Polygon 的嵌套格式,我们需要递归处理\n \n // 启发式判断:如果第一项是数组且它的第一个元素也是数组或对象,那么它一定是嵌套的\n if (Array.isArray(firstItem[0]) || (typeof firstItem[0] === 'object' && firstItem[0] !== null && 'latitude' in firstItem[0])) {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n \n // 另一种情况:用户传入的是 [[lng, lat], [lng, lat]],这既可以看作 LatLngPoint[],\n // 也可以看作 LatLngPoint[][] (只有一个外轮廓)。\n // 在 Polygon 组件中,我们希望统一处理。\n // 如果是 Polygon 传入的,我们希望保留嵌套结构。\n // 但 normalizeLatLngList 是通用的。\n \n // 改进逻辑:如果 data[0] 是一个点,我们把它当作一维数组处理。\n // 如果 data[0] 不是一个点(即它是点的集合),我们当作二维处理。\n if (isPoint(firstItem)) {\n return (points as LatLngPoint[]).map(normalizeLatLng);\n } else {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n }\n\n return (points as LatLngPoint[]).map(normalizeLatLng);\n}\n\n/**\n * 判断一个对象是否为坐标点 (LatLngPoint)\n */\nfunction isPoint(item: unknown): item is LatLngPoint {\n if (!item || typeof item !== 'object') return false;\n // { latitude, longitude } 格式\n if ('latitude' in item && 'longitude' in (item as Record<string, unknown>)) return true;\n // [longitude, latitude] 格式\n if (Array.isArray(item) && item.length >= 2 && typeof item[0] === 'number' && typeof item[1] === 'number') return true;\n return false;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/PermissionUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PermissionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/PermissionUtils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,oBAAY,sBAAsB;IAChC,eAAe;IACf,UAAU,eAAe;IACzB,WAAW;IACX,UAAU,eAAe;IACzB,YAAY;IACZ,yBAAyB,8BAA8B;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI;QACtB,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,OAAO,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;KACtB;IAYD;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM;IAUnE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAqClC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAerC;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI;QACzB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;IAuBD;;OAEG;IACH,MAAM,CAAC,wBAAwB,IAAI;QACjC,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;IA2BD;;OAEG;IACH,MAAM,CAAC,0BAA0B,IAAI,OAAO;IAY5C;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,IAAI;CA6ChC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,wBAAkB,CAAC"}
|