Places SDK สำหรับ Android จะให้ข้อมูลที่หลากหลายแก่แอปของคุณ เกี่ยวกับสถานที่ต่างๆ ซึ่งรวมถึงชื่อและที่อยู่ของสถานที่ ตำแหน่งทางภูมิศาสตร์ ที่ระบุเป็นพิกัดละติจูด/ลองจิจูด ประเภทของสถานที่ (เช่น ไนต์คลับ ร้านขายสัตว์เลี้ยง พิพิธภัณฑ์) และอื่นๆ หากต้องการเข้าถึงข้อมูลนี้สำหรับสถานที่ที่เฉพาะเจาะจง คุณสามารถใช้รหัสสถานที่ ซึ่งเป็นตัวระบุที่เสถียรซึ่งระบุสถานที่ที่ไม่ซ้ำกัน
รายละเอียดสถานที่
ออบเจ็กต์
Place
ให้ข้อมูลเกี่ยวกับสถานที่ที่เฉพาะเจาะจง คุณสามารถรับออบเจ็กต์
Place
ได้โดยการเรียก
PlacesClient.fetchPlace()
ดูคำแนะนำเกี่ยวกับ
การรับสถานที่ตามรหัส
เมื่อขอสถานที่ คุณต้องระบุข้อมูลสถานที่ที่จะแสดง โดยส่งรายการค่า Place.Field เพื่อระบุข้อมูลที่จะแสดงผล รายการนี้เป็นสิ่งที่ควรพิจารณาอย่างยิ่งเนื่องจากส่งผลต่อต้นทุนสำหรับคำขอแต่ละรายการ
เนื่องจากผลการค้นหาข้อมูลสถานที่ต้องมีข้อมูล เราจึงแสดงเฉพาะผลการค้นหาสถานที่ที่มีข้อมูลเท่านั้น เช่น หากสถานที่ที่ขอไม่มีรูปภาพ photos
ฟิลด์จะไม่ปรากฏในผลลัพธ์
ตัวอย่างต่อไปนี้จะส่งรายการค่า Place.Field 3 รายการ เพื่อระบุข้อมูลที่คำขอแสดงผล
Kotlin
// Specify the fields to return. val placeFields = listOf(Place.Field.DISPLAY_NAME, Place.Field.RATING)
Java
// Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.DISPLAY_NAME, Place.Field.RATING);
เข้าถึงฟิลด์ข้อมูลออบเจ็กต์สถานที่
หลังจากได้รับออบเจ็กต์ Place
แล้ว ให้ใช้วิธีการของออบเจ็กต์เพื่อเข้าถึง
ฟิลด์ข้อมูลที่ระบุในคำขอ หากไม่มีฟิลด์ในออบเจ็กต์ Place
เมธอดที่เกี่ยวข้องจะแสดงผลเป็น null ตัวอย่างวิธีการที่มีให้บริการบางส่วนแสดงอยู่ด้านล่าง
getAddress()
– ที่อยู่ของสถานที่ในรูปแบบที่มนุษย์อ่านได้getAddressComponents()
-List
ของคอมโพเนนต์ที่อยู่สำหรับสถานที่นี้ คอมโพเนนต์เหล่านี้มีไว้เพื่อ วัตถุประสงค์ในการดึงข้อมูลที่มีโครงสร้างเกี่ยวกับที่อยู่ของสถานที่ เช่น การค้นหาเมืองที่ตั้งของสถานที่ อย่าใช้คอมโพเนนต์เหล่านี้ ในการจัดรูปแบบที่อยู่ ให้เรียกใช้getAddress()
แทน ซึ่งจะแสดงที่อยู่ที่จัดรูปแบบแล้วในภาษาท้องถิ่นgetId()
- ตัวระบุข้อความสำหรับสถานที่ อ่าน เพิ่มเติมเกี่ยวกับรหัสสถานที่ในส่วนอื่นๆ ของหน้านี้getLatLng()
- สถานที่ตั้งทางภูมิศาสตร์ของสถานที่ ที่ระบุเป็นพิกัดละติจูดและลองจิจูดgetName()
– ชื่อสถานที่getOpeningHours()
-OpeningHours
ของสถานที่ เรียกใช้OpeningHours.getWeekdayText()
เพื่อแสดงผลรายการสตริงที่แสดงเวลาเปิดและปิดสำหรับแต่ละวันในสัปดาห์ เรียกใช้OpeningHours.getPeriods()
เพื่อแสดงรายการออบเจ็กต์period
ที่มีข้อมูลโดยละเอียดเพิ่มเติมซึ่งเทียบเท่ากับข้อมูลที่getWeekdayText()
ให้ไว้ออบเจ็กต์
Place
ยังมีเมธอดgetCurrentOpeningHours()
ซึ่งแสดงเวลาทำการของสถานที่ในช่วง 7 วันถัดไป และgetSecondaryOpeningHours()
ซึ่งแสดงเวลาทำการรองของสถานที่ในช่วง 7 วันถัดไปisOpen()
- บูลีนที่ระบุว่าสถานที่ เปิดอยู่หรือไม่ หากไม่ได้ระบุเวลา ค่าเริ่มต้นจะเป็นเวลาปัจจุบันisOpen
จะแสดงก็ต่อเมื่อมีทั้งPlace.Field.UTC_OFFSET
และPlace.Field.OPENING_HOURS
ขอฟิลด์Place.Field.BUSINESS_STATUS
และPlace.Field.UTC_OFFSET
ในคำขอสถานที่ต้นฉบับเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง หากไม่ได้ขอ ระบบจะถือว่าธุรกิจดำเนินกิจการอยู่ ดูวิดีโอนี้เพื่อดูวิธีใช้isOpen
กับรายละเอียดสถานที่
ตัวอย่างมีดังต่อไปนี้
Kotlin
val name = place.name val address = place.address val location = place.latLng
Java
final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final LatLng location = place.getLatLng();
รับสถานที่ตามรหัส
รหัสสถานที่เป็นตัวระบุข้อความที่ระบุสถานที่โดยไม่ซ้ำกัน ใน
Places SDK สำหรับ Android คุณสามารถดึงข้อมูลรหัสของสถานที่ได้โดยการเรียกใช้
Place.getId()
บริการ
การเติมข้อความอัตโนมัติของสถานที่
ยังแสดงรหัสสถานที่สำหรับแต่ละสถานที่ที่ตรงกับคำค้นหาและตัวกรองที่ระบุด้วย คุณจัดเก็บรหัสสถานที่และใช้เพื่อดึงข้อมูลออบเจ็กต์
Place
อีกครั้งในภายหลังได้
หากต้องการรับสถานที่ตามรหัส ให้เรียกใช้
PlacesClient.fetchPlace()
โดยส่ง FetchPlaceRequest
API จะแสดง
FetchPlaceResponse
ใน
Task
FetchPlaceResponse
มีออบเจ็กต์
Place
ที่ตรงกับรหัสสถานที่ที่ระบุ
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียก fetchPlace()
เพื่อรับรายละเอียดของสถานที่ที่ระบุ
Kotlin
// Define a Place ID. val placeId = "INSERT_PLACE_ID_HERE" // Specify the fields to return. val placeFields = listOf(Place.Field.ID, Place.Field.NAME) // Construct a request object, passing the place ID and fields array. val request = FetchPlaceRequest.newInstance(placeId, placeFields) placesClient.fetchPlace(request) .addOnSuccessListener { response: FetchPlaceResponse -> val place = response.place Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}") }.addOnFailureListener { exception: Exception -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.message}") val statusCode = exception.statusCode TODO("Handle error with given status code") } }
Java
// Define a Place ID. final String placeId = "INSERT_PLACE_ID_HERE"; // Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Construct a request object, passing the place ID and fields array. final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); placesClient.fetchPlace(request).addOnSuccessListener((response) -> { Place place = response.getPlace(); Log.i(TAG, "Place found: " + place.getName()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { final ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } });
ดูสถานะการเปิด
เมธอด PlacesClient.isOpen(IsOpenRequest request)
จะแสดงผลออบเจ็กต์ IsOpenResponse
ซึ่งระบุว่าสถานที่เปิดอยู่หรือไม่
ในขณะนี้โดยอิงตามเวลาที่ระบุในการเรียก
เมธอดนี้รับอาร์กิวเมนต์เดียวประเภท IsOpenRequest
ซึ่งมีข้อมูลต่อไปนี้
- ออบเจ็กต์
Place
หรือสตริงที่ระบุรหัสสถานที่ - ค่าเวลาที่ไม่บังคับซึ่งระบุเวลาเป็นมิลลิวินาทีนับจาก 1970-01-01T00:00:00Z หากไม่ได้ระบุเวลา ค่าเริ่มต้นจะเป็นเวลาปัจจุบัน
วิธีนี้กำหนดให้ฟิลด์ต่อไปนี้ต้องอยู่ในออบเจ็กต์ Place
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
หากไม่ได้ระบุฟิลด์เหล่านี้ในออบเจ็กต์ Place
หรือหากคุณส่ง Place ID
เมธอดจะใช้
PlacesClient.fetchPlace()
เพื่อดึงข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างออบเจ็กต์ Place ที่มีฟิลด์ที่จำเป็นได้ที่รายละเอียดสถานที่
ตัวอย่างต่อไปนี้จะตรวจสอบว่าสถานที่เปิดอยู่หรือไม่ ในตัวอย่างนี้ คุณจะส่งเฉพาะรหัสสถานที่ไปยัง isOpen()
:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" val request: IsOpenRequest = try { IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request) isOpenTask.addOnSuccessListener { response -> val isOpen = response.isOpen } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest); placeTask.addOnSuccessListener( (response) -> isOpen = response.isOpen()); // ...
ตัวอย่างถัดไปแสดงการเรียก isOpen()
ที่คุณส่งออบเจ็กต์ Place
Place
ออบเจ็กต์ต้องมีรหัสสถานที่ที่ถูกต้อง
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() var place: Place val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" // Specify the required fields for an isOpen request. val placeFields: List<Place.Field> = listOf( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET ) val placeRequest: FetchPlaceRequest = FetchPlaceRequest.newInstance(placeId, placeFields) val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest) placeTask.addOnSuccessListener { placeResponse -> place = placeResponse.place val isOpenRequest: IsOpenRequest = try { IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return@addOnSuccessListener } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest) isOpenTask.addOnSuccessListener { isOpenResponse -> val isOpen = isOpenResponse.isOpen } // ... } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; // Specify the required fields for an isOpen request. List<Place.Field> placeFields = new ArrayList<>(Arrays.asList( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET )); FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request); placeTask.addOnSuccessListener( (placeResponse) -> { Place place = placeResponse.getPlace(); IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest); isOpenTask.addOnSuccessListener( (isOpenResponse) -> isOpen = isOpenResponse.isOpen()); // ... }); // ...
แสดงการระบุแหล่งที่มาในแอป
เมื่อแอปแสดงข้อมูลสถานที่ ซึ่งรวมถึงรีวิวสถานที่ แอปต้องแสดงการระบุแหล่งที่มาด้วย ดูข้อมูลเพิ่มเติมได้ที่ การระบุแหล่งที่มา
ข้อมูลเพิ่มเติมเกี่ยวกับรหัสสถานที่
รหัสสถานที่ที่ใช้ใน Places SDK สำหรับ Android เป็นตัวระบุเดียวกันกับที่ใช้ใน Places API รหัสสถานที่แต่ละรหัสจะอ้างอิงได้เพียงสถานที่เดียว แต่สถานที่เดียวอาจมีรหัสสถานที่มากกว่า 1 รหัส นอกจากนี้ ยังมีสถานการณ์อื่นๆ ที่อาจทำให้สถานที่ได้รับรหัสสถานที่ใหม่ เช่น กรณีที่ธุรกิจย้ายไปสถานที่ใหม่
เมื่อขอสถานที่โดยระบุรหัสสถานที่ คุณมั่นใจได้ว่า คุณจะได้รับสถานที่เดียวกันในคำตอบเสมอ (หากสถานที่นั้นยังคง มีอยู่) อย่างไรก็ตาม โปรดทราบว่าการตอบกลับอาจมีรหัสสถานที่ที่แตกต่างจากรหัสในคำขอของคุณ
ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมรหัสสถานที่