Swift MkMapView로 지도 어플리케이션을 만들어 보았습니다(12). - 긴 클릭 위치와 현재 위치의 해발 차이를 파이프 발에 표시합니다.
문장 목록
Swift MkMapView로 지도 어플리케이션을 만들어 보았습니다(기사 일람).
국토지리원에서 현재 위치의 해발을 얻다
국토지리원 WebAPI에서 높이를 얻는 방법에 대한 자세한 정보는 국토지리원에서 머리를 길게 빼는 위치의 해발을 얻다 를 참조하십시오.
국토지리원 WebAPI에서 높이를 얻는 방법에 대한 자세한 정보는 국토지리원에서 머리를 길게 빼는 위치의 해발을 얻다 를 참조하십시오.
URL 생성
국토지리원제 역할 JSON에서 현재 위치의 해발 URL을 얻습니다.
ViewController.swift:URL 생성
// 国土地理院のURL
let baseUrl = "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?"
// 現在位置でクエリを設定する
let lonUrl = "&lon=" + mapView.userLocation.coordinate.longitude.description
let latUrl = "&lat=" + mapView.userLocation.coordinate.latitude.description
// アウトプット形式をJSONに設定する
let outtypeUrl = "&outtype=JSON"
// URLとクエリを連結
let listUrl = baseUrl + lonUrl + latUrl + outtypeUrl
// URLを生成する
guard let url = URL(string: listUrl) else { return }
현재 위치 가져오기에서 현재 위치가 유효하게 수신되는 경우 mapView.현재 위치는 userLocation에서 자동으로 설정됩니다.고도를 얻다
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.currentElevation = (json?.elevation)!
}
}.resume()
}
하위 스레드에서 주 스레드로 전환하기 위해 DispatchQueue.main.async 사용.핀에 긴 공사의 위치와 현재 위치의 표고차를 표시합니다
고도차를 계산하다
국토지리원에서 머리를 길게 빼는 위치의 해발을 얻다 해발의 차
ViewController.swift: 고도차 계산
self.lblDiffElevation = "高低差:" + (round(((self.longTapElevation - self.currentElevation)*10))/10).description + " m"
// ロングタップしたアノテーション情報を更新する
updateLongTapPointAno()
소수 1위가 되기 위해 "*10)"/10"으로 설정합니다.파이프 발에 고도차를 표시하다
긴 공사의 위치에 핀을 세워 거리를 표시하다에서 설정한 인용 제목과 연결됩니다.
ViewController.swift: 파이프 발에 고도차 보이기
// ロングタップしたアノテーション情報を更新する
func updateLongTapPointAno() {
// 現在位置とタッウプした位置の距離(m)を算出する
let distance = calcDistance(mapView.userLocation.coordinate, pointAno.coordinate)
// ピンに設定する文字列を生成する
var str:String = Int(distance).description
str = str + " m"
// yard
let yardStr = Int(distance * 1.09361)
str = str + " / " + yardStr.description + " y"
// 標高差を連結する
str = str + "\n" + lblDiffElevation.description
if pointAno.title != str {
// ピンまでの距離に変化があればtitleを更新する
pointAno.title = str
mapView.addAnnotation(pointAno)
}
}
시뮬레이터의 실행 결과는 다음과 같다.참조 파일
국토지리원 도움
Reference
이 문제에 관하여(Swift MkMapView로 지도 어플리케이션을 만들어 보았습니다(12). - 긴 클릭 위치와 현재 위치의 해발 차이를 파이프 발에 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuta-sasaki/items/00df470bfbcb66fa2b26
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Swift MkMapView로 지도 어플리케이션을 만들어 보았습니다(12). - 긴 클릭 위치와 현재 위치의 해발 차이를 파이프 발에 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuta-sasaki/items/00df470bfbcb66fa2b26텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)