Site Detail

rc-tools

rc-tools は、wplaceの道路敷設や地図反映作業を効率化するためのツール集です。道路地図URLと現地URLの変換、URLからの座標確認、折れ線計画、必要ペイント量、完成予定日の推定をまとめて扱えます。

Official Site

座標を読み、計画を作り、作業量を見積もるためのツール集

wplaceのURLを貼り付けるだけで、内部の世界座標やチャンク座標へ変換し、道路作業に必要な位置情報や見積もりを出せます。普段は結果だけ見れば使えますが、詳細欄では計算に使った座標や補正値も確認できます。

Type Tool Site
Owner ultimate_1113
Domain rc-tools.wplaceoki.com

Overview

何を助けるサイトなのか

wplaceのURLには緯度経度が入っていますが、道路作業で本当に見たいのは、チャンク内の座標、2地点の差分、折れ点、残り作業量です。rc-tools はURLからそれらを読み替え、作業者が判断しやすい形に直します。

Position

位置を揃える

緯度経度を世界座標、チャンク座標、タイル座標へ変換し、作業で共有しやすい座標にします。

Planning

線を引く計画を作る

始点と終点から折れ点や傾きを計算し、道路を引きやすい形に分解します。

Estimate

作業量を見積もる

必要ペイント数や進捗速度を計算し、いつ頃完成しそうかを見えるようにします。

Pages

ツールの紹介

Core Logic

計算の仕組み

rc-tools の根本は、wplace URLの緯度経度を「画面上のピクセル座標」に置き換えることです。緯度経度のままでは、チャンク内の位置や2地点間のピクセル距離を扱いにくいため、Webメルカトルの世界座標へ変換してから計算します。

01

緯度経度を読む

URLの latlng を取り出し、地球上の位置として解釈します。

02

世界座標へ変換

Webメルカトルの式で、左上原点・右向きx・下向きyのピクセル座標へ変換します。

03

ローカル座標へ分解

世界座標を4000px単位、1000px単位で割り、チャンクやタイル内の座標として表示します。

詳細しくみ: 座標変換の根本

Webメルカトルと世界座標

Webメルカトルは、多くのWeb地図で使われる投影法です。経度は横方向へほぼ線形に対応し、緯度は北極・南極に近づくほど大きく引き伸ばされます。wplaceのURLは緯度経度で地点を表しますが、作業上は「地図画像上の何px目か」のほうが扱いやすいため、ピクセル座標へ変換します。

rc-toolsでは、内部計算用のズームを 9 に固定しています。1チャンクを 4000px とみなし、世界全体の幅を SCALE = 4000 * 2^9 = 2048000px として扱います。

緯度を lat、経度を lngsinLat = sin(lat * PI / 180) とすると、世界座標は次の式で求めます。

worldX = ((lng + 180) / 360) * SCALE
worldY = (0.5 - log((1 + sinLat) / (1 - sinLat)) / (4 * PI)) * SCALE

逆に世界座標から緯度経度へ戻すときは、lng = (worldX / SCALE) * 360 - 180 を使い、y方向はメルカトルの逆変換で緯度へ戻します。経度が180度を超えた場合は、-180度から180度の範囲へ正規化します。

チャンク座標・タイル座標・ローカル座標

世界座標は大きな連続座標なので、そのままだと作業者同士で共有しにくい値になります。そこでrc-toolsでは、世界座標を一定サイズで区切り、どの区画の中の何px目かとして表示します。

チャンク座標は 4000px 単位です。chunkX = floor(worldX / 4000)chunkY = floor(worldY / 4000) とし、チャンク内座標は worldXworldY を4000で割った余りです。

タイル座標は 1000px 単位です。考え方は同じで、1000で割った区画番号と、その区画内のローカル座標に分けます。実装では負方向の余りにも対応できるよう、((px % modSize) + modSize) % modSize の形で余りを正規化しています。

地図座標と世界座標を変換できる理由

