index.html 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Mock GPS Simulator</title>
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
  8. <link rel="stylesheet" href="./style.css">
  9. </head>
  10. <body>
  11. <div class="layout">
  12. <aside class="panel">
  13. <div class="panel__header">
  14. <div class="panel__eyebrow">MOCK GPS SIM</div>
  15. <h1>外部模拟器</h1>
  16. <div id="socketStatus" class="badge badge--muted">未连接</div>
  17. </div>
  18. <section class="group">
  19. <div class="group__title">资源加载</div>
  20. <label class="field">
  21. <span>游戏配置 URL</span>
  22. <input id="configUrlInput" type="text" value="https://oss-mbh5.colormaprun.com/wxmini/test/game.json">
  23. </label>
  24. <div class="row">
  25. <button id="loadConfigBtn" class="btn btn--primary">载入配置</button>
  26. <button id="fitCourseBtn" class="btn">适配视野</button>
  27. </div>
  28. <label class="field">
  29. <span>瓦片模板</span>
  30. <input id="tileUrlInput" type="text" placeholder="https://host/tiles/{z}/{x}/{y}.webp">
  31. </label>
  32. <div class="row">
  33. <button id="applyTilesBtn" class="btn">应用瓦片</button>
  34. <button id="resetTilesBtn" class="btn">恢复 OSM</button>
  35. </div>
  36. <label class="field">
  37. <span>KML URL</span>
  38. <input id="courseUrlInput" type="text" placeholder="https://host/course/c01.kml">
  39. </label>
  40. <div class="row">
  41. <button id="loadCourseBtn" class="btn">载入控制点</button>
  42. <button id="clearCourseBtn" class="btn">清空控制点</button>
  43. </div>
  44. <div id="resourceStatus" class="hint">支持直接载入 game.json,也支持单独填瓦片模板和 KML 地址。</div>
  45. <div id="resourceDetail" class="group__status">尚未载入资源</div>
  46. <div id="courseJumpList" class="jump-list"></div>
  47. </section>
  48. <section class="group">
  49. <div class="group__title">实时发送</div>
  50. <div id="realtimeStatus" class="group__status">桥接未连接</div>
  51. <div id="lastSendStatus" class="group__status">最近发送: --</div>
  52. <div class="row">
  53. <button id="connectBtn" class="btn btn--primary">连接桥接</button>
  54. <button id="sendOnceBtn" class="btn">发送一次</button>
  55. </div>
  56. <div class="row">
  57. <button id="streamBtn" class="btn btn--accent">开始连续发送</button>
  58. <button id="stopStreamBtn" class="btn">停止发送</button>
  59. </div>
  60. <label class="field">
  61. <span>发送频率</span>
  62. <select id="hzSelect">
  63. <option value="2">2 Hz</option>
  64. <option value="5" selected>5 Hz</option>
  65. <option value="10">10 Hz</option>
  66. </select>
  67. </label>
  68. <label class="field">
  69. <span>精度 (m)</span>
  70. <input id="accuracyInput" type="number" min="1" max="100" value="6">
  71. </label>
  72. </section>
  73. <section class="group">
  74. <div class="group__title">路径回放</div>
  75. <div id="playbackStatus" class="group__status">路径待命</div>
  76. <input id="trackFileInput" class="file-input-hidden" type="file" accept=".gpx,.kml,.geojson,.json,application/json,application/gpx+xml,application/vnd.google-earth.kml+xml">
  77. <div class="row">
  78. <button id="importTrackBtn" class="btn">导入轨迹文件</button>
  79. <button id="togglePathModeBtn" class="btn">开启路径编辑</button>
  80. </div>
  81. <div class="row">
  82. <button id="clearPathBtn" class="btn">清空路径</button>
  83. <button id="fitPathBtn" class="btn">适配路径</button>
  84. </div>
  85. <div class="row">
  86. <button id="playPathBtn" class="btn btn--accent">开始回放</button>
  87. <button id="pausePathBtn" class="btn">暂停回放</button>
  88. </div>
  89. <label class="field">
  90. <span>移动速度 (km/h)</span>
  91. <input id="speedInput" type="number" min="1" max="25" step="0.1" value="6">
  92. </label>
  93. <label class="field field--check">
  94. <input id="loopPathInput" type="checkbox" checked>
  95. <span>循环回放</span>
  96. </label>
  97. <div id="pathHint" class="hint">点击“开启路径编辑”后,在地图上逐点添加路径。</div>
  98. </section>
  99. <section class="group">
  100. <div class="group__title">当前位置</div>
  101. <div class="stat"><span>纬度</span><strong id="latText">--</strong></div>
  102. <div class="stat"><span>经度</span><strong id="lonText">--</strong></div>
  103. <div class="stat"><span>航向</span><strong id="headingText">--</strong></div>
  104. <div class="stat"><span>路径点</span><strong id="pathCountText">0</strong></div>
  105. </section>
  106. <section class="group">
  107. <div class="group__title">日志</div>
  108. <div id="log" class="log"></div>
  109. </section>
  110. </aside>
  111. <main class="map-shell">
  112. <div id="map"></div>
  113. </main>
  114. </div>
  115. <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
  116. <script src="./simulator.js"></script>
  117. </body>
  118. </html>