expo-gaode-map 2.2.16 → 2.2.17-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/app.plugin.js +0 -2
- package/build/components/overlays/Circle.d.ts.map +1 -1
- package/build/components/overlays/Circle.js +8 -3
- package/build/components/overlays/Circle.js.map +1 -1
- package/build/components/overlays/HeatMap.d.ts.map +1 -1
- package/build/components/overlays/HeatMap.js +4 -1
- package/build/components/overlays/HeatMap.js.map +1 -1
- package/build/components/overlays/Marker.d.ts.map +1 -1
- package/build/components/overlays/Marker.js +10 -4
- package/build/components/overlays/Marker.js.map +1 -1
- package/build/components/overlays/Polygon.d.ts.map +1 -1
- package/build/components/overlays/Polygon.js +5 -1
- package/build/components/overlays/Polygon.js.map +1 -1
- package/build/components/overlays/Polyline.d.ts.map +1 -1
- package/build/components/overlays/Polyline.js +5 -1
- package/build/components/overlays/Polyline.js.map +1 -1
- package/build/types/common.types.d.ts +7 -0
- package/build/types/common.types.d.ts.map +1 -1
- package/build/types/common.types.js.map +1 -1
- package/build/types/overlays.types.d.ts +12 -7
- package/build/types/overlays.types.d.ts.map +1 -1
- package/build/types/overlays.types.js.map +1 -1
- package/build/utils/GeoUtils.d.ts +18 -0
- package/build/utils/GeoUtils.d.ts.map +1 -0
- package/build/utils/GeoUtils.js +40 -0
- package/build/utils/GeoUtils.js.map +1 -0
- package/package.json +5 -5
package/app.plugin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,KAAK,EAAE,WAAW,qBAUjC;;AAqCD,wBAAiD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { requireNativeViewManager } from 'expo-modules-core';
|
|
3
|
+
import { normalizeLatLng } from '../../utils/GeoUtils';
|
|
3
4
|
const NativeCircleView = requireNativeViewManager('CircleView');
|
|
4
5
|
/**
|
|
5
6
|
* 高德地图圆形覆盖物组件(声明式)
|
|
@@ -9,15 +10,19 @@ const NativeCircleView = requireNativeViewManager('CircleView');
|
|
|
9
10
|
* @returns 渲染原生圆形组件
|
|
10
11
|
*/
|
|
11
12
|
function Circle(props) {
|
|
12
|
-
|
|
13
|
+
const { center, ...restProps } = props;
|
|
14
|
+
const normalizedCenter = normalizeLatLng(center);
|
|
15
|
+
return (<NativeCircleView center={normalizedCenter} {...restProps}/>);
|
|
13
16
|
}
|
|
14
17
|
/**
|
|
15
18
|
* 🔑 性能优化:浅比较关键属性
|
|
16
19
|
*/
|
|
17
20
|
function arePropsEqual(prevProps, nextProps) {
|
|
18
21
|
// 比较中心点坐标
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
const prevCenter = normalizeLatLng(prevProps.center);
|
|
23
|
+
const nextCenter = normalizeLatLng(nextProps.center);
|
|
24
|
+
if (prevCenter.latitude !== nextCenter.latitude ||
|
|
25
|
+
prevCenter.longitude !== nextCenter.longitude) {
|
|
21
26
|
return false;
|
|
22
27
|
}
|
|
23
28
|
// 比较半径
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.js","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Circle.js","sourceRoot":"","sources":["../../../src/components/overlays/Circle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,gBAAgB,GAAG,wBAAwB,CAAc,YAAY,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,KAAkB;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,CACL,CAAC,gBAAgB,CACf,MAAM,CAAC,CAAC,gBAAgB,CAAC,CACzB,IAAI,SAAS,CAAC,EACd,CACH,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,SAAsB,EAAE,SAAsB;IACnE,UAAU;IACV,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QAC3C,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport { requireNativeViewManager } from 'expo-modules-core';\nimport type { CircleProps } from '../../types';\nimport { normalizeLatLng } from '../../utils/GeoUtils';\n\nconst NativeCircleView = requireNativeViewManager<CircleProps>('CircleView');\n\n/**\n * 高德地图圆形覆盖物组件(声明式)\n *\n *\n * @param props 圆形组件的属性配置\n * @returns 渲染原生圆形组件\n */\nfunction Circle(props: CircleProps) {\n const { center, ...restProps } = props;\n const normalizedCenter = normalizeLatLng(center);\n \n return (\n <NativeCircleView \n center={normalizedCenter}\n {...restProps} \n />\n );\n}\n\n/**\n * 🔑 性能优化:浅比较关键属性\n */\nfunction arePropsEqual(prevProps: CircleProps, nextProps: CircleProps): boolean {\n // 比较中心点坐标\n const prevCenter = normalizeLatLng(prevProps.center);\n const nextCenter = normalizeLatLng(nextProps.center);\n\n if (prevCenter.latitude !== nextCenter.latitude ||\n prevCenter.longitude !== nextCenter.longitude) {\n return false;\n }\n \n // 比较半径\n if (prevProps.radius !== nextProps.radius) {\n return false;\n }\n \n // 比较样式属性\n if (prevProps.strokeWidth !== nextProps.strokeWidth ||\n prevProps.strokeColor !== nextProps.strokeColor ||\n prevProps.fillColor !== nextProps.fillColor ||\n prevProps.zIndex !== nextProps.zIndex) {\n return false;\n }\n \n // 比较回调\n if (prevProps.onCirclePress !== nextProps.onCirclePress) {\n return false;\n }\n \n return true;\n}\n\n// 导出优化后的组件\nexport default React.memo(Circle, arePropsEqual);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeatMap.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/HeatMap.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"HeatMap.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/HeatMap.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;;GAKG;AACH,iBAAS,OAAO,CAAC,KAAK,EAAE,YAAY,qBAanC;;AAiCD,wBAAkD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { requireNativeViewManager } from 'expo-modules-core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
+
import { normalizeLatLngList } from '../../utils/GeoUtils';
|
|
4
5
|
const NativeHeatMap = requireNativeViewManager('HeatMapView');
|
|
5
6
|
/**
|
|
6
7
|
* 高德地图热力图组件
|
|
@@ -9,7 +10,9 @@ const NativeHeatMap = requireNativeViewManager('HeatMapView');
|
|
|
9
10
|
* @returns 渲染高德地图原生热力图组件
|
|
10
11
|
*/
|
|
11
12
|
function HeatMap(props) {
|
|
12
|
-
|
|
13
|
+
const { data, ...restProps } = props;
|
|
14
|
+
const normalizedData = normalizeLatLngList(data);
|
|
15
|
+
return (<NativeHeatMap data={normalizedData} {...restProps} collapsable={false} pointerEvents="none" style={styles.hidden}/>);
|
|
13
16
|
}
|
|
14
17
|
const styles = StyleSheet.create({
|
|
15
18
|
hidden: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeatMap.js","sourceRoot":"","sources":["../../../src/components/overlays/HeatMap.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"HeatMap.js","sourceRoot":"","sources":["../../../src/components/overlays/HeatMap.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,aAAa,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;AAG9D;;;;;GAKG;AACH,SAAS,OAAO,CAAC,KAAmB;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CACL,CAAC,aAAa,CACZ,IAAI,CAAC,CAAC,cAAc,CAAC,CACrB,IAAI,SAAS,CAAC,CACd,WAAW,CAAC,CAAC,KAAK,CAAC,CACnB,aAAa,CAAC,MAAM,CACpB,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,CACH,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,eAAe,EAAE,aAAa;KAC/B;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,aAAa,CAAC,SAAuB,EAAE,SAAuB;IACrE,qBAAqB;IACrB,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACrC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import { requireNativeViewManager } from 'expo-modules-core';\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport type { HeatMapProps } from '../../types';\nimport { normalizeLatLngList } from '../../utils/GeoUtils';\n\nconst NativeHeatMap = requireNativeViewManager('HeatMapView');\n\n\n/**\n * 高德地图热力图组件\n *\n * @param props - 热力图配置属性,继承自NativeHeatMap组件的属性\n * @returns 渲染高德地图原生热力图组件\n */\nfunction HeatMap(props: HeatMapProps) {\n const { data, ...restProps } = props;\n const normalizedData = normalizeLatLngList(data);\n\n return (\n <NativeHeatMap\n data={normalizedData}\n {...restProps}\n collapsable={false}\n pointerEvents=\"none\"\n style={styles.hidden}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n hidden: {\n width: 0,\n height: 0,\n backgroundColor: 'transparent',\n },\n});\n\n/**\n * 🔑 性能优化:浅比较关键属性\n */\nfunction arePropsEqual(prevProps: HeatMapProps, nextProps: HeatMapProps): boolean {\n // 比较 data 数组引用(最常变化)\n if (prevProps.data !== nextProps.data) {\n return false;\n }\n\n if (prevProps.visible !== nextProps.visible) {\n return false;\n }\n \n // 比较样式属性\n if (prevProps.radius !== nextProps.radius ||\n prevProps.opacity !== nextProps.opacity) {\n return false;\n }\n \n return true;\n}\n\n// 导出优化后的组件\nexport default React.memo(HeatMap, arePropsEqual);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;;;;GASG;AACH,iBAAS,MAAM,CAAC,KAAK,EAAE,WAAW,qBAkCjC;;AA2CD,wBAAiD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { requireNativeViewManager } from 'expo-modules-core';
|
|
3
|
+
import { normalizeLatLng, normalizeLatLngList } from '../../utils/GeoUtils';
|
|
3
4
|
const NativeMarkerView = requireNativeViewManager('MarkerView');
|
|
4
5
|
/**
|
|
5
6
|
* Marker 组件 - 完全声明式 API
|
|
@@ -13,7 +14,10 @@ const NativeMarkerView = requireNativeViewManager('MarkerView');
|
|
|
13
14
|
*/
|
|
14
15
|
function Marker(props) {
|
|
15
16
|
// 从 props 中排除 position 属性,避免传递到原生层
|
|
16
|
-
const { position, customViewWidth, customViewHeight, iconWidth, iconHeight, children, ...restProps } = props;
|
|
17
|
+
const { position, customViewWidth, customViewHeight, iconWidth, iconHeight, children, smoothMovePath, ...restProps } = props;
|
|
18
|
+
// 归一化坐标处理
|
|
19
|
+
const normalizedPosition = normalizeLatLng(position);
|
|
20
|
+
const normalizedSmoothMovePath = smoothMovePath ? normalizeLatLngList(smoothMovePath) : undefined;
|
|
17
21
|
// 根据是否有 children 来决定使用哪个尺寸属性
|
|
18
22
|
const hasChildren = !!children;
|
|
19
23
|
// 智能尺寸计算
|
|
@@ -23,7 +27,7 @@ function Marker(props) {
|
|
|
23
27
|
const finalIconHeight = hasChildren
|
|
24
28
|
? (customViewHeight && customViewHeight > 0 ? customViewHeight : 0)
|
|
25
29
|
: (iconHeight && iconHeight > 0 ? iconHeight : 40);
|
|
26
|
-
return (<NativeMarkerView latitude={
|
|
30
|
+
return (<NativeMarkerView latitude={normalizedPosition.latitude} longitude={normalizedPosition.longitude} iconWidth={finalIconWidth} iconHeight={finalIconHeight} customViewWidth={finalIconWidth} customViewHeight={finalIconHeight} smoothMovePath={normalizedSmoothMovePath} {...restProps}>
|
|
27
31
|
{children}
|
|
28
32
|
</NativeMarkerView>);
|
|
29
33
|
}
|
|
@@ -33,8 +37,10 @@ function Marker(props) {
|
|
|
33
37
|
*/
|
|
34
38
|
function arePropsEqual(prevProps, nextProps) {
|
|
35
39
|
// 快速路径:比较 position (最常变化)
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
const prevPos = normalizeLatLng(prevProps.position);
|
|
41
|
+
const nextPos = normalizeLatLng(nextProps.position);
|
|
42
|
+
if (prevPos.latitude !== nextPos.latitude ||
|
|
43
|
+
prevPos.longitude !== nextPos.longitude) {
|
|
38
44
|
return false;
|
|
39
45
|
}
|
|
40
46
|
// 比较 cacheKey (如果提供了 cacheKey,其他属性理论上不会变)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Marker.js","sourceRoot":"","sources":["../../../src/components/overlays/Marker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;AAEhE;;;;;;;;;GASG;AACH,SAAS,MAAM,CAAC,KAAkB;IAChC,mCAAmC;IACnC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7H,UAAU;IACV,MAAM,kBAAkB,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,wBAAwB,GAAG,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElG,6BAA6B;IAC7B,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC;IAE/B,SAAS;IACT,MAAM,cAAc,GAAG,WAAW;QAChC,CAAC,CAAC,CAAC,eAAe,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAErD,OAAO,CACL,CAAC,gBAAgB,CACf,QAAQ,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CACtC,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CACxC,SAAS,CAAC,CAAC,cAAc,CAAC,CAC1B,UAAU,CAAC,CAAC,eAAe,CAAC,CAC5B,eAAe,CAAC,CAAC,cAAc,CAAC,CAChC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAClC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CACzC,IAAI,SAAS,CAAC,CAEd;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,SAAsB,EAAE,SAAsB;IACnE,0BAA0B;IAC1B,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpD,IACE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;QACrC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAC7B,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iCAAiC;IACjC,IAAI,SAAS,CAAC,kBAAkB,KAAK,SAAS,CAAC,kBAAkB,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe;IACf,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport { requireNativeViewManager } from 'expo-modules-core';\nimport type { MarkerProps } from '../../types';\nimport { normalizeLatLng, normalizeLatLngList } from '../../utils/GeoUtils';\n\nconst NativeMarkerView = requireNativeViewManager('MarkerView');\n\n/**\n * Marker 组件 - 完全声明式 API\n *\n * 支持:\n * - 自定义图标(icon)\n * - 自定义内容(children)- 自动测量尺寸\n * - 大头针样式(pinColor)\n * - 拖拽功能\n * - 所有事件回调\n */\nfunction Marker(props: MarkerProps) {\n // 从 props 中排除 position 属性,避免传递到原生层\n const { position, customViewWidth, customViewHeight, iconWidth, iconHeight, children, smoothMovePath, ...restProps } = props;\n \n // 归一化坐标处理\n const normalizedPosition = normalizeLatLng(position);\n const normalizedSmoothMovePath = smoothMovePath ? normalizeLatLngList(smoothMovePath) : undefined;\n\n // 根据是否有 children 来决定使用哪个尺寸属性\n const hasChildren = !!children;\n \n // 智能尺寸计算\n const finalIconWidth = hasChildren\n ? (customViewWidth && customViewWidth > 0 ? customViewWidth : 0)\n : (iconWidth && iconWidth > 0 ? iconWidth : 40);\n \n const finalIconHeight = hasChildren\n ? (customViewHeight && customViewHeight > 0 ? customViewHeight : 0)\n : (iconHeight && iconHeight > 0 ? iconHeight : 40);\n \n return (\n <NativeMarkerView\n latitude={normalizedPosition.latitude}\n longitude={normalizedPosition.longitude}\n iconWidth={finalIconWidth}\n iconHeight={finalIconHeight}\n customViewWidth={finalIconWidth}\n customViewHeight={finalIconHeight}\n smoothMovePath={normalizedSmoothMovePath}\n {...restProps}\n >\n {children}\n </NativeMarkerView>\n );\n}\n\n/**\n * 🔑 性能优化:极简比较函数\n * 只检查最常变化的关键属性,减少 JS 线程开销\n */\nfunction arePropsEqual(prevProps: MarkerProps, nextProps: MarkerProps): boolean {\n // 快速路径:比较 position (最常变化)\n const prevPos = normalizeLatLng(prevProps.position);\n const nextPos = normalizeLatLng(nextProps.position);\n\n if (\n prevPos.latitude !== nextPos.latitude ||\n prevPos.longitude !== nextPos.longitude\n ) {\n return false;\n }\n \n // 比较 cacheKey (如果提供了 cacheKey,其他属性理论上不会变)\n if (prevProps.cacheKey !== nextProps.cacheKey) {\n return false;\n }\n \n // 比较 children (如果有 children)\n if (prevProps.children !== nextProps.children) {\n return false;\n }\n \n // 比较 smoothMovePath (平滑移动路径)\n if (JSON.stringify(prevProps.smoothMovePath) !== JSON.stringify(nextProps.smoothMovePath)) {\n return false;\n }\n \n // 比较 smoothMoveDuration (平滑移动时长)\n if (prevProps.smoothMoveDuration !== nextProps.smoothMoveDuration) {\n return false;\n }\n \n // 其他属性相同,不重新渲染\n return true;\n}\n\n// 导出优化后的组件\nexport default React.memo(Marker, arePropsEqual);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;;GAKG;AACH,iBAAS,OAAO,CAAC,KAAK,EAAE,YAAY,qBAMnC;;AA4BD,wBAAkD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { normalizeLatLngList } from '../../utils/GeoUtils';
|
|
2
3
|
import { requireNativeViewManager } from 'expo-modules-core';
|
|
3
4
|
const NativePolygonView = requireNativeViewManager('PolygonView');
|
|
4
5
|
/**
|
|
@@ -8,7 +9,10 @@ const NativePolygonView = requireNativeViewManager('PolygonView');
|
|
|
8
9
|
* @returns 高德地图原生多边形视图组件
|
|
9
10
|
*/
|
|
10
11
|
function Polygon(props) {
|
|
11
|
-
|
|
12
|
+
const { points, ...restProps } = props;
|
|
13
|
+
// 归一化坐标数组
|
|
14
|
+
const normalizedPoints = normalizeLatLngList(points);
|
|
15
|
+
return <NativePolygonView points={normalizedPoints} {...restProps}/>;
|
|
12
16
|
}
|
|
13
17
|
/**
|
|
14
18
|
* 🔑 性能优化:浅比较关键属性
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Polygon.js","sourceRoot":"","sources":["../../../src/components/overlays/Polygon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,MAAM,iBAAiB,GAAG,wBAAwB,CAAe,aAAa,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,SAAS,OAAO,CAAC,KAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IACvC,UAAU;IACV,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAErD,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,SAAS,CAAC,EAAG,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,SAAuB,EAAE,SAAuB;IACrE,uBAAuB;IACvB,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;QAC3C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport type { PolygonProps } from '../../types';\nimport { normalizeLatLngList } from '../../utils/GeoUtils';\n\nimport { requireNativeViewManager } from 'expo-modules-core';\nconst NativePolygonView = requireNativeViewManager<PolygonProps>('PolygonView');\n\n/**\n * 渲染一个高德地图多边形覆盖物组件\n *\n * @param props - 多边形属性配置,继承自PolygonProps类型\n * @returns 高德地图原生多边形视图组件\n */\nfunction Polygon(props: PolygonProps) {\n const { points, ...restProps } = props;\n // 归一化坐标数组\n const normalizedPoints = normalizeLatLngList(points);\n\n return <NativePolygonView points={normalizedPoints} {...restProps} />;\n}\n\n/**\n * 🔑 性能优化:浅比较关键属性\n */\nfunction arePropsEqual(prevProps: PolygonProps, nextProps: PolygonProps): boolean {\n // 比较 points 数组引用(最常变化)\n if (prevProps.points !== nextProps.points) {\n return false;\n }\n \n // 比较样式属性\n if (prevProps.strokeWidth !== nextProps.strokeWidth ||\n prevProps.strokeColor !== nextProps.strokeColor ||\n prevProps.fillColor !== nextProps.fillColor ||\n prevProps.zIndex !== nextProps.zIndex) {\n return false;\n }\n \n // 比较回调\n if (prevProps.onPolygonPress !== nextProps.onPolygonPress) {\n return false;\n }\n \n return true;\n}\n\n// 导出优化后的组件\nexport default React.memo(Polygon, arePropsEqual);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,qBAMrC;;AA2BD,wBAAmD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { normalizeLatLngList } from '../../utils/GeoUtils';
|
|
2
3
|
import { requireNativeViewManager } from 'expo-modules-core';
|
|
3
4
|
const NativePolylineView = requireNativeViewManager('PolylineView');
|
|
4
5
|
/**
|
|
@@ -8,7 +9,10 @@ const NativePolylineView = requireNativeViewManager('PolylineView');
|
|
|
8
9
|
* @returns 高德地图原生折线视图组件
|
|
9
10
|
*/
|
|
10
11
|
function Polyline(props) {
|
|
11
|
-
|
|
12
|
+
const { points, ...restProps } = props;
|
|
13
|
+
// 归一化坐标数组
|
|
14
|
+
const normalizedPoints = normalizeLatLngList(points);
|
|
15
|
+
return <NativePolylineView points={normalizedPoints} {...restProps}/>;
|
|
12
16
|
}
|
|
13
17
|
/**
|
|
14
18
|
* 🔑 性能优化:浅比较关键属性
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../src/components/overlays/Polyline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,MAAM,kBAAkB,GAAG,wBAAwB,CAAgB,cAAc,CAAC,CAAC;AAEnF;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,KAAoB;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IACvC,UAAU;IACV,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAErD,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,SAAS,CAAC,EAAG,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,SAAwB,EAAE,SAAwB;IACvE,uBAAuB;IACvB,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,eAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport type { PolylineProps } from '../../types';\nimport { normalizeLatLngList } from '../../utils/GeoUtils';\n\nimport { requireNativeViewManager } from 'expo-modules-core';\nconst NativePolylineView = requireNativeViewManager<PolylineProps>('PolylineView');\n\n/**\n * 渲染高德地图上的折线覆盖物组件\n *\n * @param props - 折线属性配置,继承自PolylineProps类型\n * @returns 高德地图原生折线视图组件\n */\nfunction Polyline(props: PolylineProps) {\n const { points, ...restProps } = props;\n // 归一化坐标数组\n const normalizedPoints = normalizeLatLngList(points);\n \n return <NativePolylineView points={normalizedPoints} {...restProps} />;\n}\n\n/**\n * 🔑 性能优化:浅比较关键属性\n */\nfunction arePropsEqual(prevProps: PolylineProps, nextProps: PolylineProps): boolean {\n // 比较 points 数组引用(最常变化)\n if (prevProps.points !== nextProps.points) {\n return false;\n }\n \n // 比较样式属性\n if (prevProps.strokeWidth !== nextProps.strokeWidth ||\n prevProps.strokeColor !== nextProps.strokeColor ||\n prevProps.zIndex !== nextProps.zIndex) {\n return false;\n }\n \n // 比较回调\n if (prevProps.onPolylinePress !== nextProps.onPolylinePress) {\n return false;\n }\n \n return true;\n}\n\n// 导出优化后的组件\nexport default React.memo(Polyline, arePropsEqual);\n"]}
|
|
@@ -55,6 +55,13 @@ export interface LatLng {
|
|
|
55
55
|
*/
|
|
56
56
|
longitude: number;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* 坐标点类型
|
|
60
|
+
* 支持对象格式 { latitude, longitude }
|
|
61
|
+
* 或数组格式 [longitude, latitude] (GeoJSON 标准)
|
|
62
|
+
* 注意:GeoJSON 标准允许数组包含更多元素(如海拔),但本组件只使用前两个
|
|
63
|
+
*/
|
|
64
|
+
export type LatLngPoint = LatLng | [number, number] | number[];
|
|
58
65
|
/**
|
|
59
66
|
* 地图标注点(POI)
|
|
60
67
|
*/
|
|
@@ -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,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IAGjB,qBAAqB;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,oBAAY,OAAO;IACjB;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,KAAK,IAAI;IAET;;OAEG;IACH,IAAI,IAAI;IAER;;;OAGG;IACH,GAAG,IAAI;CACR;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC"}
|
|
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,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IAGjB,qBAAqB;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,oBAAY,OAAO;IACjB;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,KAAK,IAAI;IAET;;OAEG;IACH,IAAI,IAAI;IAER;;;OAGG;IACH,GAAG,IAAI;CACR;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"AAuIA;;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 * 权限状态(增强版,支持 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 */\nexport enum MapType {\n /**\n * 标准地图\n */\n Standard = 0,\n\n /**\n * 卫星地图\n */\n Satellite = 1,\n\n /**\n * 夜间地图\n */\n Night = 2,\n\n /**\n * 导航地图\n */\n Navi = 3,\n\n /**\n * 公交地图\n * @platform android\n */\n Bus = 4,\n}\n\n/**\n * 颜色值类型\n * 支持:\n * - 十六进制字符串: '#AARRGGBB' 或 '#RRGGBB'\n * - 数字格式: 0xAARRGGBB (用于 Android)\n */\nexport type ColorValue = string | number;\n"]}
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
* 基于 Expo Modules API
|
|
4
4
|
*/
|
|
5
5
|
import type { ImageSourcePropType, ViewStyle, NativeSyntheticEvent, TextStyle } from 'react-native';
|
|
6
|
-
import type { ColorValue, LatLng, Point } from './common.types';
|
|
6
|
+
import type { ColorValue, LatLng, LatLngPoint, Point } from './common.types';
|
|
7
7
|
/**
|
|
8
8
|
* 标记点属性
|
|
9
9
|
*/
|
|
10
10
|
export interface MarkerProps {
|
|
11
11
|
/**
|
|
12
12
|
* 坐标
|
|
13
|
+
* 支持对象 {latitude, longitude} 或数组 [longitude, latitude]
|
|
13
14
|
*/
|
|
14
|
-
position:
|
|
15
|
+
position: LatLngPoint;
|
|
15
16
|
/**
|
|
16
17
|
* 图标
|
|
17
18
|
*/
|
|
@@ -131,8 +132,9 @@ export interface MarkerProps {
|
|
|
131
132
|
export interface PolylineProps {
|
|
132
133
|
/**
|
|
133
134
|
* 节点坐标数组
|
|
135
|
+
* 支持对象 {latitude, longitude} 或数组 [longitude, latitude]
|
|
134
136
|
*/
|
|
135
|
-
points:
|
|
137
|
+
points: LatLngPoint[];
|
|
136
138
|
/**
|
|
137
139
|
* 线宽
|
|
138
140
|
*/
|
|
@@ -183,8 +185,9 @@ export interface PolylineProps {
|
|
|
183
185
|
export interface PolygonProps {
|
|
184
186
|
/**
|
|
185
187
|
* 节点坐标数组
|
|
188
|
+
* 支持对象 {latitude, longitude} 或数组 [longitude, latitude]
|
|
186
189
|
*/
|
|
187
|
-
points:
|
|
190
|
+
points: LatLngPoint[];
|
|
188
191
|
/**
|
|
189
192
|
* 边线宽度
|
|
190
193
|
*/
|
|
@@ -212,8 +215,9 @@ export interface PolygonProps {
|
|
|
212
215
|
export interface CircleProps {
|
|
213
216
|
/**
|
|
214
217
|
* 圆心坐标
|
|
218
|
+
* 支持对象 {latitude, longitude} 或数组 [longitude, latitude]
|
|
215
219
|
*/
|
|
216
|
-
center:
|
|
220
|
+
center: LatLngPoint;
|
|
217
221
|
/**
|
|
218
222
|
* 半径(米)
|
|
219
223
|
*/
|
|
@@ -260,8 +264,9 @@ export interface HeatMapGradient {
|
|
|
260
264
|
export interface HeatMapProps {
|
|
261
265
|
/**
|
|
262
266
|
* 热力点数据
|
|
267
|
+
* 支持对象 {latitude, longitude} 或数组 [longitude, latitude]
|
|
263
268
|
*/
|
|
264
|
-
data:
|
|
269
|
+
data: LatLngPoint[];
|
|
265
270
|
/**
|
|
266
271
|
* 是否显示热力图(用于避免频繁卸载/重建导致卡顿)
|
|
267
272
|
*/
|
|
@@ -369,7 +374,7 @@ export interface ClusterPoint {
|
|
|
369
374
|
/**
|
|
370
375
|
* 坐标(JS ClusterLayer 使用)
|
|
371
376
|
*/
|
|
372
|
-
position?:
|
|
377
|
+
position?: LatLngPoint;
|
|
373
378
|
/**
|
|
374
379
|
* 自定义数据
|
|
375
380
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.types.d.ts","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"overlays.types.d.ts","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.types.js","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图覆盖物相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { ImageSourcePropType, ViewStyle, NativeSyntheticEvent, TextStyle } from 'react-native';\nimport type { ColorValue, LatLng, Point } from './common.types';\n\n/**\n * 标记点属性\n */\nexport interface MarkerProps {\n /**\n * 坐标\n */\n position:
|
|
1
|
+
{"version":3,"file":"overlays.types.js","sourceRoot":"","sources":["../../src/types/overlays.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图覆盖物相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { ImageSourcePropType, ViewStyle, NativeSyntheticEvent, TextStyle } from 'react-native';\nimport type { ColorValue, LatLng, LatLngPoint, Point } from './common.types';\n\n/**\n * 标记点属性\n */\nexport interface MarkerProps {\n /**\n * 坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n position: LatLngPoint;\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType;\n\n /**\n * 图标宽度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconWidth?: number;\n\n /**\n * 图标高度(像素)\n * 仅在使用 icon 属性时有效\n */\n iconHeight?: number;\n\n /**\n * 标题\n */\n title?: string;\n\n /**\n * 描述\n */\n snippet?: string;\n\n /**\n * 透明度 [0, 1]\n * @platform android\n * @note iOS 不支持\n */\n opacity?: number;\n\n /**\n * 是否可拖拽\n */\n draggable?: boolean;\n\n /**\n * 是否平贴地图\n * @platform android\n * @note iOS 不支持\n */\n flat?: boolean;\n\n /**\n * 层级\n * @platform android\n * @note iOS 不支持 (使用 displayPriority)\n */\n zIndex?: number;\n\n /**\n * 覆盖物锚点比例\n * @platform android\n * @note iOS 使用 centerOffset\n */\n anchor?: Point;\n\n /**\n * 覆盖物偏移位置\n * @platform ios\n */\n centerOffset?: Point;\n\n /**\n * 是否显示动画\n * @platform ios\n */\n animatesDrop?: boolean;\n\n /**\n * 大头针颜色\n * Android 支持更多颜色,iOS 只支持 red, green, purple\n */\n pinColor?: 'red' | 'orange' | 'yellow' | 'green' | 'cyan' | 'blue' | 'violet' | 'magenta' | 'rose' | 'purple';\n\n /**\n * 自定义视图\n * 当使用 children 时,会将 React Native 组件渲染为图片显示在地图上\n */\n children?: React.ReactNode;\n\n /**\n * 自定义视图宽度(像素)\n * 仅在使用 children 属性时有效 \n * @default 80\n */\n customViewWidth?: number;\n\n /**\n * 自定义视图高度(像素)\n * 仅在使用 children 属性时有效\n * @default 30\n */\n customViewHeight?: number;\n\n /**\n * 缓存 key 建议使用 提高性能\n */\n cacheKey?: string;\n\n /**\n * 点击事件\n */\n onMarkerPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽开始事件\n */\n onMarkerDragStart?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽中事件\n */\n onMarkerDrag?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 拖拽结束事件\n */\n onMarkerDragEnd?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 平滑移动轨迹点数组\n * 设置后,Marker 会沿着轨迹平滑移动\n */\n smoothMovePath?: LatLng[];\n\n /**\n * 平滑移动总时长(秒)\n * @default 10\n */\n smoothMoveDuration?: number;\n}\n\n/**\n * 折线属性\n */\nexport interface PolylineProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n points: LatLngPoint[];\n\n /**\n * 线宽\n */\n strokeWidth?: number;\n\n /**\n * 线条颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 分段颜色\n */\n colors?: ColorValue[];\n\n /**\n * 是否使用渐变色\n * @platform android\n * @note iOS 不支持\n */\n gradient?: boolean;\n\n /**\n * 是否绘制大地线\n * @platform android\n * @note iOS 不支持\n */\n geodesic?: boolean;\n\n /**\n * 是否绘制虚线\n * @platform android\n * @note iOS 不支持\n */\n dotted?: boolean;\n\n /**\n * 纹理图片\n * 支持网络图片(http/https)、本地文件(file://)或资源名称\n */\n texture?: string;\n\n /**\n * 点击事件\n */\n onPolylinePress?: (event: NativeSyntheticEvent<{}>) => void;\n}\n\n/**\n * 多边形属性\n */\nexport interface PolygonProps {\n /**\n * 节点坐标数组\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n points: LatLngPoint[];\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onPolygonPress?: (event: NativeSyntheticEvent<{}>) => void;\n}\n\n/**\n * 圆形属性\n */\nexport interface CircleProps {\n /**\n * 圆心坐标\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n center: LatLngPoint;\n\n /**\n * 半径(米)\n */\n radius: number;\n\n /**\n * 边线宽度\n */\n strokeWidth?: number;\n\n /**\n * 边线颜色\n */\n strokeColor?: ColorValue;\n\n /**\n * 填充颜色\n */\n fillColor?: ColorValue;\n\n /**\n * 层级\n */\n zIndex?: number;\n\n /**\n * 点击事件\n */\n onCirclePress?: (event: NativeSyntheticEvent<{}>) => void;\n\n\n}\n\n/**\n * 热力图渐变配置\n */\nexport interface HeatMapGradient {\n /**\n * 颜色数组\n * 支持 '#RRGGBB', 'rgba()', 'red' 等\n */\n colors: ColorValue[];\n \n /**\n * 颜色起始点数组 [0-1]\n * 必须递增,例如 [0.2, 0.5, 0.9]\n */\n startPoints: number[];\n}\n\n/**\n * 热力图属性\n */\nexport interface HeatMapProps {\n /**\n * 热力点数据\n * 支持对象 {latitude, longitude} 或数组 [longitude, latitude]\n */\n data: LatLngPoint[];\n\n /**\n * 是否显示热力图(用于避免频繁卸载/重建导致卡顿)\n */\n visible?: boolean;\n\n /**\n * 热力半径(米)\n */\n radius?: number;\n\n /**\n * 透明度 [0, 1]\n */\n opacity?: number;\n\n /**\n * 热力图渐变配置\n */\n gradient?: HeatMapGradient;\n\n /**\n * 是否开启高清热力图(Retina适配)\n * @platform ios\n */\n allowRetinaAdapting?: boolean;\n}\n\n/**\n * 海量点标记项\n */\nexport interface MultiPointItem extends LatLng {\n /**\n * 唯一标识\n */\n id?: string | number;\n\n /**\n * 自定义数据\n */\n data?: any;\n}\n\n/**\n * 海量点属性\n */\nexport interface MultiPointProps {\n /**\n * 点集合\n */\n points: MultiPointItem[];\n\n /**\n * 图标\n */\n icon?: string | ImageSourcePropType; \n\n /**\n * 图标宽度\n */\n iconWidth?: number;\n\n /**\n * 图标高度\n */\n iconHeight?: number;\n\n /**\n * 点击事件\n */\n onMultiPointPress?: (event: NativeSyntheticEvent<{ index: number; item: MultiPointItem }>) => void;\n}\n\n/**\n * 聚合点参数\n */\nexport interface ClusterParams {\n /**\n * 包含的标记点数量\n */\n count: number;\n\n /**\n * 纬度\n */\n latitude: number;\n\n /**\n * 经度\n */\n longitude: number;\n\n /**\n * 包含的点数据列表\n */\n pois?: ClusterPoint[];\n\n /**\n * 唯一标识 (兼容性保留)\n */\n id?: number;\n\n /**\n * 聚合点坐标 (兼容性保留)\n */\n position?: LatLng;\n}\n\n/**\n * 聚合点项\n */\nexport interface ClusterPoint {\n /**\n * 纬度(原生 Cluster 使用)\n */\n latitude?: number;\n \n /**\n * 经度(原生 Cluster 使用)\n */\n longitude?: number;\n\n /**\n * 坐标(JS ClusterLayer 使用)\n */\n position?: LatLngPoint;\n\n /**\n * 自定义数据\n */\n properties?: any;\n}\n\n/**\n * 聚合图层属性\n */\nexport interface ClusterProps {\n /**\n * 聚合半径\n */\n radius?: number;\n\n /**\n * 最小聚合数量\n */\n minClusterSize?: number;\n\n /**\n * 聚合点样式\n */\n clusterStyle?: ViewStyle;\n\n /**\n * 分级聚合样式配置\n * 根据聚合数量动态设置样式\n */\n clusterBuckets?: ({ minPoints: number } & ViewStyle)[];\n\n /**\n * 聚合点文本样式\n */\n clusterTextStyle?: TextStyle;\n\n /**\n * 坐标点列表\n */\n points: ClusterPoint[];\n\n /**\n * 暂未实现,请勿使用\n */\n renderMarker?: (item: ClusterPoint) => React.ReactNode;\n\n /**\n * 暂未实现,请勿使用\n */\n renderCluster?: (params: ClusterParams) => React.ReactNode;\n\n /**\n * 聚合点点击事件\n */\n onClusterPress?: (event: NativeSyntheticEvent<ClusterParams>) => void;\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LatLng, LatLngPoint } from '../types/common.types';
|
|
2
|
+
/**
|
|
3
|
+
* 将坐标点归一化为对象格式
|
|
4
|
+
* 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象
|
|
5
|
+
* 注意:数组格式遵循 GeoJSON 标准,即 [经度, 纬度]
|
|
6
|
+
*
|
|
7
|
+
* @param point 坐标点
|
|
8
|
+
* @returns { latitude, longitude } 对象
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeLatLng(point: LatLngPoint): LatLng;
|
|
11
|
+
/**
|
|
12
|
+
* 将坐标点数组归一化为对象数组
|
|
13
|
+
*
|
|
14
|
+
* @param points 坐标点数组
|
|
15
|
+
* @returns LatLng 对象数组
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeLatLngList(points: LatLngPoint[]): LatLng[];
|
|
18
|
+
//# sourceMappingURL=GeoUtils.d.ts.map
|
|
@@ -0,0 +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;AAE5D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAuB1D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAGnE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将坐标点归一化为对象格式
|
|
3
|
+
* 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象
|
|
4
|
+
* 注意:数组格式遵循 GeoJSON 标准,即 [经度, 纬度]
|
|
5
|
+
*
|
|
6
|
+
* @param point 坐标点
|
|
7
|
+
* @returns { latitude, longitude } 对象
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeLatLng(point) {
|
|
10
|
+
if (Array.isArray(point)) {
|
|
11
|
+
let longitude = point[0];
|
|
12
|
+
let latitude = point[1];
|
|
13
|
+
// 智能纠错:如果纬度超出范围 [-90, 90] 且交换后在范围内,则认为是用户传反了
|
|
14
|
+
if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {
|
|
15
|
+
console.warn(`[expo-gaode-map] 检测到坐标数组格式可能为 [latitude, longitude] (${point}),已自动纠正为 [longitude, latitude]。建议显式使用 [经度, 纬度] 格式以遵循 GeoJSON 标准。`);
|
|
16
|
+
return {
|
|
17
|
+
latitude: longitude,
|
|
18
|
+
longitude: latitude
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
longitude,
|
|
23
|
+
latitude,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// 对象格式直接返回
|
|
27
|
+
return point;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 将坐标点数组归一化为对象数组
|
|
31
|
+
*
|
|
32
|
+
* @param points 坐标点数组
|
|
33
|
+
* @returns LatLng 对象数组
|
|
34
|
+
*/
|
|
35
|
+
export function normalizeLatLngList(points) {
|
|
36
|
+
if (!points)
|
|
37
|
+
return [];
|
|
38
|
+
return points.map(normalizeLatLng);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=GeoUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeoUtils.js","sourceRoot":"","sources":["../../src/utils/GeoUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAExB,6CAA6C;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,kEAAkE,CAChI,CAAC;YACF,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,QAAQ;aACpB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,WAAW;IACX,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { LatLng, LatLngPoint } from '../types/common.types';\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 = point[0];\n let latitude = 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 // 对象格式直接返回\n return point;\n}\n\n/**\n * 将坐标点数组归一化为对象数组\n * \n * @param points 坐标点数组\n * @returns LatLng 对象数组\n */\nexport function normalizeLatLngList(points: LatLngPoint[]): LatLng[] {\n if (!points) return [];\n return points.map(normalizeLatLng);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-gaode-map",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.17-next.1",
|
|
4
4
|
"description": "A full-featured AMap (Gaode Map) React Native component library built with Expo Modules, providing map display, location services, overlays, and more.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
"registry": "https://registry.npmjs.org/"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@expo/config-plugins": "
|
|
52
|
+
"@expo/config-plugins": "~54.0.4",
|
|
53
53
|
"@testing-library/react-native": "^13.3.3",
|
|
54
54
|
"@types/jest": "^29.5.14",
|
|
55
55
|
"@types/react": "~19.1.0",
|
|
56
56
|
"babel-preset-expo": "^54.0.8",
|
|
57
|
-
"expo": "^54.0.
|
|
58
|
-
"expo-module-scripts": "^5.0.
|
|
59
|
-
"jest": "
|
|
57
|
+
"expo": "^54.0.31",
|
|
58
|
+
"expo-module-scripts": "^5.0.8",
|
|
59
|
+
"jest": "~29.7.0",
|
|
60
60
|
"jest-expo": "^54.0.16",
|
|
61
61
|
"react-native": "0.81.5",
|
|
62
62
|
"react-test-renderer": "19.1.0",
|