mapRenderer.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { type CameraState } from '../camera/camera'
  2. import { type TileStoreStats } from '../tile/tileStore'
  3. import { type LonLatPoint, type MapCalibration } from '../../utils/projection'
  4. import { type TileZoomBounds } from '../../utils/remoteMapConfig'
  5. export interface MapScene {
  6. tileSource: string
  7. osmTileSource: string
  8. zoom: number
  9. centerTileX: number
  10. centerTileY: number
  11. exactCenterWorldX: number
  12. exactCenterWorldY: number
  13. tileBoundsByZoom: Record<number, TileZoomBounds> | null
  14. viewportWidth: number
  15. viewportHeight: number
  16. visibleColumns: number
  17. overdraw: number
  18. translateX: number
  19. translateY: number
  20. rotationRad: number
  21. previewScale: number
  22. previewOriginX: number
  23. previewOriginY: number
  24. track: LonLatPoint[]
  25. gpsPoint: LonLatPoint
  26. gpsCalibration: MapCalibration
  27. gpsCalibrationOrigin: LonLatPoint
  28. osmReferenceEnabled: boolean
  29. overlayOpacity: number
  30. }
  31. export type MapRendererStats = TileStoreStats
  32. export interface MapRenderer {
  33. attachCanvas(canvasNode: any, width: number, height: number, dpr: number): void
  34. updateScene(scene: MapScene): void
  35. setAnimationPaused(paused: boolean): void
  36. destroy(): void
  37. }
  38. export function buildCamera(scene: MapScene): CameraState {
  39. return {
  40. centerWorldX: scene.centerTileX + 0.5,
  41. centerWorldY: scene.centerTileY + 0.5,
  42. viewportWidth: scene.viewportWidth,
  43. viewportHeight: scene.viewportHeight,
  44. visibleColumns: scene.visibleColumns,
  45. translateX: scene.translateX,
  46. translateY: scene.translateY,
  47. rotationRad: scene.rotationRad,
  48. }
  49. }