더이상 흡연구역 힘들게 찾지 말고 어플리케이션을 통해 쉽고 간편하게 찾자!
Naver Cloud Platform MapsAPI
를 활용한 서비스 개발Mobile Dynamic Map SDK
를 활용한 지도 표현 및Marker
표시Reverse GeoCoding API
를 활용한 좌표의 주소화
화면 명 | 스크린 샷 |
---|---|
흡연구역 제보하기 | |
사용자 제보 |
개발기간
개발 기간: 2023.01.04. ~ 02.18. (6주)
⚙️개발 환경
- Supported Destination :
iPhone
- Minimum Deployments :
16.0
- because of
UISheetPresentationController.Detent
Custom detent
- because of
- Package Management :
CocoaPods
⚙️기술스택
- BaseSDK:
UIKit
- CodeBaseUI:
SnapKit
,Then
- Network:
Alamofire
,SwiftyJSON
- Map:
CoreLocation
,Naver Cloud Platform Mobile Dynamic Map SDK
개발간 중점사항
-
팀 협업 프로세스 중심 프로젝트
본 프로젝트는 PM, 디자이너, iOS, Server(Node.js) 팀원이 협업하여 만든 프로젝트로써 협업 프로세스로 진행했습니다. -
Reverse Geocoding(CoorToAddr) API(API Response 문서 링크)
사용자가 표시하는 지도상의 좌표를 주소명으로 표기하기 위해서 Reverse Geocodin API를 이용하였습니다.
대한민국의 현 주소 체계는 대개 도로명 주소로 표기되나, 도로명 주소 체계로 모든 좌표를 변환 및 표현할 수 는 없습니다. 그렇기 때문에 최대한 도로명 주소로 사용자에게 보여주지만, 도로명 주소로 표기할 수 없는 좌표는 지번 주소로 사용자에게 표기 되어야 합니다.
즉, API Response에서 도로명 주소가 있는지 확인하고 도로명 주소가 response에 있다면 도로명 주소를, 도로명 주소가 없다면 지번 주소를 가져와 사용자에게 표현해주어야 합니다.
본 프로젝트에서는 이러한 프로세스를SwiftyJSON
을 활용하여 JSON에 바로 접근하여 도로명 주소의 유무를 판단, 디코딩하는 방식을 활용하여 해결하였습니다.if !value.results.isEmpty { let address = value.results[0].region if value.results.count == 4 {//모든 주소가 나오는 좌표라면 도로명 주소를 출력 addressString = "\(address.area1.name) \(address.area2.name)" //시/도 + 시/군/구 if let name = value.results[3].land?.name { addressString = "\(addressString) \(name)" } if let roadNumber1 = value.results[3].land?.number1 { addressString = "\(addressString) \(roadNumber1)" if let roadNumber2 = value.results[3].land?.number2 { if !roadNumber2.isEmpty { addressString = "\(addressString)-\(roadNumber2)" } } } } else { addressString = "\(address.area1.name) \(address.area2.name) \(address.area3.name)" if value.results.count > 2 { if let detail1 = value.results[2].land?.number1 { addressString = "\(addressString) \(detail1)" if let detail2 = value.results[2].land?.number2{ if !detail2.isEmpty { addressString = "\(addressString)-\(detail2)" } } } } } completionHandler(addressString) } else { completionHandler("주소가 없는 좌표입니다.") }