Help us understand the problem. What is going on with this article?

Swift MkMapViewで地図アプリ作成してみた(11)- ロングタップした位置の標高を国土地理院から取得する

記事一覧

Swift MkMapViewで地図アプリ作成してみた(記事一覧)

国土地理院のサーバ

国土地理院に、標高を取得するWebAPI が公開されています。
使用方法は上記のリンクを参照してください。

使用例

https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=140.08531&lat=36.103543&outtype=JSON

ブラウザで上記のURLにアクセスしてみてください。

{"elevation":25.3,"hsrc":"5m\uff08\u30ec\u30fc\u30b6\uff09"}

上記の情報が表示されるWebページが表示されます。
elevationが標高ですので、指定した位置は標高25.3mとなります。

国土地理院からロングタップした位置の標高を取得する

  1. URLを生成する

    ロングタップした位置にピンを立て距離を表示するで設定したピンの標高を取得するURLを生成する。

    ViewController.swift:URLを生成する
    // 国土地理院のURL
    let baseUrl = "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?"
    // ロングタップ地点でクエリを設定する
    let lonUrl = "&lon=" + pointAno.coordinate.longitude.description
    let latUrl = "&lat=" + pointAno.coordinate.latitude.description
    // アウトプット形式をJSONに設定する
    let outtypeUrl = "&outtype=JSON"
    // URLとクエリを連結
    let listUrl = baseUrl + lonUrl + latUrl + outtypeUrl        
    // URLを生成する
    guard let url = URL(string: listUrl) else { return }
    
  2. 標高を取得する

    URLSessionで生成したURLにアクセスして標高を取得する。

    ViewController.swift:標高を取得する
    // URLを生成する
    guard let url = URL(string: listUrl) else { return }
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if error != nil {
            print(error!.localizedDescription)
        }
        guard let data = data else { return }
        // JSONを取得する
        let json = try? JSONDecoder().decode(JsonElevation.self, from: data)
        if nil != json {
            // mainスレッドで処理する
            DispatchQueue.main.async {
                // JSONから標高を取得する
                self.longTapElevation = (json?.elevation)!
            }
        }.resume()
    }
    

    サブスレッドからメインスレッドに切り替えるためには、DispatchQueue.main.asyncを使用する。

余談:HTTPを使用する場合に設定すること(HTTPSは不要)

HTTP通信が非推奨のためHTTP通信する場合は、Info.plistを設定しないと実行時エラーとなる。

Qiita(11)-01.png

App Transport Security Settingsを追加して、Allow Arbitrary LoadsにYESを設定する。
これでHTTP通信が可能となる。

参考文書

国土地理院 ヘルプ

yuta-sasaki
車載ソフトウェア開発者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした