การหาที่อยู่จาก latitude และ longitude ที่มี ปัจจุบันมี service ที่ให้เราโยน latitude, longitude เข้าไปแล้วมันจะคืนค่าสถานที่ออกมาหลายที่ ทั้งฟรี และไม่ฟรี เช่น Reverse Geocoding (Address Lookup) ของ Google เป็นต้น
สำหรับ MapKit framework ที่ถูกใช้ใน iPhone กันนั้นก็ใช้ map service จาก Google เช่นเดียวกัน และเราก็สามารถ reverse geocoding ได้จาก service ของ Google ดังกล่าวมาแล้วได้ตามปกติ
วิธีที่กล่าวมาตอนต้น เราจำเป็นต้องส่ง HTTP request ไปเอง และต้องมี API key จาก Google ด้วย สำหรับ map kit framework แล้วง่ายกว่านั้นด้วยการใช้ MKReverseGeocoder นั่นเอง
สำหรับวิธีการใช้งานก็ตรงไปตรงมาคือส่ง latitude, longitude ที่ถูก wrap ให้อยู่ในรูปของ CLLocationCoordinate2D เข้าไป จากนั้นสั่งให้หาที่อยู่ออกมา ผลลัพธ์ที่ได้จะถูกส่งไปยัง delegate method ทั้ง 2 เมื่อ reverse สำเร็จ หรือไม่สำเร็จ ดังนั้นจะได้หน้าตา code ดังนี้
1. wrap latitude, longitude ที่มีไว้ใน CLLocationCoordinate2D ก่อน
2. instantiate และส่ง coordinate เป็นพารามิเตอร์เข้าไป อย่าลืมกำหนด delegate object ด้วย และสั่งให้ทำการ reverse จากนั้นก็รอ ให้เสร็จสิ้นการ reverse
3. เมื่อการ reverse เสร็จสิ้นแล้ว 1 ใน 2 delegate method นี้จะถูกเรียกให้ทำงาน
ค่าที่จะได้หลังจาก reverse สำเร็จและนำมาใช้งานหลักๆก็คือ instance ของ MKPlacemark นั่นเอง ซึ่งในนั้นจะบรรจุที่อยู่ของสถานที่ที่แปลงได้ ให้เราได้เลือกใช้ได้ว่าจะใช้ค่าไหน เช่น addressDictionary, countryCode, postalCode และ subLocality เป็นต้น
อ่านต่อ: Google Maps Terms of Service
Related Link from Roti
สำหรับ MapKit framework ที่ถูกใช้ใน iPhone กันนั้นก็ใช้ map service จาก Google เช่นเดียวกัน และเราก็สามารถ reverse geocoding ได้จาก service ของ Google ดังกล่าวมาแล้วได้ตามปกติ
วิธีที่กล่าวมาตอนต้น เราจำเป็นต้องส่ง HTTP request ไปเอง และต้องมี API key จาก Google ด้วย สำหรับ map kit framework แล้วง่ายกว่านั้นด้วยการใช้ MKReverseGeocoder นั่นเอง
สำหรับวิธีการใช้งานก็ตรงไปตรงมาคือส่ง latitude, longitude ที่ถูก wrap ให้อยู่ในรูปของ CLLocationCoordinate2D เข้าไป จากนั้นสั่งให้หาที่อยู่ออกมา ผลลัพธ์ที่ได้จะถูกส่งไปยัง delegate method ทั้ง 2 เมื่อ reverse สำเร็จ หรือไม่สำเร็จ ดังนั้นจะได้หน้าตา code ดังนี้
1. wrap latitude, longitude ที่มีไว้ใน CLLocationCoordinate2D ก่อน
CLLocationCoordinate2D coordinate = {
latitude,
longitude
};
2. instantiate และส่ง coordinate เป็นพารามิเตอร์เข้าไป อย่าลืมกำหนด delegate object ด้วย และสั่งให้ทำการ reverse จากนั้นก็รอ ให้เสร็จสิ้นการ reverse
MKReverseGeocoder *reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate: coordinate];
reverseGeocoder.delegate = self;
[reverseGeocoder start];
3. เมื่อการ reverse เสร็จสิ้นแล้ว 1 ใน 2 delegate method นี้จะถูกเรียกให้ทำงาน
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)newPlacemark {
NSLog(@"%@", [[newPlacemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]);
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@"%@", error);
}
ค่าที่จะได้หลังจาก reverse สำเร็จและนำมาใช้งานหลักๆก็คือ instance ของ MKPlacemark นั่นเอง ซึ่งในนั้นจะบรรจุที่อยู่ของสถานที่ที่แปลงได้ ให้เราได้เลือกใช้ได้ว่าจะใช้ค่าไหน เช่น addressDictionary, countryCode, postalCode และ subLocality เป็นต้น
อ่านต่อ: Google Maps Terms of Service
Related Link from Roti
0 comments:
Post a Comment