@wenle_2523097/agri-map 2.0.7 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/dist/components/PlotLayer/usePlotData.d.ts +7 -0
- package/dist/components/TrackPlayer/__tests__/index.test.d.ts +1 -1
- package/dist/components/TrackPlayer/__tests__/useTimeline.test.d.ts +5 -0
- package/dist/components/TrackPlayer/hooks/useTimeline.d.ts +58 -0
- package/dist/components/TrackPlayer/index.d.ts +13 -0
- package/dist/components/TrackPlayer/types.d.ts +30 -1
- package/dist/components/plotgrouplayer.esm.js +90 -6
- package/dist/components/plotgrouplayer.esm.js.map +1 -1
- package/dist/components/plotlayer.esm.js +90 -6
- package/dist/components/plotlayer.esm.js.map +1 -1
- package/dist/index.esm.js +117 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +117 -8
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +117 -8
- package/dist/index.umd.js.map +1 -1
- package/dist/types/plot.d.ts +7 -0
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -14778,6 +14778,73 @@ function parseVirtualizationConfig(virtualization) {
|
|
|
14778
14778
|
};
|
|
14779
14779
|
}
|
|
14780
14780
|
|
|
14781
|
+
/**
|
|
14782
|
+
* 检测并转换坐标格式
|
|
14783
|
+
* @description 如果第一个坐标值 > 90 且第二个值 <= 90,认为是 [lng, lat] 格式,需要翻转
|
|
14784
|
+
* @param positions 原始坐标数组
|
|
14785
|
+
* @returns 包含坐标顺序和标准化后坐标的结果
|
|
14786
|
+
*/
|
|
14787
|
+
function detectAndNormalizeCoordinates(positions) {
|
|
14788
|
+
if (!Array.isArray(positions) || positions.length === 0) {
|
|
14789
|
+
return {
|
|
14790
|
+
normalized: positions,
|
|
14791
|
+
order: 'lat-lng'
|
|
14792
|
+
};
|
|
14793
|
+
}
|
|
14794
|
+
// 获取第一个有效坐标进行格式检测
|
|
14795
|
+
var firstItem = positions[0];
|
|
14796
|
+
if (!Array.isArray(firstItem)) {
|
|
14797
|
+
return {
|
|
14798
|
+
normalized: positions,
|
|
14799
|
+
order: 'lat-lng'
|
|
14800
|
+
};
|
|
14801
|
+
}
|
|
14802
|
+
// 获取第一个坐标点
|
|
14803
|
+
var firstCoord = Array.isArray(firstItem[0]) ? firstItem[0] : firstItem;
|
|
14804
|
+
// 检查是否为有效坐标 [lat, lng] 或 [lng, lat]
|
|
14805
|
+
if (firstCoord.length >= 2) {
|
|
14806
|
+
var a = firstCoord[0];
|
|
14807
|
+
var b = firstCoord[1];
|
|
14808
|
+
// 如果 a > 90 && b <= 90,认为是经度值(经度范围 -180~180,纬度 -90~90)
|
|
14809
|
+
if (typeof a === 'number' && a > 90 && typeof b === 'number' && b <= 90) {
|
|
14810
|
+
var flip = function flip(coord) {
|
|
14811
|
+
return [coord[1], coord[0]];
|
|
14812
|
+
};
|
|
14813
|
+
if (Array.isArray(firstItem[0])) {
|
|
14814
|
+
// 三维数组:翻转所有环
|
|
14815
|
+
return {
|
|
14816
|
+
normalized: positions.map(function (inner) {
|
|
14817
|
+
return inner.map(flip);
|
|
14818
|
+
}),
|
|
14819
|
+
order: 'lng-lat'
|
|
14820
|
+
};
|
|
14821
|
+
}
|
|
14822
|
+
// 二维数组
|
|
14823
|
+
return {
|
|
14824
|
+
normalized: positions.map(flip),
|
|
14825
|
+
order: 'lng-lat'
|
|
14826
|
+
};
|
|
14827
|
+
}
|
|
14828
|
+
}
|
|
14829
|
+
return {
|
|
14830
|
+
normalized: positions,
|
|
14831
|
+
order: 'lat-lng'
|
|
14832
|
+
};
|
|
14833
|
+
}
|
|
14834
|
+
/**
|
|
14835
|
+
* 将坐标转换为原始输入格式
|
|
14836
|
+
* @param coords 内部标准格式坐标 [lat, lng]
|
|
14837
|
+
* @param order 原始输入格式
|
|
14838
|
+
* @returns 原始格式的坐标
|
|
14839
|
+
*/
|
|
14840
|
+
function convertToOriginalFormat(coords, order) {
|
|
14841
|
+
if (order === 'lng-lat') {
|
|
14842
|
+
return coords.map(function (coord) {
|
|
14843
|
+
return [coord[1], coord[0]];
|
|
14844
|
+
});
|
|
14845
|
+
}
|
|
14846
|
+
return coords;
|
|
14847
|
+
}
|
|
14781
14848
|
function usePlotData(_ref) {
|
|
14782
14849
|
var fieldNames = _ref.fieldNames,
|
|
14783
14850
|
dataSource = _ref.dataSource,
|
|
@@ -14794,9 +14861,13 @@ function usePlotData(_ref) {
|
|
|
14794
14861
|
// 映射原始数据到标准 PlotData 格式
|
|
14795
14862
|
var mapPlotData = useCallback(function (rawItem) {
|
|
14796
14863
|
var id = rawItem[mergedFieldNames.id];
|
|
14797
|
-
var
|
|
14864
|
+
var rawPositions = rawItem[mergedFieldNames.positions];
|
|
14798
14865
|
var area = rawItem[mergedFieldNames.area];
|
|
14799
14866
|
var possessor = rawItem[mergedFieldNames.possessor];
|
|
14867
|
+
// 检测并转换坐标格式
|
|
14868
|
+
var detectResult = detectAndNormalizeCoordinates(rawPositions);
|
|
14869
|
+
var positions = detectResult.normalized;
|
|
14870
|
+
var order = detectResult.order;
|
|
14800
14871
|
// 二维 positions [[lat,lng],...] → 三维 [[[lat,lng],...]]
|
|
14801
14872
|
if (Array.isArray(positions) && !is3DPositions(positions)) {
|
|
14802
14873
|
positions = [positions];
|
|
@@ -14820,7 +14891,8 @@ function usePlotData(_ref) {
|
|
|
14820
14891
|
positions: positions,
|
|
14821
14892
|
area: area,
|
|
14822
14893
|
possessor: possessor,
|
|
14823
|
-
customData: Object.keys(customData).length > 0 ? customData : undefined
|
|
14894
|
+
customData: Object.keys(customData).length > 0 ? customData : undefined,
|
|
14895
|
+
_coordinateOrder: order
|
|
14824
14896
|
}, extensionProps);
|
|
14825
14897
|
}, [mergedFieldNames]);
|
|
14826
14898
|
// 标准化数据源
|
|
@@ -15464,12 +15536,16 @@ function usePlotEditActions(_ref) {
|
|
|
15464
15536
|
* 获取完整的编辑结果数据
|
|
15465
15537
|
* @param coords - 编辑后的坐标
|
|
15466
15538
|
* @param area - 编辑后的面积
|
|
15467
|
-
* @returns
|
|
15539
|
+
* @returns 完整的地块数据(包含原始属性+新坐标),坐标格式保持与输入一致
|
|
15468
15540
|
*/
|
|
15469
15541
|
var getFullPlotData = useCallback(function (coords, area) {
|
|
15470
15542
|
if (!localPlotDataRef.current) return null;
|
|
15543
|
+
// 获取输入坐标格式
|
|
15544
|
+
var order = localPlotDataRef.current._coordinateOrder;
|
|
15545
|
+
// 转换为原始格式
|
|
15546
|
+
var originalCoords = convertToOriginalFormat(coords, order);
|
|
15471
15547
|
return _objectSpread2(_objectSpread2({}, localPlotDataRef.current), {}, {
|
|
15472
|
-
positions: [
|
|
15548
|
+
positions: [originalCoords],
|
|
15473
15549
|
area: area
|
|
15474
15550
|
});
|
|
15475
15551
|
}, []);
|
|
@@ -15533,6 +15609,7 @@ function usePlotEditActions(_ref) {
|
|
|
15533
15609
|
}, [cleanupEditEvents, cleanupFragmentLayers, setEditMode, editingLayerRef, drawingCoordinatesRef, preserveTempLayerRef, map]);
|
|
15534
15610
|
// ========== 操作处理函数 ==========
|
|
15535
15611
|
var handleSave = useCallback(function () {
|
|
15612
|
+
var _localPlotDataRef$cur;
|
|
15536
15613
|
var currentEditMode = editModeStateRef.current;
|
|
15537
15614
|
disableDrawMode(map);
|
|
15538
15615
|
var coords = drawingCoordinatesRef.current;
|
|
@@ -15551,12 +15628,16 @@ function usePlotEditActions(_ref) {
|
|
|
15551
15628
|
return;
|
|
15552
15629
|
}
|
|
15553
15630
|
var areaSquareMeters = calculatePolygonArea(coords);
|
|
15631
|
+
// 获取输入坐标格式并转换为原始格式
|
|
15632
|
+
var order = (_localPlotDataRef$cur = localPlotDataRef.current) === null || _localPlotDataRef$cur === void 0 ? void 0 : _localPlotDataRef$cur._coordinateOrder;
|
|
15633
|
+
var originalCoords = convertToOriginalFormat(coords, order);
|
|
15554
15634
|
// 获取完整的地块数据(包含原始属性)
|
|
15555
15635
|
var fullPlotData = getFullPlotData(coords, areaSquareMeters);
|
|
15556
15636
|
var result = {
|
|
15557
15637
|
plotId: selectedPlotId,
|
|
15558
15638
|
mode: currentEditMode,
|
|
15559
|
-
coordinates:
|
|
15639
|
+
coordinates: originalCoords,
|
|
15640
|
+
// 保持与输入一致的坐标格式
|
|
15560
15641
|
area: areaSquareMeters,
|
|
15561
15642
|
areaUnit: areaUnit,
|
|
15562
15643
|
plot: fullPlotData || undefined
|
|
@@ -15566,7 +15647,10 @@ function usePlotEditActions(_ref) {
|
|
|
15566
15647
|
result.selectedFragment = selectedFragmentRef.current;
|
|
15567
15648
|
}
|
|
15568
15649
|
if (currentEditMode === 'clip' && clipHolesRef.current) {
|
|
15569
|
-
|
|
15650
|
+
// 转换孔洞坐标为原始格式
|
|
15651
|
+
result.positions = clipHolesRef.current.map(function (hole) {
|
|
15652
|
+
return convertToOriginalFormat(hole, order);
|
|
15653
|
+
});
|
|
15570
15654
|
}
|
|
15571
15655
|
dispatchEditResult(result);
|
|
15572
15656
|
cleanupAfterSave(currentEditMode);
|
|
@@ -25601,7 +25685,8 @@ var TrackPlayer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
25601
25685
|
onPause = _ref.onPause,
|
|
25602
25686
|
onStop = _ref.onStop,
|
|
25603
25687
|
onProgress = _ref.onProgress,
|
|
25604
|
-
onComplete = _ref.onComplete
|
|
25688
|
+
onComplete = _ref.onComplete,
|
|
25689
|
+
onTimelineUpdate = _ref.onTimelineUpdate;
|
|
25605
25690
|
var map = useMap();
|
|
25606
25691
|
// ==================== 字段名合并 ====================
|
|
25607
25692
|
var mergedFieldNames = useMemo(function () {
|
|
@@ -25736,7 +25821,31 @@ var TrackPlayer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
25736
25821
|
var timestamp = currentPoint[2];
|
|
25737
25822
|
var formattedTime = timestamp !== null ? formatTime(timestamp) : null;
|
|
25738
25823
|
onProgress === null || onProgress === void 0 || onProgress(currentIndex, totalPoints, currentPoint, distance, timestamp, formattedTime);
|
|
25739
|
-
|
|
25824
|
+
// 时间轴进度详细回调
|
|
25825
|
+
if (onTimelineUpdate) {
|
|
25826
|
+
var _allPoints$, _allPoints$at;
|
|
25827
|
+
var startTime = (_allPoints$ = allPoints[0]) === null || _allPoints$ === void 0 ? void 0 : _allPoints$[2];
|
|
25828
|
+
var endTime = (_allPoints$at = allPoints.at(-1)) === null || _allPoints$at === void 0 ? void 0 : _allPoints$at[2];
|
|
25829
|
+
var progress = totalPoints > 1 ? currentIndex / (totalPoints - 1) : 0;
|
|
25830
|
+
var formatTimeStr = function formatTimeStr(ts) {
|
|
25831
|
+
if (ts === null) return null;
|
|
25832
|
+
var d = new Date(ts);
|
|
25833
|
+
return "".concat(String(d.getHours()).padStart(2, '0'), ":").concat(String(d.getMinutes()).padStart(2, '0'), ":").concat(String(d.getSeconds()).padStart(2, '0'));
|
|
25834
|
+
};
|
|
25835
|
+
onTimelineUpdate({
|
|
25836
|
+
currentIndex: currentIndex,
|
|
25837
|
+
totalPoints: totalPoints,
|
|
25838
|
+
progress: progress,
|
|
25839
|
+
startTime: startTime,
|
|
25840
|
+
endTime: endTime,
|
|
25841
|
+
currentTime: timestamp,
|
|
25842
|
+
startTimeStr: formatTimeStr(startTime),
|
|
25843
|
+
endTimeStr: formatTimeStr(endTime),
|
|
25844
|
+
currentTimeStr: formattedTime,
|
|
25845
|
+
distance: distance
|
|
25846
|
+
});
|
|
25847
|
+
}
|
|
25848
|
+
}, [map, currentIndex, allPoints, createMarkerIcon, onProgress, onTimelineUpdate, totalPoints]);
|
|
25740
25849
|
// 轨迹线(已走过部分用 playPath,未走到部分用 path)
|
|
25741
25850
|
useEffect(function () {
|
|
25742
25851
|
if (!map || !showTrack || allPoints.length === 0) return;
|