expo-gaode-map 1.0.4 → 1.0.6

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 (48) hide show
  1. package/android/src/main/AndroidManifest.xml +13 -1
  2. package/android/src/main/java/expo/modules/gaodemap/ExpoGaodeMapModule.kt +8 -3
  3. package/android/src/main/java/expo/modules/gaodemap/modules/LocationManager.kt +25 -0
  4. package/android/src/main/java/expo/modules/gaodemap/overlays/MarkerView.kt +2 -0
  5. package/android/src/main/java/expo/modules/gaodemap/overlays/MultiPointView.kt +1 -1
  6. package/android/src/main/java/expo/modules/gaodemap/services/LocationForegroundService.kt +78 -0
  7. package/build/ExpoGaodeMapModule.d.ts +33 -0
  8. package/build/ExpoGaodeMapModule.d.ts.map +1 -1
  9. package/build/ExpoGaodeMapModule.js +0 -1
  10. package/build/ExpoGaodeMapModule.js.map +1 -1
  11. package/build/ExpoGaodeMapView.d.ts +6 -35
  12. package/build/ExpoGaodeMapView.d.ts.map +1 -1
  13. package/build/ExpoGaodeMapView.js +25 -92
  14. package/build/ExpoGaodeMapView.js.map +1 -1
  15. package/build/components/overlays/Circle.d.ts.map +1 -1
  16. package/build/components/overlays/Circle.js +7 -0
  17. package/build/components/overlays/Circle.js.map +1 -1
  18. package/build/components/overlays/Marker.js +10 -0
  19. package/build/components/overlays/Marker.js.map +1 -1
  20. package/build/components/overlays/Polygon.d.ts.map +1 -1
  21. package/build/components/overlays/Polygon.js +7 -0
  22. package/build/components/overlays/Polygon.js.map +1 -1
  23. package/build/components/overlays/Polyline.d.ts.map +1 -1
  24. package/build/components/overlays/Polyline.js +7 -0
  25. package/build/components/overlays/Polyline.js.map +1 -1
  26. package/build/modules/AMapLocation.d.ts +2 -19
  27. package/build/modules/AMapLocation.d.ts.map +1 -1
  28. package/build/modules/AMapLocation.js +36 -73
  29. package/build/modules/AMapLocation.js.map +1 -1
  30. package/build/types/location.types.d.ts +0 -1
  31. package/build/types/location.types.d.ts.map +1 -1
  32. package/build/types/location.types.js.map +1 -1
  33. package/build/utils/EventManager.d.ts +11 -0
  34. package/build/utils/EventManager.d.ts.map +1 -0
  35. package/build/utils/EventManager.js +21 -0
  36. package/build/utils/EventManager.js.map +1 -0
  37. package/docs/API.md +39 -5
  38. package/ios/modules/LocationManager.swift +4 -3
  39. package/package.json +1 -1
  40. package/src/ExpoGaodeMapModule.ts +39 -5
  41. package/src/ExpoGaodeMapView.tsx +30 -137
  42. package/src/components/overlays/Circle.tsx +8 -0
  43. package/src/components/overlays/Marker.tsx +11 -0
  44. package/src/components/overlays/Polygon.tsx +8 -0
  45. package/src/components/overlays/Polyline.tsx +8 -0
  46. package/src/modules/AMapLocation.ts +38 -73
  47. package/src/types/location.types.ts +0 -1
  48. package/src/utils/EventManager.ts +23 -0
@@ -35,6 +35,13 @@ export default function Circle(props) {
35
35
  }
36
36
  };
37
37
  }, []);
38
+ React.useEffect(() => {
39
+ if (circleIdRef.current && eventManager) {
40
+ eventManager.register(circleIdRef.current, {
41
+ onPress: props.onPress,
42
+ });
43
+ }
44
+ }, [props.onPress]);
38
45
  React.useEffect(() => {
39
46
  if (circleIdRef.current && mapRef?.current) {
40
47
  mapRef.current.updateCircle(circleIdRef.current, props);
@@ -1 +1 @@
1
- {"version":3,"file":"Circle.js","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAExE,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAkB;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;YAE/B,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,WAAW,EAAE,CAAC;QAEd,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAExF,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import * as React from 'react';\nimport type { CircleProps } from '../../types';\nimport { MapContext, CircleEventContext } from '../../ExpoGaodeMapView';\n\nexport default function Circle(props: CircleProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(CircleEventContext);\n const circleIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const circleId = `circle_${Date.now()}_${Math.random()}`;\n circleIdRef.current = circleId;\n \n if (eventManager && props.onPress) {\n eventManager.register(circleId, {\n onPress: props.onPress,\n });\n }\n \n mapRef.current.addCircle(circleId, propsRef.current);\n };\n \n checkAndAdd();\n \n return () => {\n if (circleIdRef.current) {\n if (eventManager) {\n eventManager.unregister(circleIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removeCircle(circleIdRef.current);\n }\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (circleIdRef.current && mapRef?.current) {\n mapRef.current.updateCircle(circleIdRef.current, props);\n }\n }, [props.center, props.radius, props.fillColor, props.strokeColor, props.strokeWidth]);\n \n return null;\n}\n"]}
1
+ {"version":3,"file":"Circle.js","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAExE,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAkB;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;YAE/B,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,WAAW,EAAE,CAAC;QAEd,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC;YACxC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE;gBACzC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAExF,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import * as React from 'react';\nimport type { CircleProps } from '../../types';\nimport { MapContext, CircleEventContext } from '../../ExpoGaodeMapView';\n\nexport default function Circle(props: CircleProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(CircleEventContext);\n const circleIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const circleId = `circle_${Date.now()}_${Math.random()}`;\n circleIdRef.current = circleId;\n \n if (eventManager && props.onPress) {\n eventManager.register(circleId, {\n onPress: props.onPress,\n });\n }\n \n mapRef.current.addCircle(circleId, propsRef.current);\n };\n \n checkAndAdd();\n \n return () => {\n if (circleIdRef.current) {\n if (eventManager) {\n eventManager.unregister(circleIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removeCircle(circleIdRef.current);\n }\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (circleIdRef.current && eventManager) {\n eventManager.register(circleIdRef.current, {\n onPress: props.onPress,\n });\n }\n }, [props.onPress]);\n\n React.useEffect(() => {\n if (circleIdRef.current && mapRef?.current) {\n mapRef.current.updateCircle(circleIdRef.current, props);\n }\n }, [props.center, props.radius, props.fillColor, props.strokeColor, props.strokeWidth]);\n \n return null;\n}\n"]}
@@ -47,6 +47,16 @@ function MarkerImperative(props) {
47
47
  }
48
48
  };
49
49
  }, []);
