見出し画像

iOSでルートに沿った標高を取得する

「ルートに沿った標高の可視化」というのは、たとえばYAMAPという登山アプリだったり、

画像
YAMAPのスクリーンショット

標準のマップアプリ(いわゆるAppleマップ)もこんな感じでサポートしている。

画像
Appleマップでルート検索すると、折れ線グラフで標高が表示される

登山ではないにしても、坂道のアップダウンというのは(特に徒歩や自転車での)ルート選びにおいて重要な要素だと思う。

ただ、MapKit のルート検索API(に限らず、Google Maps Directions API や Mapbox Directions APIでも同様)では、ルート検索において坂のアップダウンを考慮したり、ルート検索時に標高値を同時に得る機能というのはない

なので、冒頭に挙げたような機能を実装したかったら、何かしらの方法でルートに沿った標高値を得る必要がある。

なお便宜上iOSと書いたが、本手法はmacOS, visionOSも含む、Appleプラットフォーム全体で共通する。

成果物

富士山の登山ルートを MKDirections で検索し、そのルートに沿った標高を取得してSwiftUIのChartsでグラフ表示してみたのがこちら:

画像

標高値の取得には国土地理院の標高タイルを使用した。

「ルートに沿った標高値を取得する」実装

MKDirections を利用したルート検索の実装はググればたくさん出てくるので割愛する。

またSwift Chartsでのグラフ表示も詳しい記事が他にあるので割愛。

標高タイルからルートに沿った標高値を取得する実装にフォーカスして実装の流れを記載する。

なおタイル云々のGISまわりの基礎概念についてはこちらのスライドで解説している:

ここから先は

4,644字

¥ 300

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/

ピックアップされています

日々の学びメモ

  • ¥400 / 月

購入者のコメント

コメントするには、 ログイン または 会員登録 をお願いします。
フリーランスiOSエンジニア。エンジニアと人生コミュニティ運営。YouTube・Podcastパーソナリティ。著書「iOS×BLE」「Metal入門」「実践ARKit」「iOSデプス詳解」他。GitHubでさまざまなOSSを公開。
iOSでルートに沿った標高を取得する|shu223
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1