SwiftでGoogle Maps Elevation APIを利用して地点の標高を取得する

More than 1 year has passed since last update.


概要

Google Maps Elevation APIにリクエストして標高の情報を取得する実装のメモです。


Elevation APIについて

Google Maps Elevation API のシンプルなインターフェースを使用すると、

地球上の任意の地点における標高データを問い合わせることができます。
さらに、任意のルート上で標高データをサンプリングするようリクエストして、
そのルートに沿った標高の変化を計算することもできます。

こういったことができます。

公式のデベロッパーガイドはこちらです。


実装してみる


準備:APIキーの取得

APIのリクエストにはAPIキーが必要です。

このページを開いて、「キーを取得する」ボタンから取得します。


実装

簡単な例として、ViewControllerが表示されたタイミングでAPIリクエストを行うように実装しました。

import UIKit

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

request()
}

private func request() {
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)

let apiKey = "<YOUR_API_KEY>"
let url = "https://maps.googleapis.com/maps/api/elevation/json?key=\(apiKey)&locations=35.360556,138.727778"
let task = session.dataTask(with: URL(string: url)!) { (data, response, error) in
if let error = error {
print(error)
} else {
let json = try! JSONSerialization.jsonObject(with: data!, options: []) as! [String: Any]
if let results = json["results"] as? [[String: Any]] {
for result in results {
if let location = result["location"] as? [String: Double] {
print(location["lat"])
print(location["lng"])
}
print(result["elevation"] as? Double)
}
}
}
}
task.resume()
}
}

の部分を事前準備で取得した自分のAPIキーに置き換えればAPIリクエストが成功すると思います。

locationsには標高を取得したい地点の緯度・経度を指定してください。

上記の例では富士山が指定されています(緯度:35.360556, 経度:138.727778)


複数の位置情報をリクエストする

複数の地点の標高を取得したい場合は、リクエストパラメータのlocationsに複数の緯度経度を渡します。


  • locations=40.714728,-73.998672|-34.397,150.644

地点と地点は|(パイプ)で接続します。


APIのレスポンス

{

"results" : [
{
"elevation" : 1608.637939453125,
"location" : {
"lat" : 39.73915360,
"lng" : -104.98470340
},
"resolution" : 4.771975994110107
}
],
"status" : "OK"
}

ドキュメント通りですが、こういう感じで返ってきます。

以上、Google Maps Elevation APIを使って標高情報を取得する実装のメモでした。