Add animated orienteering course overlays and labels
This commit is contained in:
@@ -4,6 +4,7 @@ import { LocationController } from '../sensor/locationController'
|
||||
import { WebGLMapRenderer } from '../renderer/webglMapRenderer'
|
||||
import { type MapRendererStats } from '../renderer/mapRenderer'
|
||||
import { lonLatToWorldTile, worldTileToLonLat, type LonLatPoint, type MapCalibration } from '../../utils/projection'
|
||||
import { type OrienteeringCourseData } from '../../utils/orienteeringCourse'
|
||||
import { isTileWithinBounds, type RemoteMapConfig, type TileZoomBounds } from '../../utils/remoteMapConfig'
|
||||
|
||||
const RENDER_MODE = 'Single WebGL Pipeline'
|
||||
@@ -427,6 +428,8 @@ export class MapEngine {
|
||||
currentGpsPoint: LonLatPoint | null
|
||||
currentGpsTrack: LonLatPoint[]
|
||||
currentGpsAccuracyMeters: number | null
|
||||
courseData: OrienteeringCourseData | null
|
||||
cpRadiusMeters: number
|
||||
hasGpsCenteredOnce: boolean
|
||||
|
||||
constructor(buildVersion: string, callbacks: MapEngineCallbacks) {
|
||||
@@ -477,6 +480,8 @@ export class MapEngine {
|
||||
this.currentGpsPoint = null
|
||||
this.currentGpsTrack = []
|
||||
this.currentGpsAccuracyMeters = null
|
||||
this.courseData = null
|
||||
this.cpRadiusMeters = 5
|
||||
this.hasGpsCenteredOnce = false
|
||||
this.state = {
|
||||
buildVersion: this.buildVersion,
|
||||
@@ -649,8 +654,8 @@ export class MapEngine {
|
||||
)
|
||||
}
|
||||
|
||||
attachCanvas(canvasNode: any, width: number, height: number, dpr: number): void {
|
||||
this.renderer.attachCanvas(canvasNode, width, height, dpr)
|
||||
attachCanvas(canvasNode: any, width: number, height: number, dpr: number, labelCanvasNode?: any): void {
|
||||
this.renderer.attachCanvas(canvasNode, width, height, dpr, labelCanvasNode)
|
||||
this.mounted = true
|
||||
this.state.mapReady = true
|
||||
this.state.mapReadyText = 'READY'
|
||||
@@ -672,9 +677,11 @@ export class MapEngine {
|
||||
this.defaultCenterTileX = config.initialCenterTileX
|
||||
this.defaultCenterTileY = config.initialCenterTileY
|
||||
this.tileBoundsByZoom = config.tileBoundsByZoom
|
||||
this.courseData = config.course
|
||||
this.cpRadiusMeters = config.cpRadiusMeters
|
||||
|
||||
const statePatch: Partial<MapEngineViewState> = {
|
||||
configStatusText: '远程配置已载入',
|
||||
configStatusText: `远程配置已载入 / ${config.courseStatusText}`,
|
||||
projectionMode: config.projectionModeText,
|
||||
tileSource: config.tileSource,
|
||||
sensorHeadingText: formatHeadingText(this.smoothedSensorHeadingDeg === null ? null : getCompassReferenceHeadingDeg(this.northReferenceMode, this.smoothedSensorHeadingDeg)),
|
||||
@@ -1400,6 +1407,8 @@ export class MapEngine {
|
||||
gpsPoint: this.currentGpsPoint,
|
||||
gpsCalibration: GPS_MAP_CALIBRATION,
|
||||
gpsCalibrationOrigin: worldTileToLonLat({ x: this.defaultCenterTileX, y: this.defaultCenterTileY }, this.defaultZoom),
|
||||
course: this.courseData,
|
||||
cpRadiusMeters: this.cpRadiusMeters,
|
||||
osmReferenceEnabled: this.state.osmReferenceEnabled,
|
||||
overlayOpacity: MAP_OVERLAY_OPACITY,
|
||||
}
|
||||
@@ -1792,6 +1801,14 @@ export class MapEngine {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user