Swift Academy · บทเรียน

การแปลงพิกัดเป็นที่อยู่และภูมิภาค

แปลงพิกัดเป็นที่อยู่และติดตามภูมิภาค

บทเรียน 4 จาก 413 ขั้นตอน

การแปลงพิกัดเป็นที่อยู่และภูมิภาค เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การขออนุญาตเข้าถึงตำแหน่ง
  2. การรับตำแหน่งของผู้ใช้
  3. การแสดงแผนที่ใน SwiftUI
  4. การแปลงพิกัดเป็นที่อยู่และภูมิภาค
← กลับไปที่ Swift Academy