道路地図は、wplace上の一部範囲を別の縮尺で切り出した地図として扱えます。つまり、地図上の点と現地の点の間には、原点のずれと縮尺差を使った対応関係があります。

rc-toolsでは、道路地図側の左上原点を基準点として持ち、道路地図の1チャンクを 13 として扱います。内部ズーム9なので、道路地図側の幅は MAP_SCALE = 13 * 2^9 = 6656px です。現地の世界全体は 2048000px なので、比率は SCALE / MAP_SCALE になります。

地図URLから現地URLへ変換するときは、地図上の世界座標から道路地図原点を引き、その差分を SCALE / MAP_SCALE 倍して現地側の世界座標にします。ピクセルの左上ではなく中心を対応させるため、差分には 0.5px を足してから拡大します。

厳密には、緯度経度をWebメルカトルの世界座標へ落とし込んでから計算しています。経度0地点は世界幅の中央にあり、スクリーン座標系では世界座標とローカル座標の間隔は一定です。そのため、x方向・y方向に0.5pxずらして中心を合わせても、地点間の距離やチャンク内の間隔そのものは変わりません。

URL Coordinates

URL座標変換の使い方と仕組み

wplace URLを入力すると、その地点の世界座標、チャンク座標、タイル座標を表示します。地点の共有、道路計画の確認、他ツールの入力値確認に使えます。

Use

URLを貼る

https://wplace.live/?lat=...&lng=... の形式のURLを入力します。

Result

座標を見る

世界座標、チャンク座標、タイル座標がそれぞれ表示されます。

Debug

詳細を見る

詳細欄では、生の世界座標やmap座標に近い補助表示を確認できます。

詳細しくみ: URLから各座標を出す流れ

まずURLから latlng を取り出します。どちらかが存在しない、または数値として読めない場合は、URL解析エラーになります。

次に、共通関数で緯度経度を世界座標へ変換します。世界座標は小数を含む値ですが、表示用の世界座標は floor で整数化します。チャンク座標とタイル座標は、同じ世界座標を 4000 または 1000 で区切って求めます。

チャンク表示の形は [chunkX, chunkY] (localX, localY) です。前半がどのチャンクか、後半がそのチャンク内の位置です。道路作業では、巨大な世界座標よりもこちらのほうが共有しやすくなります。

Road Map URL

道路地図URL変換の使い方と仕組み

道路地図上のURLと、実際のwplace現地URLを相互に変換します。道路地図で見ている地点を現地で開いたり、現地の地点が道路地図上のどこに対応するかを確認できます。

Mode

変換方向を選ぶ

地図から現地へ変換するか、現地から地図へ変換するかを選びます。

Zoom

ズーム値を決める

出力するwplace URLのズーム値を指定できます。開いたときの見え方を調整するための値です。

Candidates

候補を確認する

現地から地図へ戻す場合、場所によっては右側・左側の2候補が出ます。

詳細しくみ: 道路地図URL変換の流れ

地図から現地へ変換する流れ

入力URLの緯度経度を道路地図側の世界座標に変換します。次に、その点が道路地図の左上原点からどれだけ離れているかを求めます。x方向は日付変更線付近で連続性が切れやすいため、地図原点より左側に見える場合は MAP_SCALE を足して、同じ地図上の連続した位置として扱います。

差分は shiftedX - ORIGIN.worldXmapWorldY - ORIGIN.worldY です。ここへピクセル中心補正の 0.5 を足し、SCALE / MAP_SCALE 倍して現地側の世界座標を作ります。

最後に、その現地側の世界座標を緯度経度へ戻し、https://wplace.live/?lat=...&lng=...&zoom=... のURLとして出力します。

現地から道路地図へ戻す流れ

現地URLを世界座標に変換したあと、今度は縮小方向に変換します。bx = floor(worldX * MAP_SCALE / SCALE)by = floor(worldY * MAP_SCALE / SCALE) として、現地側の位置を道路地図側のスケールへ縮めます。

