Place Photos ช่วยให้คุณเพิ่มเนื้อหาภาพถ่ายคุณภาพสูงลงในหน้าเว็บได้
หน้านี้อธิบายความแตกต่างระหว่างฟีเจอร์รูปภาพสถานที่ในคลาส Place (ใหม่) และ PlacesService (เดิม) รวมถึงแสดงข้อมูลโค้ดบางส่วนเพื่อเปรียบเทียบ
PlacesService(เดิม) จะแสดงผลอาร์เรย์ของออบเจ็กต์PlacePhotoสูงสุด 10 รายการเป็นส่วนหนึ่งของออบเจ็กต์PlaceResultสำหรับคำขอgetDetails()หากมีการระบุฟิลด์photosในคำขอ ในกรณีของtextSearch()และnearbySearch()ระบบจะแสดงรูปภาพแรกของสถานที่โดยค่าเริ่มต้น หากมี- คลาส
Placeจะแสดงผลอาร์เรย์ของออบเจ็กต์Photoสูงสุด 10 รายการเป็นส่วนหนึ่งของคำขอfetchFields()หากมีการระบุฟิลด์photosในคำขอ
ตารางต่อไปนี้แสดงความแตกต่างหลักๆ บางประการในการใช้รูปภาพสถานที่ระหว่างคลาส Place และ PlacesService
PlacesService (เดิม) |
Place (ใหม่) |
|---|---|
อินเทอร์เฟซ PlacePhoto |
คลาส Photo |
PlacePhoto แสดงผล
html_attributions เป็นสตริง |
Photo จะแสดงผลอินสแตนซ์
AuthorAttribution |
เมธอดต้องใช้ Callback เพื่อจัดการออบเจ็กต์ผลลัพธ์และการตอบกลับ google.maps.places.PlacesServiceStatus |
ใช้ Promises และทำงานแบบอะซิงโครนัส |
วิธีการต้องมีการตรวจสอบ PlacesServiceStatus |
ไม่จำเป็นต้องตรวจสอบสถานะ สามารถใช้การจัดการข้อผิดพลาดมาตรฐานได้ ดูข้อมูลเพิ่มเติม |
ต้องสร้างอินสแตนซ์ PlacesService โดยใช้แผนที่หรือองค์ประกอบ div |
Place สามารถสร้างอินสแตนซ์ได้ทุกที่ที่ต้องการ โดยไม่ต้องอ้างอิงแผนที่หรือองค์ประกอบของหน้า |
การเปรียบเทียบโค้ด
ส่วนนี้จะเปรียบเทียบโค้ดสำหรับรูปภาพของสถานที่เพื่อแสดงความแตกต่างระหว่างบริการ Places กับคลาส Place ข้อมูลโค้ดจะแสดงโค้ดที่จำเป็นในการขอรูปภาพสถานที่ใน API ที่เกี่ยวข้องแต่ละรายการ
บริการ Places (เดิม)
ข้อมูลโค้ดต่อไปนี้แสดงการแสดงผลรูปภาพโดยใช้ PlacesService และแสดงผลลัพธ์รูปภาพแรกในหน้าเว็บ ในตัวอย่างนี้ คำขอรายละเอียดสถานที่ระบุรหัสสถานที่ พร้อมกับช่อง name และ photos
จากนั้นรูปภาพแรกจะแสดงในหน้าหลังจากตรวจสอบสถานะบริการ
เมื่อสร้างอินสแตนซ์ PlacesService คุณต้องระบุแผนที่หรือองค์ประกอบ div เนื่องจากตัวอย่างนี้ไม่มีแผนที่ จึงใช้องค์ประกอบ div
function getPhotos() {
// Construct the Place Details request.
const request = {
placeId: "ChIJydSuSkkUkFQRsqhB-cEtYnw",
fields: ["name", "photos"],
};
// Create an instance of PlacesService.
const attributionDiv = document.getElementById("attribution-div");
const service = new google.maps.places.PlacesService(attributionDiv);
// Check status and display the first photo in an img element.
service.getDetails(request, (place, status) => {
if (
status === google.maps.places.PlacesServiceStatus.OK && place
) {
const photoImg = document.getElementById('image-container');
photoImg.src = place.photos[0].getUrl({maxHeight: 400});
}
});
}
การระบุแหล่งที่มาของผู้เขียนใน PlacesService
PlacesService จะแสดงการระบุแหล่งที่มาของผู้เขียนที่จำเป็นเป็นสตริง html_attributions ที่มี URL ซึ่งชี้ไปยังหน้าโปรไฟล์ Google ของผู้เขียน ข้อมูลโค้ดต่อไปนี้แสดงการดึงข้อมูลการระบุแหล่งที่มาสำหรับผลลัพธ์รูปภาพแรก
let attributionUrl = place.photos[0].html_attributions;
ดูข้อมูลเพิ่มเติม
คลาสของสถานที่ (ใหม่)
ข้อมูลโค้ดต่อไปนี้แสดงการใช้เมธอด fetchFields() เพื่อแสดงผลรายละเอียดสถานที่ รวมถึงชื่อที่แสดงและรูปภาพสถานที่
ก่อนอื่น ระบบจะสร้างอินสแตนซ์ออบเจ็กต์ Place ใหม่โดยใช้รหัสสถานที่ ตามด้วยการเรียกใช้ fetchFields() ซึ่งมีการระบุฟิลด์ displayName และ photos
จากนั้นรูปภาพแรกของสถานที่นั้นจะแสดงในหน้าเว็บ คุณไม่จำเป็นต้องตรวจสอบสถานะบริการเมื่อใช้คลาส Place เนื่องจากระบบจะจัดการเรื่องนี้โดยอัตโนมัติ
async function getPhotos() {
// Use a place ID to create a new Place instance.
const place = new google.maps.places.Place({
id: 'ChIJydSuSkkUkFQRsqhB-cEtYnw', // Woodland Park Zoo, Seattle WA
});
// Call fetchFields, passing the needed data fields.
await place.fetchFields({ fields: ['displayName','photos'] });
console.log(place.displayName);
console.log(place.photos[0]);
// Add the first photo to an img element.
const photoImg = document.getElementById('image-container');
photoImg.src = place.photos[0].getURI({maxHeight: 400});
}
การระบุแหล่งที่มาของผู้เขียนในคลาส Place
คลาส Place จะแสดงการระบุแหล่งที่มาของผู้เขียนเป็นอินสแตนซ์ AuthorAttribution ซึ่งรวมถึงชื่อของผู้เขียน, URI สำหรับหน้าโปรไฟล์ Google ของผู้เขียน และ URI สำหรับรูปโปรไฟล์ของผู้เขียน ข้อมูลโค้ดต่อไปนี้แสดงการดึงข้อมูลการระบุแหล่งที่มาสำหรับผลลัพธ์รูปภาพแรก
let name = place.photos[0].authorAttributions[0].displayName;
let attributionUrl = place.photos[0].authorAttributions[0].uri;
let photoUrl = place.photos[0].authorAttributions[0].photoUri;