50
+ React.useEffect(() => {
51
+ if (markerIdRef.current && eventManager) {
52
+ eventManager.register(markerIdRef.current, {
53
+ onPress: props.onPress,
54
+ onDragStart: props.onDragStart,
55
+ onDrag: props.onDrag,
56
+ onDragEnd: props.onDragEnd,
57
+ });
58
+ }
59
+ }, [props.onPress, props.onDragStart, props.onDrag, props.onDragEnd]);
50
60
  React.useEffect(() => {
51
61
  if (markerIdRef.current && mapRef?.current) {
52
62
  const processedProps = { ...props };
@@ -1 +1 @@
1
- {"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Image } from 'react-native';\nimport { MapContext, MarkerEventContext } from '../../ExpoGaodeMapView';\nimport type { MarkerProps } from '../../types';\n\nexport default function Marker(props: MarkerProps) {\n return <MarkerImperative {...props} />;\n}\n\nfunction MarkerImperative(props: MarkerProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(MarkerEventContext);\n const markerIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const markerId = `marker_${Date.now()}_${Math.random()}`;\n markerIdRef.current = markerId;\n \n if (eventManager) {\n eventManager.register(markerId, {\n onPress: props.onPress,\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragEnd: props.onDragEnd,\n });\n }\n \n const processedProps = { ...propsRef.current };\n if (processedProps.icon && typeof processedProps.icon === 'number') {\n const resolved = Image.resolveAssetSource(processedProps.icon);\n processedProps.icon = resolved;\n }\n \n mapRef.current.addMarker(markerId, processedProps);\n };\n \n checkAndAdd();\n \n return () => {\n if (markerIdRef.current) {\n if (eventManager) {\n eventManager.unregister(markerIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removeMarker(markerIdRef.current);\n }\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (markerIdRef.current && mapRef?.current) {\n const processedProps = { ...props };\n if (processedProps.icon && typeof processedProps.icon === 'number') {\n const resolved = Image.resolveAssetSource(processedProps.icon);\n processedProps.icon = resolved;\n }\n mapRef.current.updateMarker(markerIdRef.current, processedProps);\n }\n }, [\n props.position?.latitude,\n props.position?.longitude,\n props.title,\n props.draggable,\n props.icon,\n props.iconWidth,\n props.iconHeight,\n props.pinColor\n ]);\n \n return null;\n}\n"]}
1
+ {"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Image } from 'react-native';\nimport { MapContext, MarkerEventContext } from '../../ExpoGaodeMapView';\nimport type { MarkerProps } from '../../types';\n\nexport default function Marker(props: MarkerProps) {\n return <MarkerImperative {...props} />;\n}\n\nfunction MarkerImperative(props: MarkerProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(MarkerEventContext);\n const markerIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const markerId = `marker_${Date.now()}_${Math.random()}`;\n markerIdRef.current = markerId;\n \n if (eventManager) {\n eventManager.register(markerId, {\n onPress: props.onPress,\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragEnd: props.onDragEnd,\n });\n }\n \n const processedProps = { ...propsRef.current };\n if (processedProps.icon && typeof processedProps.icon === 'number') {\n const resolved = Image.resolveAssetSource(processedProps.icon);\n processedProps.icon = resolved;\n }\n \n mapRef.current.addMarker(markerId, processedProps);\n };\n \n checkAndAdd();\n \n return () => {\n if (markerIdRef.current) {\n if (eventManager) {\n eventManager.unregister(markerIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removeMarker(markerIdRef.current);\n }\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (markerIdRef.current && eventManager) {\n eventManager.register(markerIdRef.current, {\n onPress: props.onPress,\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragEnd: props.onDragEnd,\n });\n }\n }, [props.onPress, props.onDragStart, props.onDrag, props.onDragEnd]);\n\n React.useEffect(() => {\n if (markerIdRef.current && mapRef?.current) {\n const processedProps = { ...props };\n if (processedProps.icon && typeof processedProps.icon === 'number') {\n const resolved = Image.resolveAssetSource(processedProps.icon);\n processedProps.icon = resolved;\n }\n mapRef.current.updateMarker(markerIdRef.current, processedProps);\n }\n }, [\n props.position?.latitude,\n props.position?.longitude,\n props.title,\n props.draggable,\n props.icon,\n props.iconWidth,\n props.iconHeight,\n props.pinColor\n ]);\n \n return null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAK,EAAE,YAAY,QAmElD"}
1
+ {"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAK,EAAE,YAAY,QA2ElD"}
@@ -62,6 +62,13 @@ export default function Polygon(props) {
62
62
  }
63
63
  };
64
64
  }, []);
