รายละเอียดสถานที่

เลือกแพลตฟอร์ม: Android iOS JavaScript บริการเว็บ

Places SDK สำหรับ Android จะให้ข้อมูลที่สมบูรณ์แก่แอปเกี่ยวกับสถานที่ต่างๆ ซึ่งรวมถึงชื่อและที่อยู่ของสถานที่ สถานที่ตั้งทางภูมิศาสตร์ที่ระบุเป็นพิกัดละติจูด/ลองจิจูด ประเภทของสถานที่ (เช่น ไนท์คลับ ร้านสัตว์เลี้ยง พิพิธภัณฑ์) และอื่นๆ หากต้องการเข้าถึงข้อมูลนี้ของสถานที่แห่งหนึ่ง คุณสามารถใช้รหัสสถานที่ ซึ่งเป็นตัวระบุแบบคงที่ซึ่งระบุสถานที่โดยไม่ซ้ำกัน

รายละเอียดสถานที่

ออบเจ็กต์ Place ให้ข้อมูลเกี่ยวกับสถานที่ที่เฉพาะเจาะจง คุณจะรับออบเจ็กต์ Place ได้ด้วยวิธีต่อไปนี้

เมื่อขอสถานที่ คุณต้องระบุข้อมูลสถานที่ที่จะแสดง โดยส่งรายการค่า Place.Field ที่ระบุข้อมูลที่จะแสดงผล รายการนี้เป็นปัจจัยสำคัญที่ต้องพิจารณาเนื่องจากจะมีผลต่อค่าใช้จ่ายสำหรับคำขอแต่ละรายการ

เนื่องจากไม่สามารถเว้นว่างผลลัพธ์ข้อมูลสถานที่ได้ ระบบจะแสดงเฉพาะผลการค้นหาสถานที่ที่มีข้อมูลเท่านั้น (ตัวอย่างเช่น หากสถานที่ที่ขอไม่มีรูปภาพ ระบบจะไม่แสดงช่อง photos ในผลลัพธ์)

ตัวอย่างต่อไปนี้ส่งผ่านรายการค่า Place.Field 3 ค่าเพื่อระบุข้อมูลที่คำขอแสดงผล

Kotlin

// Specify the fields to return.
val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)

Java

// Specify the fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
  

เข้าถึงช่องข้อมูลออบเจ็กต์สถานที่

หลังจากได้รับออบเจ็กต์ Place แล้ว ให้ใช้เมธอดของออบเจ็กต์เพื่อเข้าถึงช่องข้อมูลที่ระบุในคำขอ หากไม่มีช่องดังกล่าวจากออบเจ็กต์ Place เมธอดที่เกี่ยวข้องจะแสดงผลเป็น Null ด้านล่างนี้เป็นตัวอย่างของวิธีการที่ใช้ได้ ดูรายการเมธอดทั้งหมดได้ที่ข้อมูลอ้างอิง API ของ Place

  • 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();

      

รับสถานที่โดยใช้รหัส

รหัสสถานที่คือตัวระบุแบบข้อความที่ระบุสถานที่แต่ละแห่งโดยไม่ซ้ำกัน คุณเรียกดูรหัสของสถานที่ได้โดยเรียกใช้ Place.getId() ใน Places SDK สำหรับ Android บริการเติมข้อความอัตโนมัติจะแสดงรหัสสถานที่ของสถานที่แต่ละแห่งที่ตรงกับคำค้นหาและตัวกรองที่ให้ไว้ด้วย คุณจัดเก็บรหัสสถานที่และใช้รหัสดังกล่าวเพื่อเรียกออบเจ็กต์ 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 หรือส่งรหัสสถานที่ เมธอดจะใช้ PlacesClient.fetchPlace() เพื่อดึงข้อมูล สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างออบเจ็กต์สถานที่ด้วยช่องที่จำเป็น โปรดดูรายละเอียดสถานที่

ตัวอย่างต่อไปนี้จะกำหนดว่าสถานที่แห่งหนึ่งเปิดอยู่หรือไม่ ในตัวอย่างนี้ คุณจะส่งรหัสสถานที่ไปยัง 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 รหัส มีกรณีอื่นๆ ที่อาจทำให้สถานที่ได้รับรหัสสถานที่ใหม่ ตัวอย่างเช่น กรณีนี้อาจเกิดขึ้นหากธุรกิจย้ายไปยังสถานที่ตั้งใหม่

เมื่อคุณขอสถานที่ด้วยการระบุรหัสสถานที่ คุณจะมั่นใจได้ว่าคุณจะได้รับสถานที่เดียวกันในคำตอบเสมอ (หากยังมีสถานที่นั้นอยู่) อย่างไรก็ตาม โปรดทราบว่าคำตอบอาจมีรหัสสถานที่ที่แตกต่างจากรหัสในคำขอของคุณ

สำหรับข้อมูลเพิ่มเติม โปรดดู ภาพรวมของรหัสสถานที่