地図アプリで自分の好みの経路を検索したい

## Qiita初投稿
(大学時代から使っていた)Officeライセンスが切れたので、Qiitaで備忘録を取ることにする。
Markdown記法は以下を参考に勉強しながら進めることにする。

https://qiita.com/Qiita/items/c686397e4a0f4f11683d

## 目的
最終的な目的としては、自分用のナビゲーションアプリを作りたい。
普段原付に乗る機会があるのだが、少し遠出をしようと思うと、バイパスみたいな大通りを通らされることがある。
大型トラックが脇を通ると冷や汗もの。
そこで、そんな怖い思いをしなくていいように、ちょっとした裏道を選んで案内してくれるようなアプリを作りたい（田んぼ道とかも通りたい）。
NAVITIMEには既に原付向けのナビゲーションが搭載されているが、どうやら交通規制を適応しているだけらしい。[link][m]
[m]:https://corporate.navitime.co.jp/topics/pr/202007/29_5277.html]

## API
地図アプリを作成する上で、地図APIが必須だと思うので、何を使うか検討する。
使用環境は iPhone7：ios14 を想定。（機種買い替えないとな。。。）
加えて、無料で使えること、日本語の情報が多いことを条件にする。
粗いが、調べた内容をまとめる。（随時追記）

#### [Google Map][GM]

- マップ、ルート、プレイスに分けて説明されている。それぞれ下の認識。
  - マップ：地図部分。Googleマップを開いた時に最初に表示されるデータ。駅名とか建物名。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391844/3fc9703b-71ed-efca-2bdf-8ba0e6c3e4ce.png)
map
  - ルート：出発点から目的地までの経路の検索を行う。ルートの細かな設定とかはできるのかなあ[link][gm1]
  - プレイス：建物の詳細。自分がやりたい経路検索を行う上では必要のない認識。例として名古屋城を検索したときに出てくる情報は下。画像やクチコミ、住所などが紐づいている。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391844/4c894326-5116-5aef-56e6-ac6d881a9364.png)
- 道路の速度制限情報見たいのをとってこれるらしい。制限速度が低い道を優先的に選べるようにする。みたいな使い方ができれば良さそう。[link][gm2]
[gm]:https://developers.google.com/maps/documentation/ios-sdk/overview
[gm1]:https://cloud.google.com/maps-platform/routes?hl=ja
[gm2]:https://developers.google.com/maps/documentation/roads/overview?hl=ja

#### [Map Box][mb]

- Map Box+国土地理院地図みたいな使い方もできるらしい。[link][mb1]
- <del>Map Box+Open Street Mapもあるので、地図部分、画面上での操作は別のAPIで実装する雰囲気。[link][mb2]</del> 
- Map Boxの地図表示は、デフォルトがOpen Street Mapみたい。[link][mb3]
- Map BoxにもRoute Optionという仕組みがあるが、APIリファレンスには、ぱっと見詳しい情報は書かれていない。[link][mb4]
[mb]:https://docs.mapbox.com/jp/ios/maps/overview/
[mb1]:https://maps.gsi.go.jp/pn/meeting_partners/data/20191128/5.pdf
[mb2]:https://qiita.com/hal_sk/items/e0b3ca53303976bc0235
[mb3]:https://biz.kkc.co.jp/mapbox_blogdetail/2020071401/
[mb4]:https://docs.mapbox.com/ios/navigation/api/1.4.0/Extensions/RouteOptions.html

#### [Open Street Map][osm]

- 料金はcopylightを記載することを条件に、無料で利用できる。ただし、OSM使ってAPIなどを作成するのは禁止されている。[link][osm1]
- 現在地の精度が悪い。私は名古屋在住だが、現在地を取得すると兵庫のあたりにピンが刺さる。携帯でも同様。[link][osm2]<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391844/d7c3ca6c-4b76-17ed-e152-51998933b5de.png)
- オープンソースなだけあって、ルーティングのapiも豊富。[link][osm3]

[osm]:https://openstreetmap.jp/#zoom=5&lat=38.06539&lon=139.04297&layers=000B
[osm1]:https://www.openstreetmap.org/copyright
[osm2]:https://www.openstreetmap.org/search?
[osm3]:https://wiki.openstreetmap.org/wiki/Routing

#### [Bing Maps][bm]

- Editionがいくつかある模様。初めから上位のEditionを見ても分からないと思うので、一番下のLite Editionを使うことを想定。[link][bm1]
- APIリファレンスを参照すると、AvoidanceOptions、CarOptions、RouteOptionsなど、ルートを細かく設定するのに使えそうなものがいくつかある。問題はリファレンスが英語で、使いこなせるか。[link][bm2]
[bm]:https://www.xlsoft.com/jp/products/bing_maps/index.html
[bm1]:https://developer.here.com/documentation/ios-sdk-lite/4.7.0.0/dev_guide/index.html
[bm2]:https://developer.here.com/documentation/ios-sdk-lite/4.7.0.0/api_reference/Directions.html

## 結論

#### Google Maps APIを使ってみる。

以下比較結果

細かなルート設定が可能（調べられた範囲）
open stereet map > bing maps > google map > map box

検索結果(件数比較)
　bing maps api : 約 3,300,000 件
　google map sdk : 約 222,000,000 件
　map box api : 約 222,000,000 件
　open street map api : 約 91,200,000
google map = map box > open street map > bing map

#### open street mapを使わない理由
- 公式のドキュメントが日本語に対応していない。
- ルート検索に限らず自由度が高すぎて、今の知識量では使いこなすのが困難。
- 現在地が大きくズレる？

#### bing mapsを使わない理由
- 検索結果が少ない
- マイクロソフトのドキュメントが個人的に好きじゃない

google mapをいろいろ触ってみようと思う。

## 記事
[Google Maps API 関連を調べている中で気になった記事まとめ](https://qiita.com/UpTheChels/items/362aaa833b75578c8373)
[Google Mapを表示してみる](https://qiita.com/UpTheChels/items/48b2730c7407c2f5e240)
[現在地を取得する](https://qiita.com/UpTheChels/items/0346c77943a5fd7d43c6)
[検索した場所にピンを刺す](https://qiita.com/UpTheChels/items/441f7f535c6f88f1a468)
[自己位置と目的地の棲み分け](https://qiita.com/UpTheChels/items/67bea30460a1c87a37e7)