65
+ useEffect(() => {
66
+ if (polygonIdRef.current && eventManager) {
67
+ eventManager.register(polygonIdRef.current, {
68
+ onPress: props.onPress,
69
+ });
70
+ }
71
+ }, [props.onPress]);
65
72
  useEffect(() => {
66
73
  if (polygonIdRef.current && nativeRef?.current) {
67
74
  nativeRef.current.updatePolygon(polygonIdRef.current, {
@@ -1 +1 @@
1
- {"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGzE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAmB;IACjD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACtE,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBACxB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3D,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;YAEjC,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE;oBAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;YAEjF,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACjC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE;oBACtC,MAAM;oBACN,SAAS,EAAE,SAAS,IAAI,WAAW;oBACnC,WAAW,EAAE,WAAW,IAAI,WAAW;oBACvC,WAAW,EAAE,WAAW,IAAI,EAAE;oBAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,WAAW,EAAE,CAAC;QAEd,OAAO,GAAG,EAAE;YACV,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;gBACD,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;oBACvB,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YAC/C,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE;gBACpD,MAAM;gBACN,SAAS;gBACT,WAAW;gBACX,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1D,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { useContext, useEffect, useRef } from 'react';\nimport type { PolygonProps } from '../../types';\nimport { MapContext, PolygonEventContext } from '../../ExpoGaodeMapView';\n\n\n/**\n * 高德地图多边形覆盖物组件\n * \n * @param props - 多边形配置属性\n * @param props.points - 多边形顶点坐标数组,至少需要3个点\n * @param props.fillColor - 多边形填充颜色,十六进制格式,默认0x440000FF\n * @param props.strokeColor - 多边形边框颜色,默认-16776961\n * @param props.strokeWidth - 多边形边框宽度,默认10\n * @param props.zIndex - 多边形层级,默认0\n * @param props.onPress - 多边形点击事件\n * \n * @remarks\n * 组件内部会自动生成唯一ID用于标识多边形,并在组件挂载时添加到地图,\n * 更新时同步修改多边形属性,卸载时自动移除多边形。\n * \n * 注意:points数组长度必须大于等于3才能有效绘制多边形。\n */\nexport default function Polygon(props: PolygonProps) {\n const { points, fillColor, strokeColor, strokeWidth, zIndex } = props;\n const nativeRef = useContext(MapContext);\n const eventManager = useContext(PolygonEventContext);\n const polygonIdRef = useRef<string | null>(null);\n const propsRef = useRef(props);\n \n useEffect(() => {\n propsRef.current = props;\n }, [props]);\n\n useEffect(() => {\n const checkAndAdd = () => {\n if (!nativeRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const polygonId = `polygon_${Date.now()}_${Math.random()}`;\n polygonIdRef.current = polygonId;\n \n if (eventManager && props.onPress) {\n eventManager.register(polygonId, {\n onPress: props.onPress,\n });\n }\n \n const { points, fillColor, strokeColor, strokeWidth, zIndex } = propsRef.current;\n \n if (points && points.length >= 3) {\n nativeRef.current.addPolygon(polygonId, {\n points,\n fillColor: fillColor ?? '#880000FF',\n strokeColor: strokeColor ?? '#FFFF0000',\n strokeWidth: strokeWidth ?? 10,\n zIndex: zIndex ?? 0,\n });\n }\n };\n \n checkAndAdd();\n \n return () => {\n if (polygonIdRef.current) {\n if (eventManager) {\n eventManager.unregister(polygonIdRef.current);\n }\n if (nativeRef?.current) {\n nativeRef.current.removePolygon(polygonIdRef.current);\n }\n }\n };\n }, []);\n\n useEffect(() => {\n if (polygonIdRef.current && nativeRef?.current) {\n nativeRef.current.updatePolygon(polygonIdRef.current, {\n points,\n fillColor,\n strokeColor,\n strokeWidth,\n zIndex,\n });\n }\n }, [points, fillColor, strokeColor, strokeWidth, zIndex]);\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useRef } from 'react';\nimport type { PolygonProps } from '../../types';\nimport { MapContext, PolygonEventContext } from '../../ExpoGaodeMapView';\n\n\n/**\n * 高德地图多边形覆盖物组件\n * \n * @param props - 多边形配置属性\n * @param props.points - 多边形顶点坐标数组,至少需要3个点\n * @param props.fillColor - 多边形填充颜色,十六进制格式,默认0x440000FF\n * @param props.strokeColor - 多边形边框颜色,默认-16776961\n * @param props.strokeWidth - 多边形边框宽度,默认10\n * @param props.zIndex - 多边形层级,默认0\n * @param props.onPress - 多边形点击事件\n * \n * @remarks\n * 组件内部会自动生成唯一ID用于标识多边形,并在组件挂载时添加到地图,\n * 更新时同步修改多边形属性,卸载时自动移除多边形。\n * \n * 注意:points数组长度必须大于等于3才能有效绘制多边形。\n */\nexport default function Polygon(props: PolygonProps) {\n const { points, fillColor, strokeColor, strokeWidth, zIndex } = props;\n const nativeRef = useContext(MapContext);\n const eventManager = useContext(PolygonEventContext);\n const polygonIdRef = useRef<string | null>(null);\n const propsRef = useRef(props);\n \n useEffect(() => {\n propsRef.current = props;\n }, [props]);\n\n useEffect(() => {\n const checkAndAdd = () => {\n if (!nativeRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const polygonId = `polygon_${Date.now()}_${Math.random()}`;\n polygonIdRef.current = polygonId;\n \n if (eventManager && props.onPress) {\n eventManager.register(polygonId, {\n onPress: props.onPress,\n });\n }\n \n const { points, fillColor, strokeColor, strokeWidth, zIndex } = propsRef.current;\n \n if (points && points.length >= 3) {\n nativeRef.current.addPolygon(polygonId, {\n points,\n fillColor: fillColor ?? '#880000FF',\n strokeColor: strokeColor ?? '#FFFF0000',\n strokeWidth: strokeWidth ?? 10,\n zIndex: zIndex ?? 0,\n });\n }\n };\n \n checkAndAdd();\n \n return () => {\n if (polygonIdRef.current) {\n if (eventManager) {\n eventManager.unregister(polygonIdRef.current);\n }\n if (nativeRef?.current) {\n nativeRef.current.removePolygon(polygonIdRef.current);\n }\n }\n };\n }, []);\n\n useEffect(() => {\n if (polygonIdRef.current && eventManager) {\n eventManager.register(polygonIdRef.current, {\n onPress: props.onPress,\n });\n }\n }, [props.onPress]);\n\n useEffect(() => {\n if (polygonIdRef.current && nativeRef?.current) {\n nativeRef.current.updatePolygon(polygonIdRef.current, {\n points,\n fillColor,\n strokeColor,\n strokeWidth,\n zIndex,\n });\n }\n }, [points, fillColor, strokeColor, strokeWidth, zIndex]);\n\n return null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,QAsDpD"}
1
+ {"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,QA8DpD"}
@@ -60,6 +60,13 @@ export default function Polyline(props) {
60
60
  }
61
61
  };
62
62
  }, []);
63
+ React.useEffect(() => {
64
+ if (polylineIdRef.current && eventManager) {
65
+ eventManager.register(polylineIdRef.current, {
66
+ onPress: props.onPress,
67
+ });
68
+ }
69
+ }, [props.onPress]);
63
70
  return null;
64
71
  }
65
72
  //# sourceMappingURL=Polyline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI1E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7D,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;YAEnC,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAChC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,aAAa,GAAG;gBACpB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;gBAC/B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;gBAC7B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;gBAC7B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACvF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAClF,CAAC;YAEF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACxD,CAAC,CAAC;QAEF,WAAW,EAAE,CAAC;QAEd,OAAO,GAAG,EAAE;YACV,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACjD,CAAC;gBACD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["\nimport * as React from 'react';\nimport { MapContext, PolylineEventContext } from '../../ExpoGaodeMapView';\nimport type { PolylineProps } from '../../types';\n\n\n/**\n * Polyline 组件用于在高德地图上绘制折线\n * \n * @param props - 折线的配置属性\n * @param props.points - 折线的坐标点数组\n * @param props.width - 折线的宽度(像素)\n * @param props.color - 折线的颜色(十六进制或RGBA)\n * @param props.onPress - 折线点击事件回调函数\n * @param [props.texture] - 可选,折线的纹理样式\n * \n * @remarks\n * 组件内部使用 React 的 useEffect 钩子来管理折线的生命周期:\n * 1. 组件挂载时创建折线并添加到地图\n * 2. 组件卸载时自动从地图移除折线\n * 3. 使用 ref 保存折线ID以便清理\n */\nexport default function Polyline(props: PolylineProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(PolylineEventContext);\n const polylineIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const polylineId = `polyline_${Date.now()}_${Math.random()}`;\n polylineIdRef.current = polylineId;\n \n if (eventManager && props.onPress) {\n eventManager.register(polylineId, {\n onPress: props.onPress,\n });\n }\n \n const polylineProps = {\n points: propsRef.current.points,\n width: propsRef.current.width,\n color: propsRef.current.color,\n ...(propsRef.current.texture && { texture: propsRef.current.texture }),\n ...(propsRef.current.dotted !== undefined && { dotted: propsRef.current.dotted }),\n ...(propsRef.current.geodesic !== undefined && { geodesic: propsRef.current.geodesic }),\n ...(propsRef.current.zIndex !== undefined && { zIndex: propsRef.current.zIndex }),\n };\n \n mapRef.current.addPolyline(polylineId, polylineProps);\n };\n \n checkAndAdd();\n \n return () => {\n if (polylineIdRef.current) {\n if (eventManager) {\n eventManager.unregister(polylineIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removePolyline(polylineIdRef.current);\n }\n }\n };\n }, []);\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport * as React from 'react';\nimport { MapContext, PolylineEventContext } from '../../ExpoGaodeMapView';\nimport type { PolylineProps } from '../../types';\n\n\n/**\n * Polyline 组件用于在高德地图上绘制折线\n * \n * @param props - 折线的配置属性\n * @param props.points - 折线的坐标点数组\n * @param props.width - 折线的宽度(像素)\n * @param props.color - 折线的颜色(十六进制或RGBA)\n * @param props.onPress - 折线点击事件回调函数\n * @param [props.texture] - 可选,折线的纹理样式\n * \n * @remarks\n * 组件内部使用 React 的 useEffect 钩子来管理折线的生命周期:\n * 1. 组件挂载时创建折线并添加到地图\n * 2. 组件卸载时自动从地图移除折线\n * 3. 使用 ref 保存折线ID以便清理\n */\nexport default function Polyline(props: PolylineProps) {\n const mapRef = React.useContext(MapContext);\n const eventManager = React.useContext(PolylineEventContext);\n const polylineIdRef = React.useRef<string | null>(null);\n const propsRef = React.useRef(props);\n \n React.useEffect(() => {\n propsRef.current = props;\n }, [props]);\n \n React.useEffect(() => {\n const checkAndAdd = () => {\n if (!mapRef?.current) {\n setTimeout(checkAndAdd, 50);\n return;\n }\n \n const polylineId = `polyline_${Date.now()}_${Math.random()}`;\n polylineIdRef.current = polylineId;\n \n if (eventManager && props.onPress) {\n eventManager.register(polylineId, {\n onPress: props.onPress,\n });\n }\n \n const polylineProps = {\n points: propsRef.current.points,\n width: propsRef.current.width,\n color: propsRef.current.color,\n ...(propsRef.current.texture && { texture: propsRef.current.texture }),\n ...(propsRef.current.dotted !== undefined && { dotted: propsRef.current.dotted }),\n ...(propsRef.current.geodesic !== undefined && { geodesic: propsRef.current.geodesic }),\n ...(propsRef.current.zIndex !== undefined && { zIndex: propsRef.current.zIndex }),\n };\n \n mapRef.current.addPolyline(polylineId, polylineProps);\n };\n \n checkAndAdd();\n \n return () => {\n if (polylineIdRef.current) {\n if (eventManager) {\n eventManager.unregister(polylineIdRef.current);\n }\n if (mapRef?.current) {\n mapRef.current.removePolyline(polylineIdRef.current);\n }\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (polylineIdRef.current && eventManager) {\n eventManager.register(polylineIdRef.current, {\n onPress: props.onPress,\n });\n }\n }, [props.onPress]);\n\n return null;\n}\n"]}
@@ -1,26 +1,9 @@
1
1
  import { EventSubscription } from 'expo-modules-core';
2
2
  import type { Coordinates, ReGeocode, LocationOptions, LocationListener, LatLng, CoordinateType } from '../types';
3
3
  /**
4
- * 配置高德地图定位服务的各项参数
4
+ * 配置高德地图定位选项
5
5
  * @param {LocationOptions} options - 定位配置选项对象
6
- * @param {boolean} [options.withReGeocode] - 是否返回逆地理编码信息
7
- * @param {number} [options.accuracy] - 定位精度设置
8
- * @param {string} [options.mode] - 定位模式
9
- * @param {boolean} [options.onceLocation] - 是否单次定位
10
- * @param {number} [options.interval] - 定位间隔(毫秒)
11
- * @param {number} [options.timeout] - 定位超时时间(毫秒)
12
- * @param {number} [options.reGeocodeTimeout] - 逆地理编码超时时间(毫秒)
13
- * @param {number} [options.distanceFilter] - 位置更新最小距离(米)
14
- * @param {boolean} [options.sensorEnable] - 是否启用传感器
15
- * @param {boolean} [options.wifiScan] - 是否开启WiFi扫描
16
- * @param {boolean} [options.gpsFirst] - 是否优先使用GPS
17
- * @param {boolean} [options.onceLocationLatest] - 是否获取最近3秒内最精确的位置
18
- * @param {string} [options.geoLanguage] - 地理编码语言
19
- * @param {boolean} [options.allowsBackgroundLocationUpdates] - 是否允许后台定位
20
- * @param {boolean} [options.pausesLocationUpdatesAutomatically] - 是否自动暂停定位
21
- * @param {boolean} [options.locationCacheEnable] - 是否启用定位缓存
22
- * @param {number} [options.httpTimeout] - 网络请求超时时间(毫秒)
23
- * @param {string} [options.protocol] - 定位协议
6
+ * @throws {Error} 当传入的配置方法不存在或不可调用时抛出错误
24
7
  */
25
8
  export declare function configure(options: LocationOptions): void;
26
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AMapLocation.d.ts","sourceRoot":"","sources":["../../src/modules/AMapLocation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,MAAM,EACN,cAAc,EACf,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAuDxD;AAGD;;;GAGG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAGD;;;GAGG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAGD;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAElD;AAGD;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAE3E;AAGD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,iBAAiB,CAIjF;AAGD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAGD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;;;;;;;;;;;;;AAED,wBAWE"}
1
+ {"version":3,"file":"AMapLocation.d.ts","sourceRoot":"","sources":["../../src/modules/AMapLocation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,MAAM,EACN,cAAc,EACf,MAAM,UAAU,CAAC;AA6BlB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAUxD;AAGD;;;GAGG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAGD;;;GAGG;AACH,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAGD;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAElD;AAGD;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAE3E;AAGD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,iBAAiB,CAIjF;AAGD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAGD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;;;;;;;;;;;;;AAED,wBAWE"}
@@ -1,82 +1,45 @@
1
1
  //高德地图定位模块
2
2
  import ExpoGaodeMapModule from '../ExpoGaodeMapModule';
3
3
  /**
4
- * 配置高德地图定位服务的各项参数
4
+ * 配置方法映射表
5
+ * @type {Record<keyof LocationOptions, string>}
6
+ *
7
+ */
8
+ const CONFIG_MAP = {
9
+ withReGeocode: 'setLocatingWithReGeocode',
10
+ accuracy: 'setDesiredAccuracy',
11
+ mode: 'setLocationMode',
12
+ onceLocation: 'setOnceLocation',
13
+ interval: 'setInterval',
14
+ timeout: 'setLocationTimeout',
15
+ reGeocodeTimeout: 'setReGeocodeTimeout',
16
+ distanceFilter: 'setDistanceFilter',
17
+ sensorEnable: 'setSensorEnable',
18
+ wifiScan: 'setWifiScan',
19
+ gpsFirst: 'setGpsFirst',
20
+ onceLocationLatest: 'setOnceLocationLatest',
21
+ geoLanguage: 'setGeoLanguage',
22
+ allowsBackgroundLocationUpdates: 'setAllowsBackgroundLocationUpdates',
23
+ pausesLocationUpdatesAutomatically: 'setPausesLocationUpdatesAutomatically',
24
+ locationCacheEnable: 'setLocationCacheEnable',
25
+ httpTimeout: 'setHttpTimeOut',
26
+ protocol: 'setLocationProtocol',
27
+ };
28
+ /**
29
+ * 配置高德地图定位选项
5
30
  * @param {LocationOptions} options - 定位配置选项对象
6
- * @param {boolean} [options.withReGeocode] - 是否返回逆地理编码信息
7
- * @param {number} [options.accuracy] - 定位精度设置
8
- * @param {string} [options.mode] - 定位模式
9
- * @param {boolean} [options.onceLocation] - 是否单次定位
10
- * @param {number} [options.interval] - 定位间隔(毫秒)
11
- * @param {number} [options.timeout] - 定位超时时间(毫秒)
12
- * @param {number} [options.reGeocodeTimeout] - 逆地理编码超时时间(毫秒)
13
- * @param {number} [options.distanceFilter] - 位置更新最小距离(米)
14
- * @param {boolean} [options.sensorEnable] - 是否启用传感器
15
- * @param {boolean} [options.wifiScan] - 是否开启WiFi扫描
16
- * @param {boolean} [options.gpsFirst] - 是否优先使用GPS
17
- * @param {boolean} [options.onceLocationLatest] - 是否获取最近3秒内最精确的位置
18
- * @param {string} [options.geoLanguage] - 地理编码语言
19
- * @param {boolean} [options.allowsBackgroundLocationUpdates] - 是否允许后台定位
20
- * @param {boolean} [options.pausesLocationUpdatesAutomatically] - 是否自动暂停定位
21
- * @param {boolean} [options.locationCacheEnable] - 是否启用定位缓存
22
- * @param {number} [options.httpTimeout] - 网络请求超时时间(毫秒)
23
- * @param {string} [options.protocol] - 定位协议
31
+ * @throws {Error} 当传入的配置方法不存在或不可调用时抛出错误
24
32
  */
25
33
  export function configure(options) {
26
- if (options.withReGeocode !== undefined) {
27
- ExpoGaodeMapModule.setLocatingWithReGeocode?.(options.withReGeocode);
28
- }
29
- if (options.accuracy !== undefined) {
30
- ExpoGaodeMapModule.setDesiredAccuracy?.(options.accuracy);
31
- }
32
- if (options.mode !== undefined) {
33
- ExpoGaodeMapModule.setLocationMode?.(options.mode);
34
- }
35
- if (options.onceLocation !== undefined) {
36
- ExpoGaodeMapModule.setOnceLocation?.(options.onceLocation);
37
- }
38
- if (options.interval !== undefined) {
39
- ExpoGaodeMapModule.setInterval?.(options.interval);
40
- }
41
- if (options.timeout !== undefined) {
42
- ExpoGaodeMapModule.setLocationTimeout?.(options.timeout);
43
- }
44
- if (options.reGeocodeTimeout !== undefined) {
45
- ExpoGaodeMapModule.setReGeocodeTimeout?.(options.reGeocodeTimeout);
46
- }
47
- if (options.distanceFilter !== undefined) {
48
- ExpoGaodeMapModule.setDistanceFilter?.(options.distanceFilter);
49
- }
50
- if (options.sensorEnable !== undefined) {
51
- ExpoGaodeMapModule.setSensorEnable?.(options.sensorEnable);
52
- }
53
- if (options.wifiScan !== undefined) {
54
- ExpoGaodeMapModule.setWifiScan?.(options.wifiScan);
55
- }
56
- if (options.gpsFirst !== undefined) {
57
- ExpoGaodeMapModule.setGpsFirst?.(options.gpsFirst);
58
- }
59
- if (options.onceLocationLatest !== undefined) {
60
- ExpoGaodeMapModule.setOnceLocationLatest?.(options.onceLocationLatest);
61
- }
62
- if (options.geoLanguage !== undefined) {
63
- ExpoGaodeMapModule.setGeoLanguage?.(options.geoLanguage);
64
- }
65
- if (options.allowsBackgroundLocationUpdates !== undefined) {
66
- ExpoGaodeMapModule.setAllowsBackgroundLocationUpdates?.(options.allowsBackgroundLocationUpdates);
67
- }
68
- if (options.pausesLocationUpdatesAutomatically !== undefined) {
69
- ExpoGaodeMapModule.setPausesLocationUpdatesAutomatically?.(options.pausesLocationUpdatesAutomatically);
70
- }
71
- if (options.locationCacheEnable !== undefined) {
72
- ExpoGaodeMapModule.setLocationCacheEnable?.(options.locationCacheEnable);
73
- }
74
- if (options.httpTimeout !== undefined) {
75
- ExpoGaodeMapModule.setHttpTimeOut?.(options.httpTimeout);
76
- }
77
- if (options.protocol !== undefined) {
78
- ExpoGaodeMapModule.setLocationProtocol?.(options.protocol);
79
- }
34
+ Object.entries(options).forEach(([key, value]) => {
35
+ if (value !== undefined) {
36
+ const methodName = CONFIG_MAP[key];
37
+ const method = ExpoGaodeMapModule[methodName];
38
+ if (typeof method === 'function') {
39
+ method.call(ExpoGaodeMapModule, value);
40
+ }
41
+ }
42
+ });
80
43
  }
81
44
  /**
82
45
  * 启动高德地图模块,开始连续定位
@@ -1 +1 @@
1
- {"version":3,"file":"AMapLocation.js","sourceRoot":"","sources":["../../src/modules/AMapLocation.ts"],"names":[],"mappings":"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","sourcesContent":["//高德地图定位模块\n\nimport { EventSubscription } from 'expo-modules-core';\nimport ExpoGaodeMapModule from '../ExpoGaodeMapModule';\nimport type {\n Coordinates,\n ReGeocode,\n LocationOptions,\n LocationListener,\n LatLng,\n CoordinateType,\n} from '../types';\n\n/**\n * 配置高德地图定位服务的各项参数\n * @param {LocationOptions} options - 定位配置选项对象\n * @param {boolean} [options.withReGeocode] - 是否返回逆地理编码信息\n * @param {number} [options.accuracy] - 定位精度设置\n * @param {string} [options.mode] - 定位模式\n * @param {boolean} [options.onceLocation] - 是否单次定位\n * @param {number} [options.interval] - 定位间隔(毫秒)\n * @param {number} [options.timeout] - 定位超时时间(毫秒)\n * @param {number} [options.reGeocodeTimeout] - 逆地理编码超时时间(毫秒)\n * @param {number} [options.distanceFilter] - 位置更新最小距离(米)\n * @param {boolean} [options.sensorEnable] - 是否启用传感器\n * @param {boolean} [options.wifiScan] - 是否开启WiFi扫描\n * @param {boolean} [options.gpsFirst] - 是否优先使用GPS\n * @param {boolean} [options.onceLocationLatest] - 是否获取最近3秒内最精确的位置\n * @param {string} [options.geoLanguage] - 地理编码语言\n * @param {boolean} [options.allowsBackgroundLocationUpdates] - 是否允许后台定位\n * @param {boolean} [options.pausesLocationUpdatesAutomatically] - 是否自动暂停定位\n * @param {boolean} [options.locationCacheEnable] - 是否启用定位缓存\n * @param {number} [options.httpTimeout] - 网络请求超时时间(毫秒)\n * @param {string} [options.protocol] - 定位协议\n */\nexport function configure(options: LocationOptions): void {\n if (options.withReGeocode !== undefined) {\n ExpoGaodeMapModule.setLocatingWithReGeocode?.(options.withReGeocode);\n }\n if (options.accuracy !== undefined) {\n ExpoGaodeMapModule.setDesiredAccuracy?.(options.accuracy);\n }\n if (options.mode !== undefined) {\n ExpoGaodeMapModule.setLocationMode?.(options.mode);\n }\n if (options.onceLocation !== undefined) {\n ExpoGaodeMapModule.setOnceLocation?.(options.onceLocation);\n }\n if (options.interval !== undefined) {\n ExpoGaodeMapModule.setInterval?.(options.interval);\n }\n if (options.timeout !== undefined) {\n ExpoGaodeMapModule.setLocationTimeout?.(options.timeout);\n }\n if (options.reGeocodeTimeout !== undefined) {\n ExpoGaodeMapModule.setReGeocodeTimeout?.(options.reGeocodeTimeout);\n }\n if (options.distanceFilter !== undefined) {\n ExpoGaodeMapModule.setDistanceFilter?.(options.distanceFilter);\n }\n if (options.sensorEnable !== undefined) {\n ExpoGaodeMapModule.setSensorEnable?.(options.sensorEnable);\n }\n if (options.wifiScan !== undefined) {\n ExpoGaodeMapModule.setWifiScan?.(options.wifiScan);\n }\n if (options.gpsFirst !== undefined) {\n ExpoGaodeMapModule.setGpsFirst?.(options.gpsFirst);\n }\n if (options.onceLocationLatest !== undefined) {\n ExpoGaodeMapModule.setOnceLocationLatest?.(options.onceLocationLatest);\n }\n if (options.geoLanguage !== undefined) {\n ExpoGaodeMapModule.setGeoLanguage?.(options.geoLanguage);\n }\n if (options.allowsBackgroundLocationUpdates !== undefined) {\n ExpoGaodeMapModule.setAllowsBackgroundLocationUpdates?.(options.allowsBackgroundLocationUpdates);\n }\n if (options.pausesLocationUpdatesAutomatically !== undefined) {\n ExpoGaodeMapModule.setPausesLocationUpdatesAutomatically?.(options.pausesLocationUpdatesAutomatically);\n }\n if (options.locationCacheEnable !== undefined) {\n ExpoGaodeMapModule.setLocationCacheEnable?.(options.locationCacheEnable);\n }\n if (options.httpTimeout !== undefined) {\n ExpoGaodeMapModule.setHttpTimeOut?.(options.httpTimeout);\n }\n if (options.protocol !== undefined) {\n ExpoGaodeMapModule.setLocationProtocol?.(options.protocol);\n }\n}\n\n\n/**\n * 启动高德地图模块,开始连续定位\n * @throws 如果模块未初始化或启动失败时抛出异常\n */\nexport function start(): void {\n ExpoGaodeMapModule.start?.();\n}\n\n\n/**\n * 停止高德地图相关功能,停止定位\n * @returns {void} 无返回值\n */\nexport function stop(): void {\n ExpoGaodeMapModule.stop?.();\n}\n\n\n/**\n * 检查高德地图模块是否已启动,是否正在定位\n * @returns {Promise<boolean>} 返回一个Promise,解析为布尔值表示模块是否已启动\n */\nexport async function isStarted(): Promise<boolean> {\n return ExpoGaodeMapModule.isStarted?.() || Promise.resolve(false);\n}\n\n\n/**\n * 获取设备当前位置信息,单次定位\n * @returns {Promise<Coordinates | ReGeocode>} 返回包含坐标或逆地理编码信息的Promise\n * @throws 如果定位服务不可用或权限被拒绝时抛出错误\n */\nexport async function getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n return ExpoGaodeMapModule.getCurrentLocation?.();\n}\n\n\n/**\n * 添加位置更新监听器\n * @param {LocationListener} listener - 位置更新时的回调函数\n * @returns {EventSubscription} 事件订阅对象,包含移除监听器的方法\n * @throws 如果底层模块不可用,返回一个空操作的订阅对象\n */\nexport function addLocationListener(listener: LocationListener): EventSubscription {\n return ExpoGaodeMapModule.addListener?.('onLocationUpdate', listener) || {\n remove: () => {},\n } as EventSubscription;\n}\n\n\n/**\n * 将坐标点转换为指定坐标系下的坐标\n * @param {LatLng} coordinate - 需要转换的原始坐标点\n * @param {CoordinateType} type - 目标坐标系类型\n * @returns {Promise<LatLng>} 转换后的坐标点Promise\n * @throws 如果底层模块不可用,则返回原始坐标\n */\nexport async function coordinateConvert(\n coordinate: LatLng,\n type: CoordinateType\n): Promise<LatLng> {\n return ExpoGaodeMapModule.coordinateConvert?.(coordinate, type) || Promise.resolve(coordinate);\n}\n\n\n/**\n * 开始更新设备方向(罗盘朝向)\n * 调用原生模块方法启动方向更新功能\n * @throws 如果原生模块未实现此方法会抛出异常\n * @platform ios\n */\nexport function startUpdatingHeading(): void {\n ExpoGaodeMapModule.startUpdatingHeading?.();\n}\n\n\n/**\n * 停止更新设备方向(罗盘朝向)\n * 调用原生模块方法停止监听设备方向变化\n * @throws 如果原生模块未实现此方法会抛出异常\n * @platform ios\n */\nexport function stopUpdatingHeading(): void {\n ExpoGaodeMapModule.stopUpdatingHeading?.();\n}\n\n/**\n * 设置高德地图的API密钥\n * @param {string} key - 高德地图的API密钥\n * @returns {void}\n */\nexport function setApiKey(key: string): void {\n ExpoGaodeMapModule.setApiKey?.(key);\n}\n\nexport default {\n configure,\n start,\n stop,\n isStarted,\n getCurrentLocation,\n addLocationListener,\n coordinateConvert,\n startUpdatingHeading,\n stopUpdatingHeading,\n setApiKey,\n};\n"]}
1
+ {"version":3,"file":"AMapLocation.js","sourceRoot":"","sources":["../../src/modules/AMapLocation.ts"],"names":[],"mappings":"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","sourcesContent":["//高德地图定位模块\n\nimport { EventSubscription } from 'expo-modules-core';\nimport ExpoGaodeMapModule from '../ExpoGaodeMapModule';\nimport type {\n Coordinates,\n ReGeocode,\n LocationOptions,\n LocationListener,\n LatLng,\n CoordinateType,\n} from '../types';\n\n\n/**\n * 配置方法映射表\n * @type {Record<keyof LocationOptions, string>}\n * \n */\nconst CONFIG_MAP: Record<keyof LocationOptions, string> = {\n withReGeocode: 'setLocatingWithReGeocode',\n accuracy: 'setDesiredAccuracy',\n mode: 'setLocationMode',\n onceLocation: 'setOnceLocation',\n interval: 'setInterval',\n timeout: 'setLocationTimeout',\n reGeocodeTimeout: 'setReGeocodeTimeout',\n distanceFilter: 'setDistanceFilter',\n sensorEnable: 'setSensorEnable',\n wifiScan: 'setWifiScan',\n gpsFirst: 'setGpsFirst',\n onceLocationLatest: 'setOnceLocationLatest',\n geoLanguage: 'setGeoLanguage',\n allowsBackgroundLocationUpdates: 'setAllowsBackgroundLocationUpdates',\n pausesLocationUpdatesAutomatically: 'setPausesLocationUpdatesAutomatically',\n locationCacheEnable: 'setLocationCacheEnable',\n httpTimeout: 'setHttpTimeOut',\n protocol: 'setLocationProtocol',\n};\n\n/**\n * 配置高德地图定位选项\n * @param {LocationOptions} options - 定位配置选项对象\n * @throws {Error} 当传入的配置方法不存在或不可调用时抛出错误\n */\nexport function configure(options: LocationOptions): void {\n Object.entries(options).forEach(([key, value]) => {\n if (value !== undefined) {\n const methodName = CONFIG_MAP[key as keyof LocationOptions];\n const method = ExpoGaodeMapModule[methodName as keyof typeof ExpoGaodeMapModule];\n if (typeof method === 'function') {\n (method as any).call(ExpoGaodeMapModule, value);\n }\n }\n });\n}\n\n\n/**\n * 启动高德地图模块,开始连续定位\n * @throws 如果模块未初始化或启动失败时抛出异常\n */\nexport function start(): void {\n ExpoGaodeMapModule.start?.();\n}\n\n\n/**\n * 停止高德地图相关功能,停止定位\n * @returns {void} 无返回值\n */\nexport function stop(): void {\n ExpoGaodeMapModule.stop?.();\n}\n\n\n/**\n * 检查高德地图模块是否已启动,是否正在定位\n * @returns {Promise<boolean>} 返回一个Promise,解析为布尔值表示模块是否已启动\n */\nexport async function isStarted(): Promise<boolean> {\n return ExpoGaodeMapModule.isStarted?.() || Promise.resolve(false);\n}\n\n\n/**\n * 获取设备当前位置信息,单次定位\n * @returns {Promise<Coordinates | ReGeocode>} 返回包含坐标或逆地理编码信息的Promise\n * @throws 如果定位服务不可用或权限被拒绝时抛出错误\n */\nexport async function getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n return ExpoGaodeMapModule.getCurrentLocation?.();\n}\n\n\n/**\n * 添加位置更新监听器\n * @param {LocationListener} listener - 位置更新时的回调函数\n * @returns {EventSubscription} 事件订阅对象,包含移除监听器的方法\n * @throws 如果底层模块不可用,返回一个空操作的订阅对象\n */\nexport function addLocationListener(listener: LocationListener): EventSubscription {\n return ExpoGaodeMapModule.addListener?.('onLocationUpdate', listener) || {\n remove: () => {},\n } as EventSubscription;\n}\n\n\n/**\n * 将坐标点转换为指定坐标系下的坐标\n * @param {LatLng} coordinate - 需要转换的原始坐标点\n * @param {CoordinateType} type - 目标坐标系类型\n * @returns {Promise<LatLng>} 转换后的坐标点Promise\n * @throws 如果底层模块不可用,则返回原始坐标\n */\nexport async function coordinateConvert(\n coordinate: LatLng,\n type: CoordinateType\n): Promise<LatLng> {\n return ExpoGaodeMapModule.coordinateConvert?.(coordinate, type) || Promise.resolve(coordinate);\n}\n\n\n/**\n * 开始更新设备方向(罗盘朝向)\n * 调用原生模块方法启动方向更新功能\n * @throws 如果原生模块未实现此方法会抛出异常\n * @platform ios\n */\nexport function startUpdatingHeading(): void {\n ExpoGaodeMapModule.startUpdatingHeading?.();\n}\n\n\n/**\n * 停止更新设备方向(罗盘朝向)\n * 调用原生模块方法停止监听设备方向变化\n * @throws 如果原生模块未实现此方法会抛出异常\n * @platform ios\n */\nexport function stopUpdatingHeading(): void {\n ExpoGaodeMapModule.stopUpdatingHeading?.();\n}\n\n/**\n * 设置高德地图的API密钥\n * @param {string} key - 高德地图的API密钥\n * @returns {void}\n */\nexport function setApiKey(key: string): void {\n ExpoGaodeMapModule.setApiKey?.(key);\n}\n\nexport default {\n configure,\n start,\n stop,\n isStarted,\n getCurrentLocation,\n addLocationListener,\n coordinateConvert,\n startUpdatingHeading,\n stopUpdatingHeading,\n setApiKey,\n};\n"]}
@@ -270,7 +270,6 @@ export interface LocationOptions {
270
270
  geoLanguage?: GeoLanguage;
271
271
  /**
272
272
  * 是否允许后台定位
273
- * @platform ios
274
273
  * @default false
275
274
  */
276
275
  allowsBackgroundLocationUpdates?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"location.types.d.ts","sourceRoot":"","sources":["../../src/types/location.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location.types.d.ts","sourceRoot":"","sources":["../../src/types/location.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"location.types.js","sourceRoot":"","sources":["../../src/types/location.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsHH;;;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 */\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 * @platform ios\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"]}
1
+ {"version":3,"file":"location.types.js","sourceRoot":"","sources":["../../src/types/location.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsHH;;;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 */\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"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 通用事件管理器
3
+ * 用于管理地图覆盖物的事件回调
4
+ */
5
+ export declare class EventManager<T extends Record<string, any>> {
6
+ private callbacks;
7
+ register(id: string, callbacks: T): void;
8
+ unregister(id: string): void;
9
+ trigger<K extends keyof T>(id: string, eventType: K, data?: any): void;
10
+ }
11
+ //# sourceMappingURL=EventManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventManager.d.ts","sourceRoot":"","sources":["../../src/utils/EventManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACrD,OAAO,CAAC,SAAS,CAAwB;IAEzC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAIjC,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG;CAOhE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 通用事件管理器
3
+ * 用于管理地图覆盖物的事件回调
4
+ */
5
+ export class EventManager {
6
+ callbacks = new Map();
7
+ register(id, callbacks) {
8
+ this.callbacks.set(id, callbacks);
9
+ }
10
+ unregister(id) {
11
+ this.callbacks.delete(id);
12
+ }
13
+ trigger(id, eventType, data) {
14
+ const callbacks = this.callbacks.get(id);
15
+ const callback = callbacks?.[eventType];
16
+ if (typeof callback === 'function') {
17
+ callback(data);
18
+ }
19
+ }
20
+ }
21
+ //# sourceMappingURL=EventManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../../src/utils/EventManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,SAAS,GAAG,IAAI,GAAG,EAAa,CAAC;IAEzC,QAAQ,CAAC,EAAU,EAAE,SAAY;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAoB,EAAU,EAAE,SAAY,EAAE,IAAU;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * 通用事件管理器\n * 用于管理地图覆盖物的事件回调\n */\nexport class EventManager<T extends Record<string, any>> {\n private callbacks = new Map<string, T>();\n \n register(id: string, callbacks: T) {\n this.callbacks.set(id, callbacks);\n }\n \n unregister(id: string) {\n this.callbacks.delete(id);\n }\n \n trigger<K extends keyof T>(id: string, eventType: K, data?: any) {\n const callbacks = this.callbacks.get(id);\n const callback = callbacks?.[eventType];\n if (typeof callback === 'function') {\n callback(data);\n }\n }\n}"]}
package/docs/API.md CHANGED
@@ -194,13 +194,47 @@ configure({
194
194
 
195
195
  | 方法 | 参数 | 说明 |
196
196
  |------|------|------|
197
- | `setLocationTimeout` | `number` | 定位超时时间(秒) |
198
- | `setReGeocodeTimeout` | `number` | 逆地理超时时间(秒) |
199
- | `setDesiredAccuracy` | `number` | 期望精度(0-5,0: 最适合导航, 1: 最佳, 2: 10米, 3: 100米, 4: 1公里, 5: 3公里) |
200
- | `setDistanceFilter` | `number` | 距离过滤器(米) |
201
- | `setPausesLocationUpdatesAutomatically` | `boolean` | 是否自动暂停定位更新 |
197
+ | `setLocationTimeout` | `number` | 定位超时时间(秒,默认 2 秒) |
198
+ | `setReGeocodeTimeout` | `number` | 逆地理超时时间(秒,默认 2 秒) |
199
+ | `setDesiredAccuracy` | `number` | 期望精度(0-5,默认 3: 100米精度) |
200
+ | `setDistanceFilter` | `number` | 距离过滤器(米,默认 10 米) |
201
+ | `setPausesLocationUpdatesAutomatically` | `boolean` | 是否自动暂停定位更新(默认 false) |
202
+
203
+ **iOS 默认定位配置:**
204
+
205
+ 根据高德官方推荐,本库采用以下默认配置以实现快速定位:
206
+ - **精度**:`kCLLocationAccuracyHundredMeters`(100米精度,级别 3)
207
+ - **定位超时**:2 秒
208
+ - **逆地理超时**:2 秒
209
+ - **距离过滤**:10 米
210
+
211
+ > **精度说明**:
212
+ > - **百米精度**(推荐):2-3 秒内获取结果,满足大多数应用场景
213
+ > - **高精度**:使用 `setDesiredAccuracy(1)` 切换到 `kCLLocationAccuracyBest`,需配合 `setLocationTimeout(10)` 和 `setReGeocodeTimeout(10)`,约 10 秒获取 10 米精度
214
+ > - 苹果系统首次定位结果为粗定位,高精度需要更长时间
215
+
216
+ **精度级别对照表:**
217
+
218
+ | 级别 | 常量 | 说明 | 推荐超时 |
219
+ |------|------|------|----------|
220
+ | 0 | `kCLLocationAccuracyBestForNavigation` | 最适合导航 | 10 秒 |
221
+ | 1 | `kCLLocationAccuracyBest` | 最佳精度(~10米) | 10 秒 |
222
+ | 2 | `kCLLocationAccuracyNearestTenMeters` | 10米精度 | 5 秒 |
223
+ | 3 | `kCLLocationAccuracyHundredMeters` | 100米精度(默认) | 2-3 秒 |
224
+ | 4 | `kCLLocationAccuracyKilometer` | 1公里精度 | 1 秒 |
225
+ | 5 | `kCLLocationAccuracyThreeKilometers` | 3公里精度 | 1 秒 |
226
+
227
+ ##### 后台定位配置(全平台支持)
228
+
229
+ | 方法 | 参数 | 说明 |
230
+ |------|------|------|
202
231
  | `setAllowsBackgroundLocationUpdates` | `boolean` | 是否允许后台定位 |
203
232
 
233
+ > **后台定位说明**:
234
+ > - **iOS**: 需要在 Info.plist 中配置 `NSLocationAlwaysAndWhenInUseUsageDescription` 和 `UIBackgroundModes` (包含 `location`)
235
+ > - **Android**: 自动启动前台服务,需要 `ACCESS_BACKGROUND_LOCATION` 权限(Android 10+)
236
+ > - 后台定位会增加电量消耗,请谨慎使用
237
+
204
238
  ### 方向更新(iOS)
205
239
 
206
240
  | 方法 | 说明 |
@@ -174,10 +174,11 @@ class LocationManager: NSObject, AMapLocationManagerDelegate {
174
174
  private func initLocationManager() {
175
175
  locationManager = AMapLocationManager()
176
176
  locationManager?.delegate = self
177
- locationManager?.desiredAccuracy = kCLLocationAccuracyBest
177
+ // 推荐配置:百米精度,快速定位(2-3秒)
178
+ locationManager?.desiredAccuracy = kCLLocationAccuracyHundredMeters
178
179
  locationManager?.distanceFilter = 10
179
- locationManager?.locationTimeout = 1
180
- locationManager?.reGeocodeTimeout = 1
180
+ locationManager?.locationTimeout = 2 // 2秒超时
181
+ locationManager?.reGeocodeTimeout = 2 // 2秒超时
181
182
  locationManager?.locatingWithReGeocode = true
182
183
 
183
184
  // iOS 9 之前:防止后台被系统挂起(默认关闭,用户可通过 setPausesLocationUpdatesAutomatically 配置)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-gaode-map",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "一个功能完整的高德地图 React Native 组件库,基于 Expo Modules 开发,提供地图显示、定位、覆盖物等功能。",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",