LoginSignup
4
5

More than 5 years have passed since last update.

日本ダーツの旅.jsを少しだけ改造してみた

Last updated at Posted at 2017-04-30

ふらっと旅に出かけたくなったときに、日本地図にダーツをして行き先を決める例のあれができるといいなと思っていると実際に作っている方がいらっしゃいました。
気軽に日本ダーツの旅.jsを作ってみた顛末
ただ、ご本人も書いているように"日本列島がすっぽり入る長方形の中にランダムに点"を打ってもだいたい海になってしまいます。
ならばもう少し陸地に範囲を絞ってしまおう!ということで範囲設定を改造してみました。

範囲設定

日本列島が弓形なので、東日本と西日本に分けてそれぞれを平行四辺形で囲むような形で範囲を設定しました。
こうすると基準点と角度を決めてしまえばあとはsin/cosで計算できます。

image
© OpenStreetMap contributors
以下の設定値では沖縄を含む離島は範囲に含まれていませんのでご注意ください。

ブックマークレット実装

乱数自体はx方向、y方向でそれぞれ算出し、平行四辺形の形に合わせて変換しているイメージです。

説明用
(function(){
    var POS_X = 37.5; //基準点の緯度
    var POS_Y = 136.5; //基準点の経度
    var DIS_WEST = 12.6; //西日本側の距離
    var DIS_EAST = 10.2; //東日本型の距離
    var x = Math.random() * (DIS_EAST + DIS_WEST) - DIS_WEST; //緯度用の乱数

    var DEG_X = x < 0 ? -157.5 : 61.5; //基準点からの角度設定
    var DEG_Y = -30; //基準点からの角度設定
    var Y_MAX = 5.5; //基準点からの距離設定
    var y = Math.random() * Y_MAX; //経度用の乱数

    var ido = POS_X + Math.abs(x) * Math.sin(DEG_X/180*Math.PI) + y * Math.sin(DEG_Y/180*Math.PI);
    var keido = POS_Y + Math.abs(x) * Math.cos(DEG_X/180*Math.PI) + y * Math.cos(DEG_Y/180*Math.PI);

    var baseUrl ="https://www.google.co.jp/maps/search/";
    var dartsPointUrl = baseUrl + ido + ",+" + keido;
    window.open(dartsPointUrl);
}());
ブックマークレットコピペ用
javascript:(function(){ var POS_X = 37.5; var POS_Y = 136.5; var DIS_WEST = 12.6; var DIS_EAST = 10.2; var x = Math.random() * (DIS_EAST + DIS_WEST) - DIS_WEST; var DEG_X = x < 0 ? -157.5 : 61.5; var DEG_Y = -30; var Y_MAX = 5.5; var y = Math.random() * Y_MAX; var ido = POS_X + Math.abs(x) * Math.sin(DEG_X/180*Math.PI) + y * Math.sin(DEG_Y/180*Math.PI); var keido = POS_Y + Math.abs(x) * Math.cos(DEG_X/180*Math.PI) + y * Math.cos(DEG_Y/180*Math.PI); var baseUrl ="https://www.google.co.jp/maps/search/"; var dartsPointUrl = baseUrl + ido + ",+" + keido;  window.open(dartsPointUrl); }());

旅の行き先に迷った場合にどうぞ。
そしてネタ元記事の@noexpectさん、プログラムお借りしました。ありがとうございました。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5