[swift]オープンAPIを使用してスモッグアプリケーションを作成する
スモッグソフトを作りました
私たちは複数のAPIを使って練習することにした.
NAVER APIを使用して座標を受信場合、
https://guide.ncloud-docs.com/docs/ko/naveropenapiv3-maps-reverse-geocoding-reverse-geocoding
共通APIを適用するにはTM座標値が必要である.iOSが受信した座標値はWGS 84座標値で、近くの測定点を見つけるにはTM座標に変換する必要があります.だからkako座標系を変えるAPIを使いました
https://developers.kakao.com/docs/latest/ko/local/dev-guide#trans-coord
共通APIと
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073877
公共APIを用いてスモッグを検出した.
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861
まずiosから受け取った座標をアドレスのAPIに変換する
func getLocation(url: String, longitude: Double, latitude: Double, handler: @escaping(String) -> Void) {
let header1 = HTTPHeader(name: "X-NCP-APIGW-API-KEY-ID", value: NAVER_API.NAVER_CLIENT_ID)
let header2 = HTTPHeader(name: "X-NCP-APIGW-API-KEY", value: NAVER_API.NAVER_CLIENT_SECRET)
let headers = HTTPHeaders([header1,header2])
let parameters : Parameters = [
"coords" : "\(longitude),\(latitude)",
"output" : "json"
]
let alamo = AF.request(url,method: .get,parameters: parameters,headers: headers)
alamo.validate().responseJSON { response in
// debugPrint(response)
switch response.result {
case .success(let value) :
let json = JSON(value)
let data = json["results"]
let address = data[0]["region"]["area2"]["name"].string!
LocationInfo.shared.nowLocationName = address
handler(address)
case .failure(_):
let alert = UIAlertController(title: nil, message: "네트워크를 다시 확인해주세요", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
return
}
}
}
マイクロダストAPIを使用する座標系変換API
func TM(url: String, longitude: Double, latitude: Double, handler: @escaping(userLocation) -> Void) {
var result = userLocation()
let headers:HTTPHeaders = ["Authorization" : KAKAO_API.KAKAO_KEY]
let parameters: Parameters = [
"x" : longitude,
"y" : latitude,
"output_coord" : "TM"
]
let alamo = AF.request(url, method: .get,parameters: parameters, encoding: URLEncoding.queryString ,headers: headers)
alamo.responseJSON() { response in
debugPrint(response)
switch response.result {
case .success(let value):
let json = JSON(value)
let documents = json["documents"].arrayValue
result.longitude = documents[0]["x"].double
result.latitude = documents[0]["y"].double
handler(result)
case .failure(_):
let alert = UIAlertController(title: nil, message: "네트워크를 다시 확인해주세요", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
return
}
}
}
マイクロダストAPIを利用するための最近の測定局の決定
func getNearbyMsrstn(url: String, tmX: Double, tmY: Double, handler: @escaping(String) -> Void) {
let parameters: Parameters = [
"serviceKey" : AIR_POLLUTION_STATION_API.AIR_POLLUTION_STATION_KEY,
"tmX" : tmX,
"tmY" : tmY,
"returnType" : "json"
]
let alamo = AF.request(url, method: .get,parameters: parameters, encoding: URLEncoding.default)
alamo.responseJSON() { response in
debugPrint(response)
switch response.result {
case .success(let value):
let json = JSON(value)
let stationName = json["response"]["body"]["items"][0]["stationName"].string!
LocationInfo.shared.stationName = stationName
handler(stationName)
case .failure(_):
let alert = UIAlertController(title: nil, message: "네트워크를 다시 확인해주세요", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
return
}
}
}
前回スモッグ確認API
func getfinedust(url: String, stationName: String, handler: @escaping(String, String, String) -> Void) {
let parameters: Parameters = [
"serviceKey" : AIR_POLLUTION_API.AIR_POLLUTION_KEY,
"stationName" : stationName,
"dataTerm" : "DAILY",
"returnType" : "json"
]
let alamo = AF.request(url, method: .get,parameters: parameters, encoding: URLEncoding.default)
alamo.responseJSON() { response in
switch response.result {
case .success(let value):
let json = JSON(value)
let pm10Value = json["response"]["body"]["items"][0]["pm10Value"].string!
let pm10GradeValue = json["response"]["body"]["items"][0]["pm10Grade"].string!
let dataTime = json["response"]["body"]["items"][0]["dataTime"].string!
LocationInfo.shared.pmGradeValue = pm10GradeValue
LocationInfo.shared.dataTime = dataTime
LocationInfo.shared.pmValue = pm10Value
handler(pm10Value,pm10GradeValue, dataTime)
case .failure(_):
let alert = UIAlertController(title: nil, message: "네트워크를 다시 확인해주세요", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
return
}
}
}
および、これらの値を格納およびロードするモノトーンオブジェクト.class LocationInfo {
static let shared = LocationInfo()
var nowLocationName: String?
var longitude: Double?
var latitude: Double?
var pmValue : String?
var pmGradeValue: String?
var dataTime: String?
var stationName: String?
private init() { }
}
これにより、単音学習、エスケープクローズ、RSET API、Alamfore、CLLocationの使用を学ぶことができます.github - https://github.com/JangJuMyeong/AirPollutionCheck
注-https://ios-dev-skyline-23.tistory.com/entry/Swift%EB%A1%9C-%EB%AF%B8%EC%84%B8%EB%A8%BC%EC%A7%80-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0
Reference
この問題について([swift]オープンAPIを使用してスモッグアプリケーションを作成する), 我々は、より多くの情報をここで見つけました https://velog.io/@isouvezz/swift-오픈-API사용-해서-미세먼지-앱-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol