complex-data
Advanced tools
+4
-0
@@ -29,2 +29,6 @@ | ||
| ### `4.10.8` | ||
| - fix(track): 修正 `parseAngle` 角度计算错误的情况,并添加抖动值参数支持。 | ||
| - fix(track): 修正轨迹初始状态在函数改变初始位置时未自动转换为暂停状态导致点击开始按钮会回到初始位置的 BUG。 | ||
| ### `4.10.7` | ||
@@ -31,0 +35,0 @@ - feat(SimpleDateEdit): `rangeLimit`配置扩展,添加相等判断和信息提示,并优化修正相关功能。 |
+1
-1
| { | ||
| "name": "complex-data", | ||
| "version": "4.10.7", | ||
| "version": "4.10.8", | ||
| "description": "a complex data", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+33
-23
@@ -55,17 +55,30 @@ import { getNum } from "complex-utils" | ||
| static $minSize = 2 | ||
| static parseAngle (currentLnglat: lnglatType, nextLnglat: lnglatType) { | ||
| if (currentLnglat && nextLnglat) { | ||
| const rad = Math.PI / 180 | ||
| const lat1 = currentLnglat.lat * rad | ||
| const lat2 = nextLnglat.lat * rad | ||
| const lng1 = currentLnglat.lng * rad | ||
| const lng2 = nextLnglat.lng * rad | ||
| const x = Math.sin(lng2 - lng1) * Math.cos(lat2) | ||
| const y = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1) | ||
| const radians = Math.atan2(x, y) | ||
| let angle = radians % (2 * Math.PI) | ||
| angle = (180 * radians) / Math.PI | ||
| /** | ||
| * | ||
| * @param current 当前经纬度 | ||
| * @param next 目标经纬度 | ||
| * @param jitterCm 抖动值(单位cm,低于抖动值则返回undefined) | ||
| * @returns | ||
| */ | ||
| static parseAngle( current: lnglatType, next: lnglatType, jitterCm?: number): number | undefined { | ||
| if (current && next) { | ||
| const dx = next.lng - current.lng | ||
| const dy = next.lat - current.lat | ||
| // ===== 抖动过滤(可选)===== | ||
| if (typeof jitterCm === 'number' && jitterCm > 0) { | ||
| // 将厘米换算为“近似经纬度距离” | ||
| const latMeter = dy * 111000 | ||
| const lngMeter = dx * 111000 * Math.cos(current.lat * Math.PI / 180) | ||
| const distanceMeter = Math.sqrt(latMeter * latMeter + lngMeter * lngMeter) | ||
| if (distanceMeter * 100 < jitterCm) { | ||
| return undefined | ||
| } | ||
| } | ||
| // ===== 正常角度计算(永远可算)===== | ||
| // 正东 = 0°,逆时针 | ||
| let angle = Math.atan2(dy, dx) * 180 / Math.PI | ||
| angle = (angle + 360) % 360 | ||
| // 转换为:正北 = 0°,顺时针(地图语义) | ||
| angle = (90 - angle + 360) % 360 | ||
| return angle | ||
| } else { | ||
| return undefined | ||
| } | ||
@@ -404,2 +417,7 @@ } | ||
| } | ||
| changeStatusByMove() { | ||
| if (this.getStatus() === 'stop') { | ||
| this.setStatus('pause') | ||
| } | ||
| } | ||
| // drag start --- | ||
@@ -410,5 +428,2 @@ triggerDrag(percent: number, drag: boolean) { | ||
| this.status.drag = true | ||
| if (this.getStatus() === 'stop') { | ||
| this.setStatus('pause') | ||
| } | ||
| } | ||
@@ -429,5 +444,2 @@ this.setPercent(percent) | ||
| this.setCurrentByOffset('backward', offset) | ||
| if (this.getStatus() === 'stop') { | ||
| this.setStatus('pause') | ||
| } | ||
| this.$start() | ||
@@ -439,5 +451,2 @@ } | ||
| this.setCurrentByOffset('forward', offset) | ||
| if (this.getStatus() === 'stop') { | ||
| this.setStatus('pause') | ||
| } | ||
| this.$start() | ||
@@ -514,2 +523,3 @@ } | ||
| this.$onIndexChange(currentIndex, lastIndex, lastLineIndex) | ||
| this.changeStatusByMove() | ||
| } | ||
@@ -516,0 +526,0 @@ protected $onIndexChange(currentIndex: number, lastIndex: number, lastLineIndex: number) { |
288194
0.23%7081
0.14%