その後、道路地図の原点を足し直して、道路地図上の世界座標に戻します。ただし、道路地図は日付変更線やインド付近の分岐をまたぐため、x方向には候補が1つまたは2つあります。実装では、インド西端・東端に相当する世界座標を境に、右側候補、左側候補、または両方を返します。

候補ごとに緯度経度へ戻し、道路地図の緯度範囲に入っているものだけを出力します。範囲外の場合は「入力座標は道路地図に対応しません」という扱いになります。

Polyline Planner

折れ線プランナーの使い方と仕組み

始点URLと終点URLから、道路として引きやすい折れ点を計算します。一直線で引きにくい斜め線を、扱いやすい傾きの2本に分けるための機能です。

Input

始点と終点を入れる

道路を引きたい区間の始点URLと終点URLを貼り付けます。

Order

折る順序を選ぶ

自動、始点側を緩やかにする、始点側を急にする、の3種類から選べます。

Output

折れ点を使う

始点、折れ点、終点のチャンク座標と、wplaceで開けるリンクが出ます。

詳細しくみ: 傾き候補と折れ点の決め方

始点と終点を世界座標へ変換し、x方向の差分 dx とy方向の差分 dy を求めます。目的の傾きは m = dy / dx です。

ただし、任意の小数傾きは作業しにくいため、rc-toolsでは使いやすい傾きセットを用意しています。候補は 1/20 から 1/212 から 20 までです。

目的の傾きに最も近い候補を探し、ぴったりでなければ目的傾きを挟む2つの傾き ab を使います。x方向の距離を NaNb に分け、a * Na + b * Nbdy に近くなるようにします。

自動モードでは、傾き a を先に使う場合と、傾き b を先に使う場合の両方を試し、計画上の終点が本来の終点に近い方を採用します。詳細欄には、各区間の距離、世界座標、チャンク座標、終点誤差が出ます。

Paint Calculator

ペイント量計算の使い方と仕組み

道路を引く前に、だいたい何pxぶんのペイントが必要になるかを見積もる機能です。始点と終点のURLをもとに距離を出し、道路幅や重ね幅を加味して作業量を計算します。

Use / Logic

使い方と簡単な仕組み

まず、計算したい区間の2地点をwplaceで開き、それぞれのURLを入力します。次に、道路幅と重ね幅を指定します。ツールは2地点を世界座標へ変換し、x方向とy方向にどれだけ離れているかを求めます。

そのうえで、長い方向を道路の長さ、短い方向を斜めに進むことで増える重なり分として扱います。計算式は (長い方向 - 1) * 道路幅 + 短い方向 * 重ね幅 です。日付変更線を跨ぐ可能性がある場合は、世界を短い側に回るかどうかを確認します。なお、傾きが1を跨ぐ道路では途中で長い方向と短い方向の扱いが入れ替わるため、この見積もりは使わない前提です。

Finish Date

完成予定日計算の使い方と仕組み

進み具合がわかる2つの時点を比べて、このままのペースならいつ完成しそうかを見積もる機能です。残りペイント数を定期的に記録しておくと、作業速度の目安として使えます。

Use / Logic

使い方と簡単な仕組み

まず、ある時点の日付と残りペイント数を入力します。次に、別の時点の日付と残りペイント数を入力します。古い順に入力しなくても、ツール側で時刻の早い観測と遅い観測に並べ直します。

2つの観測の間で残りペイント数がどれだけ減ったかを、経過時間で割ることで、1分あたりの進捗を求めます。そのペースが続くと仮定し、新しい観測時点で残っている量を消化するまでの時間を足して完成予定日を出します。人数換算では、1人あたり 100 / 42 paint/min を基準にしています。

Notes

使うときの注意

URL

lat / lng が必要

wplaceのURLに緯度と経度が入っていない場合、座標を読み取れません。

Range

道路地図は範囲あり

道路地図URL変換は、設定された道路地図の範囲内だけを対象にします。

Estimate

見積もりは前提つき

ペイント量や完成予定日は、入力時点の条件が続く前提の推定値として扱います。

Related

関連ページ