[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