NCAA180-Sleeper
League Data for NCAA 180
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Ride on QC — 曲がり角ごとの詳細地図と通過時刻の風向きが出るブルベ用キューシートを、GPXとExcelから単一HTMLで生成する静的Webアプリ(ブラウザ内処理・オフライン動作)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
GPXファイルと主催者配布のExcelキューシートから、iPhoneで見やすい単一HTML(簡易版+詳細版・オフライン動作・ダークモード対応)を自動生成する静的Webアプリです。 すべての曲がり角に詳細地図が付き、通過予定時刻の天気と風向き(追い風/向かい風)を表示します。 • バックエンド不要。GitHub Pages / Cloudflare Pages にそのまま置けます • ファイルはブラウザ内だけで処理します。外部と通信するのは地図タイル(地理院タイル/OpenStreetMap)と天気予報(Open-Meteo)の取得時だけで、送るのは地点の緯度経度のみです • 元になった仕様は docs/spec.md 1. ツールを開く(手元で動かす場合は app/index.html。サンプル読込を使うならローカルサーバ経由) 2. STEP1 GPX(必須)とExcel(任意)をドラッグ&ドロップ 3. STEP2 シート種別(簡易/詳細)と列の対応を確認(自動推定済み。違っていればプルダウンで修正) 4. STEP3 大会名・出走日時・想定速度などを設定して「キューシートを生成する」 5. STEP4 プレビューを確認して「HTMLをダウンロード」 生成物は単一HTMLなので、iPhoneの「ファイル」アプリやDropbox等に置いておけば、圏外でも閲覧できます。README 전문 보기 ↗
GPXファイルと主催者配布のExcelキューシートから、iPhoneで見やすい単一HTML(簡易版+詳細版・オフライン動作・ダークモード対応)を自動生成する静的Webアプリです。 すべての曲がり角に詳細地図が付き、通過予定時刻の天気と風向き(追い風/向かい風)を表示します。
docs/spec.mdapp/index.html。サンプル読込を使うならローカルサーバ経由)生成物は単一HTMLなので、iPhoneの「ファイル」アプリやDropbox等に置いておけば、圏外でも閲覧できます。
cd ride-on-qc
python3 -m http.server 8000 # http://localhost:8000/ … 紹介ページ
# http://localhost:8000/app/ … ツール本体
file:// で直接開いても動作しますが、「サンプルデータで試す」だけは fetch が使えないため利用できません。
ビルド不要の静的サイトなので、このリポジトリをそのまま公開できます。
Settings → Pages → Source を「Deploy from a branch」、Branch を main / / (root) に設定します。
| 簡易版 | 詳細版 | |
|---|---|---|
| 表示対象 | PC・通過チェック・Start/Goal | 全ての曲がり角+CP |
| 距離・Open/Close | ○ | ○ |
| ETA(速度連動・Close余裕で色分け) | ○ | −(天気パネル内でのみ使用) |
| 休憩・仮眠の加算(以降のETAを一括シフト) | ○(0〜24時間) | − |
| 距離補正ステッパー(±0.1/±1km) | ○ | ○ |
| 天気・地図パネル(タップで初めて通信) | − | ○ |
| ダークモード(OS設定に追従) | ○ | ○ |
| 日出・日没の自動計算 | ○ | − |
localStorage に保存され、次に開いたときも復元されます生成したHTMLを「ファイル」アプリからChrome/Edgeで開くと、ブラウザは edge://external-file(Chromeは chrome://external-file)という内部スキームで表示します。
iOSはこの状態からの外部通信(fetch・iframe)を一律で禁止しているため、天気と地図は表示できません。ネットワークやプロキシの問題ではありません。
| 開き方 | キューシート・ETA・距離補正 | 天気・地図 |
|---|---|---|
| 端末内のファイルとして開く(オフライン可) | ○ | 埋め込んでおけば○(していなければ×。地図アプリへのリンクは使えます) |
| https のURLから開く | ○ | ○ |
閲覧時に取りに行けないなら、生成時に取って埋め込んでおけば同じことができます。STEP3の設定で選べます。
埋め込みがある場合の優先順位は「通信できるなら最新の予報 → 駄目なら埋め込み」です。 ただし端末内のファイルとして開いているときは、待たせずに埋め込み分を先に表示し、通信できた場合だけ裏で最新に差し替えます。 地図は、埋め込みタイルがあれば常にそれを表示し、無ければルート略図を出したうえで、通信できるようならOpenStreetMapの地図に差し替えます。
なお iOSのChrome/Edgeはアドレス欄に edge://external-file と表示しますが、ページ自体は file: として動きます。
そのため生成物は「file: なら通信できない可能性が高い」前提で、待たせずに埋め込み分を先に出すようにしています。
埋め込みが無い地点では、生成物は状況を検出して待たずに理由を表示し、 OpenStreetMap/Apple マップ/Googleマップへのリンクを出します(リンクは内部スキームからでも開けます)。
天気・地図も使いたい場合は、生成したHTMLを https で開ける場所に置いてください。
GitHub Pages を使っているなら、生成物をリポジトリの適当なディレクトリ(例: sheets/)に置けばそのままURLになります。
電波の無い区間に備えるなら、同じファイルを端末内にも保存しておく運用(オンラインではURL版、圏外ではファイル版)が確実です。
RideWithGPS等の書き出しを想定。trkpt から Haversine距離を積算して累積距離配列を作り、wpt はコース上の位置(km)とコースからの離れ具合を計算して保持します。
自動推定したうえで、STEP2で必ず確認できるようにしています。対応済みのゆらぎ:
40.6km のような文字列0.75=18:00)/24時間超の [h]:mm(1.35=32:24)/日付込みシリアル(46208.005…)/12日 08:12/9/12 8:12/翌03:00/3日目 05:00PC1 等が入る書式Open列とClose列はそれぞれ独立に単調増加するものとして日跨ぎを解決します(「次のCPのOpen < 前のCPのClose」で誤って1日進めないため)。
各地の主催者が公開しているキューシートで、実際に読めることを確認したものです(2026年9月時点)。
| 主催者 | 例 | 特徴 | 結果 |
|---|---|---|---|
| AJ北海道 | BRM912函館300 | 2行見出し(「地点までの」+「区間/積算」)、CP名が道標欄 | CP 8/時刻 8/8 |
| AJ静岡 | BRM328・425・530・627 | 「通過点/進路/ルート/区間/合計」、時刻が「7:16〜9:09」の範囲表記 | CP 7〜8/時刻ほぼ全件 |
| AJ神奈川 | BRM531興津200 | 英語見出し(CUE/PC/TRIP/ADD/POINT NAME/DIR/SIG/RT)、時刻はシリアル値 | CP 7/時刻 7/7 |
| AJたまがわ | BRM411大洗200 | Control1 表記、時刻は「OPEN 07:55 CLOSE 09:33」 | CP 8/時刻 8/8 |
| オダックス埼玉 | BRM118/208/606 | 「合計」列、時刻が「参考10:45」「参考11:45」と別列に分離 | CP 4〜10/時刻全件 |
| (青森) | BRM919岩木山200 | 進路が矢印記号、時刻が備考欄の文中、交差点形状の列 | CP 6/時刻 4/6 ※ |
※主催者が通過チェックの時刻を書いていないもの。その地点だけACP基準で補完し「(推定)」と表示します。
見出しから積算距離の列が判別できない場合(AJ神奈川の ADD など)は、
数値列を単調増加・値域・小数の有無で評価し、GPXの総距離と突き合わせて自動で選び直します。
読めなかった例:一部のアプリ(HCell等)が書き出した、要素名に名前空間が付いた xlsx
(<x:worksheet>)。SheetJSが対応していないため、Excel・Googleスプレッドシート・LibreOffice で
開いて保存し直すと読めます(その旨を画面に表示します)。
Excelが無い場合は、
PC1…, 通過C1… など)+始終点からCPを構成これらを使った場合は生成時に警告が出ます。必ず主催者の公式キューシートで確認してください。
単純な最近傍スナップではなく、線形補間で求めています(仕様書5章)。
trkpt 列から累積距離配列 cum[] を作成(Haversine距離の積算)scale = Excel総距離 / GPX総距離 でスケール補正d に対し d / scale が入る区間を二分探索STEP4の「座標マッチング結果」で、各地点の座標・方位・取得方法(距離補間かウェイポイントか)を確認できます。
ride-on-qc/
├── index.html 紹介ページ(GitHub Pages のトップ)
├── assets/ 紹介ページ用(site.css・アイコン)
├── make_icon.py アイコンの生成スクリプト
├── app/ ツール本体(ここが実体)
│ ├── index.html
│ ├── assets/app.css
│ ├── js/
│ │ ├── util.js 距離・方位・時刻・日出日没
│ │ ├── offline.js 天気予報・地図タイルの取得(オフライン埋め込み用)
│ │ ├── gpx.js GPX解析/累積距離/線形補間/方位
│ │ ├── turns.js 曲がり角の自動抽出
│ │ ├── xlsx-import.js Excel読取・見出し/列推定・時刻パーサ
│ │ ├── match.js Excel×GPXの突き合わせ・ACP時刻計算
│ │ ├── template.js 出力HTMLテンプレート(CSS+ランタイム)
│ │ └── app.js 画面制御
│ ├── vendor/xlsx.full.min.js SheetJS 0.18.5(同梱:オフラインでも動くように)
│ └── samples/ デモ用の架空コース(GPX+書式違いのExcel 6種)
│ 標準/区間距離のみ/2行見出し/矢印+文中時刻/英語見出し/Audax標準型
├── tests/
│ ├── make-samples.mjs サンプル生成
│ └── e2e.mjs Playwrightによる通しテスト
└── docs/spec.md 仕様書
node tests/make-samples.mjs # サンプルGPX/Excelを再生成
node tests/e2e.mjs # 通しテスト(要 playwright)
OUT_DIR=./out node tests/e2e.mjs # 生成物とスクリーンショットの出力先を指定
tests/e2e.mjs は、サンプル読込 → 列の自動推定 → 生成 → プレビュー操作(速度・距離補正・休憩・タブ・天気パネル)→ ダークモード → GPX単体生成までを検証します。
api.open-meteo.com と www.openstreetmap.org に届かない環境(オフライン、社内・庁内プロキシやURLフィルタ)では
地図が白いままになり、天気は10秒でタイムアウトします。その場合はパネルに理由と再試行ボタンが出ますAsia/Tokyo で取得します(国内開催を想定)このリポジトリのコードは MIT License です(LICENSE)。
vendor/xlsx.full.min.js は SheetJS Community Edition 0.18.5 を
同梱したものです(Apache License 2.0)。オフラインでも Excel を読めるようにするためで、
再配布する場合はこの表示を残してください。