การแปลงพิกัดเป็นที่อยู่และภูมิภาค
แปลงพิกัดเป็นที่อยู่และติดตามภูมิภาค
การแปลงพิกัดเป็นที่อยู่และภูมิภาค เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
Geocoding คืออะไร
Geocoding แปลงที่อยู่ที่มนุษย์อ่านได้เป็นพิกัด ส่วนการแปลงพิกัดกลับจะแปลงพิกัดกลับเป็นที่อยู่ที่อ่านได้ Core Location มี CLGeocoder สำหรับทั้งสองงาน โดยติดต่อกับเซิร์ฟเวอร์ของ Apple
import CoreLocation
let geocoder = CLGeocoder()การทำ Geocoding ที่อยู่ไปข้างหน้า
เรียก geocodeAddressString(_:) พร้อมที่อยู่ในรูปแบบอิสระ ผลลัพธ์จากการทำงานเสร็จจะคืนอาร์เรย์ของอ็อบเจ็กต์ CLPlacemark ให้เลือกรายการแรกแล้วอ่านค่า location ของรายการนั้น
geocoder.geocodeAddressString("Eiffel Tower, Paris") { placemarks, error in
if let coord = placemarks?.first?.location?.coordinate {
print(coord.latitude, coord.longitude)
}
}การแปลงพิกัดกลับ
เมื่อมี CLLocation แล้ว reverseGeocodeLocation(_:) จะคืนหมุดสถานที่ที่อธิบายจุดนั้น เช่น ถนน เมือง ประเทศ รหัสไปรษณีย์ และข้อมูลอื่น ๆ
let loc = CLLocation(latitude: 48.8584, longitude: 2.2945)
geocoder.reverseGeocodeLocation(loc) { placemarks, error in
if let p = placemarks?.first {
print(p.name ?? "", p.locality ?? "", p.country ?? "")
}
}โครงสร้าง CLPlacemark
CLPlacemark มีฟิลด์ข้อมูลมากมาย ได้แก่ name, thoroughfare ซึ่งหมายถึงถนน, locality ซึ่งหมายถึงเมือง, administrativeArea ซึ่งหมายถึงรัฐหรือเขตการปกครอง, postalCode, country และ isoCountryCode ฟิลด์หลายรายการเป็นค่าเลือกได้ จึงต้องแกะค่าอย่างระมัดระวัง
func format(_ p: CLPlacemark) -> String {
[p.thoroughfare, p.locality, p.country]
.compactMap { $0 }
.joined(separator: ", ")
}ข้อจำกัดของ Geocoder
CLGeocoder ทำงานผ่านเครือข่ายและมีขีดจำกัดอัตราการเรียกใช้ ให้ส่งคำขอครั้งละหนึ่งรายการ หลีกเลี่ยงการวนเรียกถี่ ๆ และยกเลิกงานที่กำลังดำเนินการด้วย cancelGeocode() เมื่อไม่ต้องการผลลัพธ์นั้นแล้ว
geocoder.cancelGeocode()การระบุพิกัดแบบอะซิงก์/อะเวต
Swift รุ่นใหม่มีรูปแบบการทำงานแบบอะซิงก์ ทำให้คุณเขียนโค้ดเป็นลำดับต่อเนื่องด้วย try await แทนตัวจัดการการทำงานเสร็จสิ้นได้
func coordinate(for address: String) async throws -> CLLocationCoordinate2D? {
let placemarks = try await geocoder.geocodeAddressString(address)
return placemarks.first?.location?.coordinate
}เริ่มต้นใช้งานการติดตามภูมิภาค
การติดตามภูมิภาค (การกำหนดขอบเขตภูมิศาสตร์) ช่วยให้ระบบแจ้งแอปของคุณเมื่ออุปกรณ์ เข้าสู่หรือออกจาก พื้นที่วงกลมที่กำหนด แม้แอปจะไม่ได้ทำงานอยู่ก็ตาม ฟังก์ชันนี้ต้องได้รับการอนุญาตแบบ ตลอดเวลา
// Requires NSLocationAlwaysAndWhenInUseUsageDescription
manager.requestAlwaysAuthorization()การกำหนด CLCircularRegion
ขอบเขตภูมิศาสตร์คือ CLCircularRegion ซึ่งมีจุดศูนย์กลาง รัศมี (หน่วยเป็นเมตร) และตัวระบุที่ไม่ซ้ำกัน กำหนด notifyOnEntry และ notifyOnExit เพื่อเลือกเหตุการณ์ที่คุณสนใจ
let region = CLCircularRegion(
center: CLLocationCoordinate2D(latitude: 41.0, longitude: 29.0),
radius: 200,
identifier: "OfficeZone"
)
region.notifyOnEntry = true
region.notifyOnExit = trueเริ่มต้นการติดตามภูมิภาค
เรียกใช้ startMonitoring(for:) เพื่อเริ่มต้น อุปกรณ์จำกัดจำนวนภูมิภาคไว้ประมาณ 20 แห่งต่อแอป ดังนั้นควรติดตามเฉพาะภูมิภาคที่เกี่ยวข้องมากที่สุดในแต่ละช่วงเวลา
if CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) {
manager.startMonitoring(for: region)
}รับเหตุการณ์การเข้าและออก
เมธอดของผู้รับมอบหมาย didEnterRegion และ didExitRegion จะทำงานเมื่อมีการข้ามขอบเขต ใช้ identifier ของภูมิภาคเพื่อดูว่าขอบเขตภูมิศาสตร์ใดเป็นตัวกระตุ้นเหตุการณ์
func locationManager(_ m: CLLocationManager, didEnterRegion region: CLRegion) {
print("Entered:", region.identifier)
}
func locationManager(_ m: CLLocationManager, didExitRegion region: CLRegion) {
print("Exited:", region.identifier)
}สอบถามสถานะปัจจุบัน
หากต้องการทราบว่าอุปกรณ์อยู่ภายในภูมิภาคอยู่แล้วหรือไม่โดยไม่ต้องรอให้มีการข้ามขอบเขต ให้เรียกใช้ requestState(for:) ผลลัพธ์จะมาถึงใน didDetermineState เป็น .inside, .outside หรือ .unknown
manager.requestState(for: region)
func locationManager(_ m: CLLocationManager,
didDetermineState state: CLRegionState,
for region: CLRegion) {
print(region.identifier, state == .inside ? "inside" : "outside")
}ตรวจสอบอย่างรวดเร็ว: การระบุพิกัดและภูมิภาค
ตรวจสอบความเข้าใจของคุณ
สรุป: การระบุพิกัดและภูมิภาค
คุณได้เรียนรู้วิธีแปลงระหว่างที่อยู่กับพิกัด และติดตามขอบเขตทางภูมิศาสตร์แล้ว:
CLGeocoderรองรับการระบุพิกัดไปข้างหน้าและย้อนกลับ (มีรูปแบบอะซิงก์ด้วย) แต่มีการจำกัดอัตราการเรียกใช้CLPlacemarkเก็บข้อมูลที่อยู่โดยละเอียด ซึ่งทุกฟิลด์เป็นตัวเลือกCLCircularRegionใช้กำหนดขอบเขตภูมิศาสตร์ การติดตามต้องได้รับการอนุญาตแบบตลอดเวลา- จัดการ
didEnterRegion/didExitRegionและสอบถามสถานะด้วยrequestState(for:)
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “การแปลงพิกัดเป็นที่อยู่และภูมิภาค” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแปลงพิกัดเป็นที่อยู่และภูมิภาค” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแปลงพิกัดเป็นที่อยู่และภูมิภาค”
แปลงพิกัดเป็นที่อยู่และติดตามภูมิภาค คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การแปลงพิกัดเป็นที่อยู่และภูมิภาค” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การขออนุญาตเข้าถึงตำแหน่ง
- การรับตำแหน่งของผู้ใช้
- การแสดงแผนที่ใน SwiftUI
- การแปลงพิกัดเป็นที่อยู่และภูมิภาค