본문 바로가기
Developer/iOS, Swift

[Swift] 네이버 장소검색(search Place) API 사용하기

by Doony 2019. 11. 17.

이번 포스팅에서는 네이버 맵 API 중에서도 search Place를 이용하는 법에 대해 알아보겠습니다. 현재 운영하고 있는 앱에서 사용하고 있는 네이버 api 중 지도검색과 블로그 검색이 있는데요.
지도 검색과 블로그 검색은 이용하는 방법이 유사합니다. 예전에 안드로이드에서 이용하는 방법에 대해서도 올렸는데, 이번에 스위프트를 이용하여 iOS에도 적용하게 되었습니다.

 

먼저 API참고사이트는 아래와 같습니다.https://apidocs.ncloud.com/ko/ai-naver/maps\_search\_places/

불러오는 중입니다...

 

네이버 지도를 사용하기 위해 엔클라우드에 접속하여 키값을 할당받은 후 아래 메소드를 실행하시면 됩니다.

코드는 보시다시피, alamofire와 swiftyJson을 이용하여 JSON형태로 데이터를 받아 처리했습니다.
최대 지도 검색은 5개까지 가능합니다.

참고로 한글로 검색할 경우, 단순 string으로 URL을 찍게 되면 검색이 되지 않기 때문에 URL Encoding이 필수인점 참고하시면 됩니다.

func naverSearchPlace(searchName: String) {


        let header: HTTPHeaders = [
            "X-NCP-APIGW-API-KEY-ID": "네이도 지도 api 키아이디",
            "X-NCP-APIGW-API-KEY": "네이버 지도 api 키",
        ]

        let coordinate: String = String(longitude) + "," + String(latitude)
        // 현재 지도 중심의 좌표

        // 한글도 검색될 수 있도록 URL Encoding
        let encodedSearchName = searchName.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed)

        Alamofire.request("https://naveropenapi.apigw.ntruss.com/map-place/v1/search?query=" + encodedSearchName! + "&coordinate=" + coordinate, method: .get, encoding: URLEncoding.default, headers: header) .validate(statusCode: 200..<300) .responseJSON { (response) -> Void in

            if response.result.isSuccess {
                var swiftyJsonVar = JSON(response.result.value!)
                print(swiftyJsonVar)


                let searchResultCount = swiftyJsonVar["meta"]["count"].int! // 최대 5개까지 검색함.
                let searchResult = swiftyJsonVar["places"]

                for i in 0 ... searchResultCount-1 {
                    self.searchedPlaces.append(searchResult[i]["name"].string!)
                    self.searchedLatitude.append(Double(searchResult[i]["y"].string!)!)
                    self.searchedLongitude.append(Double(searchResult[i]["x"].string!)!)

                }


                print(self.searchedPlaces)


            } else {
            }
        }

    }

댓글