ツーリング拠点マップの話の四回目。
前回は2350件のデータで苦戦している話でした。
今回は、そのデータを直すための道具を自分で作った話です。

地図とCSVと公式サイトを行ったり来たり
座標がずれている施設は、結局のところ地図を見て手で直すしかありません。
やること自体は単純です。
施設名で地図を検索する。
正しい位置を右クリックして座標をコピーする。
表計算の該当行に貼る。
ついでに公式サイトを開いて、まだ生きているか確かめる。
これが未確認のまま 2,461件。
一件あたりの手間はたかが知れていますが、窓の行き来だけで日が暮れます。
そんなわけで、この行き来をひとつの画面に押し込む道具を作ることにしました。
画面が4枚に増えた
地図を表示するブラウザ。
真ん中に座標の貼り付け欄。
その隣に、未確認の施設名だけを縦に並べた列。
施設の公式サイト(ホームページ)を表示するブラウザ。
数えたら画面が4分割になっていました。
施設名をクリックすると、地図ブラウザがその施設を検索して、公式サイトブラウザがホームページを開きます。
あとは地図でピンを右クリックして「座標をコピー」を押すだけ。
クリップボードを0.6秒ごとに見張っていて、GPS座標の文字列が来たら勝手に貼り付け欄へ流れ込みます。
一覧の文字には色を付けました。
座標が未確認なら紺、URLが未確認なら緑、両方とも未確認なら赤。
赤を減らしていく作業だと思えば、なんとか続けられます。
Python標準のGUIにブラウザは無い
ここで問題がひとつ。
Python標準のGUI部品には、ウェブページを表示する機能がありません。
定番だった追加部品はPython 3.9までの対応で、こちらの環境は3.11。詰みです。
そこで、Chromeをアドレスバーもタブも無いモードで起動して、その窓を仮想的にGUIに組み込みました。
つまり自前でブラウザを描いているのではなく、外部のブラウザの窓それっぽく固定しているだけ。
最初は起動した瞬間にブラウザが一瞬見えて、すぐ消えました。
プロセスは元気に生きていましたが、枠の大きさを定義していなかったため、1×1ピクセルに縮んで視認不能でした・・・
絵とクリック位置が1.5倍ずれる
最大の難物はこれでした。
地図は見えている。しかしクリックすると、まるで違う場所の座標が取れる。
何も描かれていない上のほうにボタンの当たり判定があり、見えているボタンは押しても効かない。
原因は画面の拡大表示でした。
使っているモニタは4K(3840×2160)の150%表示。
Chromeは実寸の3840×2160で動くのに、拡大に対応していないPython側には、Windowsが2560×1440という嘘の画面を見せます。
その状態で他人の窓を掴むと、描画と当たり判定が1.5倍ずれる。
直し方そのものは一行で、Python側も拡大に対応していると宣言するだけ。
ただし宣言する場所が全てで、窓をひとつでも作った後では効きません。

この宣言、引数の型指定を間違えると失敗します。
エラーも出ず、ただ「失敗しました」と返ってくるだけ。
黙って失敗するのが一番たちが悪いですね。
今は縮めても動かしても切り離しても、ずれ0ピクセルを保っています。
押し間違いは機械に止めてもらう
道具ができると、今度は自分が信用できなくなります。
公式サイトブラウザには「いま表示しているページを、この施設の公式サイトとして採用する」というボタンを付けました。
リンクを辿った先が本物の公式サイトだった、という場面が実際にあるためです。
ただしこれは、別の施設のページを開いたまま押すと、無関係なURLで上書きするボタンでもあります。
そこでブラウザに「どの施設のために開いた窓なのか」を覚えさせました。
いま選んでいる施設と食い違っていたら、承認せずに止まります。
厄介だったのは、リンクを新しい窓で開いてしまったとき。
ブラウザに窓の一覧を聞くと返事は来るのですが、その並び順は保証されていないらしい。
素直に先頭を「表示中のページ」と信じると、後から開いた別窓のURLを掴みます。
なので起動直後に本命の窓へ印を付けておき、見失ったときは何も答えないことにしました。
分からないときに何もしないのが、この手の道具では一番安全なようです。
残っていたのは日付だけだった
しばらく使ったところで、自分で自分に質問しました。
「URLを上書きした施設はどれとどれだったか?」
答えられませんでした。
データに残るのは確認した日付だけ。
画面のログ欄は閉じれば消えます。
結局、バックアップとの差分を見比べて答える羽目になりました。
今は書き換えを伴う操作を全部、日時・操作・ファイル・施設名・内容の5列で記録しています。
追記するだけで、消さない。
道具を賢くするより、記録を残すほうが結局は早いというオチでした。
ちなみに人が確認する側の道具とは別に、機械の判定と公開を受け持つソフトがもう1本あります。
そちらの話は、また日を改めて。
地図サイトを作るはずが、地図サイトを作るための道具ばかり作っている気がします。


コメント