地球号ダーツの旅🎯（世界のどこかへ飛ぶブクマ）

## 動機
- 気軽に心だけ旅をしたい
- ランダムを楽しみたい

## 3種類 + ストビュー
1. 地球ダーツ
1. 日本ダーツ
1. 関東・東海ダーツ
1. ストリートビュー表示（相互）

:::note info
ズームレベルは2z（1目盛:2,000km） から 21z（1目盛:5m）
:::

## コード

##### 1. 地球ダーツ

- 南極率が高すぎたので南緯55~85は出ないよう設定
- 緯度85~90の極付近は南北とも提供なし
- PC用にズームアップ分岐を入れたがスマホでは必要なかった
- 陸地に当たる確率は半分以下※約7割が海


1a. スマホ用＠移動のみ（世界）

```javascript:
javascript:(()=>{if(!confirm('Jump?'))return;const base=10**7;const ido=Math.floor((Math.random()*170-85)*base)/base;const keido=Math.floor((Math.random()*360-180)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},6z/data=!3m1!1e3`;window.open(url,'_self')})()
```

1b. PC用＠ズーム選択あり（世界）

```javascript:
javascript:(()=>{const regex=/\,((\d|11|12)?(\.\d{1,10})?)z|\,\d{5,8}m/;const isFarMap=location.href.match(regex)??!1;if(!isFarMap){jump()}else if(!confirm('[OK]: Zoom Up\n[Cancel]: Other Place')){jump()}else{window.open(location.href.replace(regex,'\,15z'),'_self')} function jump(){if(!confirm('Jump?'))return;const base=10**7;const ido=Math.floor((Math.random()*140-55)*base)/base;const keido=Math.floor((Math.random()*360-180)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},5z/data=!3m1!1e3`;window.open(url,'_self')}})()
```


1a. コード全体／スマホ用（移動のみ）

```javascript:

function worldTravel()
{
  if(!confirm('Jump?')) return;
  const base      = 10**7;// 小数点以下7桁
  const ido  = Math.floor( (Math.random()*140-55) * base ) / base;
  const keido = Math.floor( (Math.random()*360-180) * base ) / base;
  const url = `https://www.google.co.jp/maps/@${ido},${keido},6z/data=!3m1!1e3`;// ズームレベル：6z
  window.open( url, '_self' );
}

```


1b. コード全体／PC用（ズーム選択あり）

```javascript:

function worldTravelwithZoom()
{
  const regex = /\,((\d|11|12)?(\.\d{1,10})?)z|\,\d{5,8}m/;
  const isFarMap = location.href.match(regex) ?? false;

  if(!isFarMap) {
    jump();
  } else if( !confirm('[OK]: Zoom Up\n[Cancel]: Other Place') ) {
    jump();
  } else {
    window.open( location.href.replace(regex, ',15z') , '_self');// ズームレベル：15z
  }

  function jump() {
    // ここはスマホ用と同一　
  }
}

```

- - -

##### 2.　日本ダーツ

- 北海道~九州が収まる程度の緯度経度に限定
- 世界版より一目で分かる土地が多いため縮尺は大きめ設定
- 陸に当たる可能性低い／隣国も出る


ブクマ用

2a. スマホ用＠移動のみ（日本）

```javascript:
javascript:(()=>{if(!confirm('Jump?'))return;const base=10**7;const ido=Math.floor((Math.random()**14+31)*base)/base;const keido=Math.floor((Math.random()*15+130)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},9z/data=!3m1!1e3`;window.open(url,'_self')})()
```


2b. PC用＠ズーム選択あり（日本）

```javascript:
javascript:(()=>{const regex=/\,((\d|11|12)?(\.\d{1,10})?)z|\,\d{5,8}m/;const isFarMap=location.href.match(regex)??!1;if(!isFarMap){jump()}else if(!confirm(%27[OK]: Zoom Up\n[Cancel]: Other Place%27)){jump()}else{window.open(location.href.replace(regex,%27\,17z%27),%27_self%27)} function jump(){if(!confirm(%27Jump?%27))return;const base=10**7;const ido=Math.floor((Math.random()*14+31)*base)/base;const keido=Math.floor((Math.random()*15+130)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},9z/data=!3m1!1e3`;window.open(url,%27_self%27)}})()
```

主な変更点

```javascript:

const ido  = Math.floor( (Math.random()*14+31) * base ) / base;
const keido  = Math.floor( (Math.random()*15+130) * base ) / base;

// ズーム前を9z、ズーム後を17zに指定
```

- - -

##### 3.　関東・東海ダーツ

- 前2つが海ばかり出て疲れるため、ほぼ陸地の関東~東海に限定


ブクマ用

3a. スマホ用＠移動のみ（関東〜東海）

```javascript:
javascript:(()=>{if(!confirm('Jump?'))return;const base=10**7;const ido=Math.floor((Math.random()**1.5+35)*base)/base;const keido=Math.floor((Math.random()*3.5+136.5)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},13z/data=!3m1!1e3`;window.open(url,'_self')})()
```

3b. PC用＠ズーム選択あり（関東〜東海）

```javascript:
javascript:(()=>{const regex=/\,((\d|11|12)?(\.\d{1,10})?)z|\,\d{5,8}m/;const isFarMap=location.href.match(regex)??!1;if(!isFarMap){jump()}else if(!confirm(%27[OK]: Zoom Up\n[Cancel]: Other Place%27)){jump()}else{window.open(location.href.replace(regex,%27\,17z%27),%27_self%27)} function jump(){if(!confirm(%27Jump?%27))return;const base=10**7;const ido=Math.floor((Math.random()*1.5 + 35)*base)/base;const keido=Math.floor((Math.random()*3.5 + 136.5)*base)/base;const url=`https://www.google.co.jp/maps/@${ido},${keido},11z/data=!3m1!1e3`;window.open(url,%27_self%27)}})()
```

主な変更点

```javascript:

const ido = Math.floor((Math.random()*1.5+35) * base) / base;
const keido = Math.floor((Math.random()*3.5+136.5) * base) / base;

// スマホ用は13z
// PC用はズーム前を11z、ズーム後を17zに指定　
```

- - -

##### 4.　ストリートビュー表示（相互）

- 1~3で道路や市街地に当たった際に使用
- 確認ダイアログで「OK」選択：ストリートビュー、「Cancel」選択：近接写真に遷移
- 撮影座標にマッチせず表示できない場合は、手動でストビュー人形や縮尺を操作、または再ダーツ


ブクマ用

```javascript:
javascript:(()=>{const url=location.href;const regex=/(@|viewpoint=)(\-?\d{0,3}(\.\d{1,8})?\,\-?\d{0,3}(\.\d{1,8})?)/;const m=url.match(regex)??!1;if(!m){alert('not work on this page.');return} let jumpTo;if(confirm('[OK]: Street View\n[Cancel]: closest pic')){jumpTo='https://www.google.com/maps/@?api=1&map_action=pano&viewpoint='+m[2]}else{jumpTo=`https://www.google.co.jp/maps/@${m[2]},19z/data=!3m1!1e3`} if(url!==jumpTo)window.open(jumpTo,'_self')})()
```

コード全体

```javascript:

  function stview()
  {
    const url = location.href;
    const regex = /(@|viewpoint=)(\-?\d{0,3}(\.\d{1,8})?\,\-?\d{0,3}(\.\d{1,8})?)/;
    const m = url.match(regex) ?? false;
    if(!m) {
      alert('not work on this page.');
      return;
    }
    let jumpTo;
    if(confirm('[OK]: Street View\n[Cancel]: closest pic')) {
      jumpTo = 'https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=' + m[2];// ストリートビュー
    } else {
      jumpTo = `https://www.google.co.jp/maps/@${m[2]},19z/data=!3m1!1e3`;// 近接写真（19z）
    }
    if(url !== jumpTo) window.open(jumpTo, '_self');
  }

```

- - -

#### ブックマーク方法

https://qiita.com/aqril_1132/items/b5f9040ccb8cbc705d04

:::note info
Android版Chromeはブックマークのタップでは動作しないため、自分でつけたブクマ名「だーつ」等をアドレスバーに直接入力し、サジェスト欄に表示された当該ブックマークをタップすれば実行可能です。
:::

- 「新規タブ」ページでは使用できません
- ブックマークレットの使用は自己責任でお願い致します
- 臨場感を求めて、いずれも航空写真のURLにしています。通信量にご注意下さい
- 地図表示にしたい場合は「data=!3m1!1e3」の部分を削除して下さい
- 極端な連続使用はご遠慮下さい

- - -

良き旅を！:airplane: