Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스 조건에 맞게 수열 변경하기 3
- 스페인어
- 스파르타 코딩클럽 내일배움캠프
- 프로그래머스
- Til
- 프로그래머스 자동커밋
- 프로그래머스 주사위 게임1
- 객체지향
- 프로그래머스 n의 배수 고르기
- 프로그래머스 문자열 붙여서 출력하기
- 주사위 게임1
- 프로그래머스 배열 만들기1
- 스파르타코딩캠프
- continue
- 프로그래머스 최댓값 만들기(2)
- 문자열 정렬하기 (1)
- 배열 만들기1
- ruby설치
- Break
- swift
- array
- 프로그래머스 암호 해독
- 연산자
- n번째 원소까지
- 프로그래머스 문자열 정렬하기 (1)
- cocoapods 설치 오류
- Error installing cocoapods
- 프로그래머스 n번째 원소까지
- 조건에 맞게 수열 변경하기 3
- 문자열 붙여서 출력하기
Archives
- Today
- Total
dev._.note
[Swift] Mapkit 위치 검색 본문
한국 기준으로 검색
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
guard let searchText = searchBar.text, !searchText.isEmpty else { return }
// 한국 내 지역을 중심으로 검색 범위 설정
let koreaRegion = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 37.5665, longitude: 126.9780), radius: 50000, identifier: "Korea")
geocoder.geocodeAddressString(searchText, in: koreaRegion) { [weak self] (placemarks, error) in
guard let strongSelf = self else { return }
if let error = error {
print("Error searching address: \(error)")
return
}
// 검색 결과 중 첫 번째 결과 사용
if let placemark = placemarks?.first, let location = placemark.location {
let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 1000, longitudinalMeters: 1000)
strongSelf.locationPickerView.mapView.setRegion(region, animated: true)
// 검색된 위치의 주소 정보 업데이트
strongSelf.updateAddressLabel(with: placemark, searchText: searchText)
}
}
}
한국형 주소로 구성
private func fetchAddressFromCoordinates(_ coordinates: CLLocationCoordinate2D) {
let location = CLLocation(latitude: coordinates.latitude, longitude: coordinates.longitude)
geocoder.reverseGeocodeLocation(location) { [weak self] (placemarks, error) in
guard let strongSelf = self else { return }
if let error = error {
print("Error fetching address: \(error)")
return
}
if let placemark = placemarks?.first {
var addressComponents: [String] = []
// 주/지역명 추가 (도시명과 동일하지 않은 경우에만 추가)
if let administrativeArea = placemark.administrativeArea, administrativeArea != placemark.locality {
addressComponents.append(administrativeArea)
}
// 도시명 추가
if let locality = placemark.locality {
addressComponents.append(locality)
}
// 도로명 주소 또는 지번 주소 추가 (도로명 주소가 있는 경우 우선적으로 추가)
if let thoroughfare = placemark.thoroughfare {
addressComponents.append(thoroughfare)
if let subThoroughfare = placemark.subThoroughfare {
addressComponents.append(subThoroughfare)
}
} else if let name = placemark.name, !addressComponents.contains(name) {
// 도로명 주소가 없고 지번 주소가 이미 추가된 주소 구성 요소에 포함되지 않은 경우 지번 주소 추가
addressComponents.append(name)
}
let addressString = addressComponents.joined(separator: " ")
DispatchQueue.main.async {
strongSelf.locationPickerView.addressLabel.text = addressString
print("주소: \(addressString)")
}
}
}
}
'Dev > SWIFT' 카테고리의 다른 글
[Swift] 테이블뷰 섹션간의 간격 조절 (0) | 2024.03.13 |
---|---|
[Swift] Gesture Recognizer(재스처 제어) (0) | 2024.03.11 |
[Swift] 앱의 생명주기 (Life Cycle) (0) | 2024.03.07 |
[Swift] FSCalendar 라이브러리 (0) | 2024.03.06 |
[Swift] SPM(Swift Package Manager)으로 SnapKit 추가하기 (0) | 2024.02.28 |