Places Library

ภาพรวม

ฟังก์ชันในไลบรารีสถานที่ของ Maps JavaScript API ช่วยให้แอปพลิเคชันค้นหาสถานที่ (ซึ่งใน API นี้หมายถึงสถานประกอบการ สถานที่ตั้งทางภูมิศาสตร์ หรือจุดที่น่าสนใจที่โดดเด่น) ภายในพื้นที่ที่กำหนด เช่น ขอบเขตของแผนที่ หรือรอบๆ จุดคงที่

Places API มีฟีเจอร์เติมข้อความอัตโนมัติที่คุณสามารถใช้เพื่อทำให้แอปพลิเคชันมีลักษณะการค้นหาแบบพิมพ์ล่วงหน้าของช่องค้นหา Google Maps เมื่อผู้ใช้เริ่มพิมพ์ที่อยู่ ระบบจะป้อนข้อความที่เหลือให้โดยอัตโนมัติ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบฟีเจอร์เติมข้อความอัตโนมัติ

เริ่มต้นใช้งาน

หากคุณไม่คุ้นเคยกับ Maps JavaScript API หรือ JavaScript เราขอแนะนำให้อ่าน JavaScript และรับคีย์ API ก่อนเริ่มต้นใช้งาน

เปิดใช้ API

ก่อนใช้ไลบรารี Places ใน Maps JavaScript API ก่อนอื่นให้ตรวจสอบว่าได้เปิดใช้ Places API ในคอนโซล Google Cloud ในโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สําหรับ Maps JavaScript API

วิธีดูรายการ API ที่เปิดใช้

  1. ไปที่คอนโซล Google Cloud
  2. คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สําหรับ Maps JavaScript API แล้วคลิกเปิด
  3. จากรายการ API ในหน้าแดชบอร์ด ให้มองหา Places API
  4. หากเห็น Places API ในรายการ แสดงว่าเปิดใช้แล้ว หาก API ไม่อยู่ในรายการ ให้เปิดใช้โดยทำดังนี้
    1. ที่ด้านบนของหน้า ให้เลือกเปิดใช้ API และบริการเพื่อแสดงแท็บคลัง หรือเลือกคลังจากเมนูด้านซ้าย
    2. ค้นหา Places API แล้วเลือกจากรายการผลลัพธ์
    3. เลือกเปิดใช้ เมื่อกระบวนการเสร็จสมบูรณ์แล้ว Places API จะปรากฏในรายการ API ในหน้าแดชบอร์ด

กำลังโหลดคลัง

บริการ Places เป็นไลบรารีแบบสแตนด์อโลนแยกจากโค้ด Maps JavaScript API หลัก หากต้องการใช้ฟังก์ชันที่อยู่ในไลบรารีนี้ คุณต้องโหลดไลบรารีก่อนโดยใช้พารามิเตอร์ libraries ใน URL บูตสตรีปของ Maps API ดังนี้

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>

ดูข้อมูลเพิ่มเติมได้ที่ ภาพรวมของไลบรารี

เพิ่ม Places API ลงในรายการข้อจํากัด API ของคีย์ API

การใช้การจํากัด API กับคีย์จะจํากัดการใช้งานคีย์ API สําหรับ API หรือ SDK อย่างน้อย 1 รายการ ระบบจะประมวลผลคําขอที่ส่งไปยัง API หรือ SDK ที่เชื่อมโยงกับคีย์ API คำขอที่ส่งไปยัง API หรือ SDK ที่ไม่ได้เชื่อมโยงกับคีย์ API จะดำเนินการไม่สำเร็จ วิธีจํากัดคีย์ API เพื่อใช้กับ Places Library, Maps JavaScript API
  1. ไปที่ Google Cloud Console
  2. คลิกเมนูแบบเลื่อนลงของโปรเจ็กต์ แล้วเลือกโปรเจ็กต์ที่มีคีย์ API ที่ต้องการรักษาความปลอดภัย
  3. คลิกปุ่มเมนู แล้วเลือก Google Maps Platform > ข้อมูลเข้าสู่ระบบ
  4. ในหน้าข้อมูลเข้าสู่ระบบ ให้คลิกชื่อคีย์ API ที่ต้องการรักษาความปลอดภัย
  5. ในหน้าจํากัดและเปลี่ยนชื่อคีย์ API ให้ตั้งค่าข้อจํากัด
    • ข้อจำกัด API
      • เลือกจํากัดคีย์
      • คลิกเลือก API แล้วเลือกทั้ง Maps JavaScript API และ Places API
        (หาก API ใด API หนึ่งไม่แสดงในรายการ คุณต้องเปิดใช้ API นั้น)
  6. คลิกบันทึก

ขีดจำกัดการใช้งานและนโยบาย

โควต้า

คลัง Places จะใช้โควต้าการใช้งานร่วมกับ Places API ตามที่อธิบายไว้ในเอกสารประกอบเกี่ยวกับขีดจํากัดการใช้งานของ Places API

นโยบาย

การใช้ Places Library, Maps JavaScript API ต้องเป็นไปตามนโยบายที่อธิบายไว้สำหรับ Places API

การค้นหาสถานที่

บริการสถานที่ช่วยให้คุณทำการค้นหาประเภทต่อไปนี้ได้

ข้อมูลที่แสดงผลอาจรวมถึงสถานที่ตั้ง เช่น ร้านอาหาร ร้านค้า และสำนักงาน ตลอดจนผลการค้นหา "พิกัดภูมิศาสตร์" ซึ่งระบุที่อยู่ เขตการปกครอง เช่น เมืองและอำเภอ และจุดที่น่าสนใจอื่นๆ

คำขอค้นหาสถานที่

คำขอค้นหาสถานที่ช่วยให้คุณค้นหาสถานที่ได้โดยใช้ข้อความค้นหาหรือหมายเลขโทรศัพท์ คำขอค้นหาสถานที่มี 2 ประเภท ได้แก่

ค้นหาสถานที่จากการค้นหา

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

  • query (ต้องระบุ) สตริงข้อความที่จะค้นหา เช่น "restaurant" หรือ "123 Main Street" ต้องเป็นชื่อสถานที่ ที่อยู่ หรือหมวดหมู่ของสถานประกอบการ อินพุตประเภทอื่นๆ อาจทำให้เกิดข้อผิดพลาดและไม่มีการรับประกันว่าจะแสดงผลลัพธ์ที่ถูกต้อง Places API จะแสดงรายการที่ตรงกันตามสตริงนี้และจัดเรียงผลลัพธ์ตามความเกี่ยวข้องที่รับรู้
  • fields (ต้องระบุ) ฟิลด์อย่างน้อย 1 ฟิลด์ที่ระบุประเภทข้อมูลสถานที่ที่จะแสดง
  • locationBias (ไม่บังคับ) พิกัดที่กําหนดพื้นที่ที่จะค้นหา ซึ่งอาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
    • ชุดพิกัดละติจูด/ลองจิจูดที่ระบุเป็น LatLngLiteral หรือออบเจ็กต์ LatLng
    • ขอบเขตสี่เหลี่ยมผืนผ้า (คู่ละติจูด/ลองจิจูด 2 คู่ หรือออบเจ็กต์ LatLngBounds)
    • รัศมี (เป็นเมตร) ที่กึ่งกลางอยู่ที่ละติจูด/ลองจิจูด

นอกจากนี้ คุณยังต้องส่งเมธอด Callback ไปยัง findPlaceFromQuery() เพื่อจัดการออบเจ็กต์ผลลัพธ์และคำตอบของ google.maps.places.PlacesServiceStatus ด้วย

ตัวอย่างต่อไปนี้แสดงการเรียกใช้ findPlaceFromQuery() โดยค้นหา "Museum of Contemporary Art Australia" และรวมช่อง name และ geometry

var map;
var service;
var infowindow;

function initMap() {
  var sydney = new google.maps.LatLng(-33.867, 151.195);

  infowindow = new google.maps.InfoWindow();

  map = new google.maps.Map(
      document.getElementById('map'), {center: sydney, zoom: 15});

  var request = {
    query: 'Museum of Contemporary Art Australia',
    fields: ['name', 'geometry'],
  };

  var service = new google.maps.places.PlacesService(map);

  service.findPlaceFromQuery(request, function(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
      for (var i = 0; i < results.length; i++) {
        createMarker(results[i]);
      }
      map.setCenter(results[0].geometry.location);
    }
  });
}
ดูตัวอย่าง

ค้นหาสถานที่จากหมายเลขโทรศัพท์

ค้นหาสถานที่จากหมายเลขโทรศัพท์จะรับหมายเลขโทรศัพท์และแสดงสถานที่ หากต้องการส่งคําขอค้นหาสถานที่จากหมายเลขโทรศัพท์ ให้เรียกใช้เมธอด findPlaceFromPhoneNumber() ของ PlacesService ซึ่งใช้พารามิเตอร์ต่อไปนี้

  • phoneNumber (ต้องระบุ) หมายเลขโทรศัพท์ในรูปแบบ E.164
  • fields (ต้องระบุ) ฟิลด์อย่างน้อย 1 ฟิลด์ที่ระบุประเภทข้อมูลสถานที่ที่จะแสดง
  • locationBias (ไม่บังคับ) พิกัดที่กําหนดพื้นที่ที่จะค้นหา ซึ่งอาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
    • ชุดพิกัดละติจูด/ลองจิจูดที่ระบุเป็น LatLngLiteral หรือออบเจ็กต์ LatLng
    • ขอบเขตสี่เหลี่ยมผืนผ้า (จุดละติจูด/ลองจิจูด 4 จุด หรือออบเจ็กต์ LatLngBounds)
    • รัศมี (เป็นเมตร) ที่กึ่งกลางอยู่ที่ละติจูด/ลองจิจูด

นอกจากนี้ คุณยังต้องส่งเมธอด Callback ไปยัง findPlaceFromPhoneNumber() เพื่อจัดการออบเจ็กต์ผลลัพธ์และคำตอบของ google.maps.places.PlacesServiceStatus ด้วย

ฟิลด์ (วิธีการค้นหาสถานที่)

ใช้พารามิเตอร์ fields เพื่อระบุอาร์เรย์ประเภทข้อมูลสถานที่ที่จะแสดงผล เช่น fields: ['formatted_address', 'opening_hours', 'geometry'] ใช้จุดเมื่อระบุค่าคอมโพเนนต์ เช่น opening_hours.weekday_text

ช่องต่างๆ สอดคล้องกับผลการค้นหาของ Place Search และแบ่งออกเป็น 3 หมวดหมู่การเรียกเก็บเงิน ได้แก่ พื้นฐาน รายชื่อติดต่อ และบรรยากาศ ระบบจะเรียกเก็บเงินสำหรับช่องพื้นฐานในราคาฐานและไม่มีค่าใช้จ่ายเพิ่มเติม ระบบจะเรียกเก็บเงินสำหรับช่อง "รายชื่อติดต่อ" และ "บรรยากาศ" ในอัตราที่สูงขึ้น ดูข้อมูลเพิ่มเติมได้ที่ชีตราคา ระบบจะแสดงการระบุแหล่งที่มา (html_attributions) ทุกครั้งที่มีการเรียกใช้ ไม่ว่าจะมีการขอฟิลด์ดังกล่าวหรือไม่ก็ตาม

พื้นฐาน

หมวดหมู่พื้นฐานประกอบด้วยช่องต่อไปนี้
business_status, formatted_address, geometry, icon,icon_mask_base_uri, icon_background_color, name, permanently_closed (เลิกใช้งานแล้ว), photos, place_id, plus_code, types

การติดต่อ

หมวดหมู่ "รายชื่อติดต่อ" มีช่องต่อไปนี้ opening_hours
(เลิกใช้งานแล้ว ในไลบรารีสถานที่ของ Maps JavaScript API ใช้คำขอรายละเอียดสถานที่เพื่อรับผลการค้นหาopening_hours)

บรรยากาศ

หมวดหมู่บรรยากาศประกอบด้วยช่องต่อไปนี้ price_level, rating, user_ratings_total

วิธีการ findPlaceFromQuery() และ findPlaceFromPhoneNumber() แต่ละรายการใช้ชุดช่องเดียวกัน และสามารถแสดงผลช่องเดียวกันในการตอบกลับที่เกี่ยวข้อง

ตั้งค่าความลำเอียงของตำแหน่ง (วิธีการค้นหาสถานที่)

ใช้พารามิเตอร์ locationBias เพื่อทําให้ฟีเจอร์ค้นหาสถานที่แสดงผลการค้นหาในพื้นที่หนึ่งๆ คุณตั้งค่า locationBias ได้ดังนี้

ปรับผลการค้นหาให้เหมาะกับพื้นที่หนึ่งๆ

locationBias: {lat: 37.402105, lng: -122.081974}

กําหนดพื้นที่สี่เหลี่ยมผืนผ้าที่จะค้นหาโดยทำดังนี้

locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}

นอกจากนี้ คุณยังใช้ LatLngBounds ได้ด้วย

กําหนดรัศมีที่จะค้นหา (เป็นเมตร) โดยกําหนดศูนย์กลางเป็นพื้นที่ที่ต้องการ

locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}

คำขอการค้นหาในบริเวณใกล้เคียง

การค้นหาใกล้เคียงช่วยให้คุณค้นหาสถานที่ภายในพื้นที่ที่ระบุได้โดยใช้คีย์เวิร์ดหรือประเภท การค้นหาใกล้เคียงต้องมีสถานที่ตั้งเสมอ ซึ่งระบุได้ 2 วิธีดังนี้

  • LatLngBounds
  • พื้นที่รูปวงกลมที่กําหนดเป็นชุดค่าผสมของพร็อพเพอร์ตี้ location ซึ่งระบุจุดศูนย์กลางของวงกลมเป็นออบเจ็กต์ LatLng และรัศมีที่วัดเป็นเมตร

การค้นหาสถานที่ใกล้เคียงจะเริ่มต้นด้วยการเรียกใช้เมธอด nearbySearch() ของ PlacesService ซึ่งจะแสดงผลอาร์เรย์ของออบเจ็กต์ PlaceResult โปรดทราบว่าวิธีการ nearbySearch() จะใช้แทนวิธีการ search() ในเวอร์ชัน 3.9

service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);

วิธีการนี้จะรับคําขอที่มีช่องต่อไปนี้

  • โดยทำอย่างใดอย่างหนึ่งต่อไปนี้
    • bounds ซึ่งต้องเป็นออบเจ็กต์ google.maps.LatLngBounds ที่กําหนดพื้นที่การค้นหาสี่เหลี่ยมผืนผ้า ระยะทางตามแนวทแยงสูงสุดที่รองรับสำหรับขอบเขตพื้นที่คือประมาณ 100,000 เมตร
    • location และ radius โดยที่ location จะรับออบเจ็กต์ google.maps.LatLng ส่วน radius จะรับจำนวนเต็มธรรมดา ซึ่งแสดงรัศมีของวงกลมเป็นเมตร รัศมีสูงสุดที่อนุญาตคือ 50,000 เมตร โปรดทราบว่าเมื่อตั้งค่า rankBy เป็น DISTANCE คุณต้องระบุ location แต่ไม่สามารถระบุ radius หรือ bounds
  • keyword (ไม่บังคับ) — คำที่จะจับคู่กับช่องที่มีทั้งหมด ซึ่งรวมถึงแต่ไม่จำกัดเพียงชื่อ ประเภท และที่อยู่ ตลอดจนรีวิวของลูกค้าและเนื้อหาอื่นๆ ของบุคคลที่สาม
  • minPriceLevel และ maxPriceLevel (ไม่บังคับ) — จำกัดผลการค้นหาให้แสดงเฉพาะสถานที่ที่อยู่ในช่วงที่ระบุเท่านั้น ค่าที่ใช้ได้อยู่ในช่วง 0 (ราคาไม่แพงที่สุด) ถึง 4 (ราคาแพงที่สุด)
  • name เลิกใช้งานแล้ว เทียบเท่ากับ keyword ระบบจะรวมค่าในช่องนี้เข้ากับค่าในช่อง keyword และส่งค่าดังกล่าวเป็นส่วนหนึ่งของสตริงการค้นหาเดียวกัน
  • openNow (ไม่บังคับ) — ค่าบูลีน ซึ่งบ่งบอกว่าบริการ Places ควรแสดงเฉพาะสถานที่ที่เปิดทําธุรกิจ ณ เวลาส่งการค้นหา ระบบจะไม่แสดงสถานที่ที่ไม่ได้ระบุเวลาทำการในฐานข้อมูล Google Places หากคุณรวมพารามิเตอร์นี้ไว้ในข้อความค้นหา การตั้งค่า openNow เป็น false จะไม่มีผล
  • rankBy (ไม่บังคับ) — ระบุลําดับที่แสดงผลลัพธ์ ค่าที่เป็นไปได้มีดังนี้
    • google.maps.places.RankBy.PROMINENCE (ค่าเริ่มต้น) ตัวเลือกนี้จะจัดเรียงผลการค้นหาตามความสำคัญ การจัดอันดับจะให้ความสำคัญกับสถานที่ที่โดดเด่นภายในรัศมีที่กำหนดมากกว่าสถานที่ใกล้เคียงที่ตรงกันแต่โดดเด่นน้อยกว่า ความโดดเด่นอาจได้รับผลกระทบจากอันดับของสถานที่ในดัชนีของ Google, ความนิยมทั่วโลก และปัจจัยอื่นๆ เมื่อระบุ google.maps.places.RankBy.PROMINENCE จะต้องระบุพารามิเตอร์ radius ด้วย
    • google.maps.places.RankBy.DISTANCE ตัวเลือกนี้จะจัดเรียงผลลัพธ์จากน้อยไปมากตามระยะทางจาก location ที่ระบุ (ต้องระบุ) โปรดทราบว่าคุณจะระบุ bounds และ/หรือ radius ที่กำหนดเองไม่ได้หากระบุ RankBy.DISTANCE เมื่อคุณระบุ RankBy.DISTANCE คุณต้องระบุ keyword, name หรือ type อย่างน้อย 1 รายการ
  • type — จำกัดผลการค้นหาให้แสดงเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุ ระบุได้เพียงประเภทเดียว (หากระบุมากกว่า 1 ประเภท ระบบจะไม่สนใจประเภททั้งหมดที่อยู่หลังรายการแรก) ดูรายการประเภทที่รองรับ

นอกจากนี้ คุณยังต้องส่งเมธอด Callback ไปยัง nearbySearch() เพื่อจัดการออบเจ็กต์ผลลัพธ์และการตอบกลับของ google.maps.places.PlacesServiceStatus ด้วย

var map;
var service;
var infowindow;

function initialize() {
  var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);

  map = new google.maps.Map(document.getElementById('map'), {
      center: pyrmont,
      zoom: 15
    });

  var request = {
    location: pyrmont,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

ดูตัวอย่าง

คำขอการค้นหาข้อความ

บริการค้นหาข้อความของ Google Places เป็นเว็บเซอร์วิสที่แสดงข้อมูลเกี่ยวกับชุดสถานที่ตามสตริง เช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้กับออตตาวา" บริการจะตอบกลับด้วยรายการสถานที่ที่ตรงกับสตริงข้อความและค่ากำหนดตำแหน่งที่ตั้งที่ตั้งไว้ การตอบกลับการค้นหาจะมีรายการสถานที่ คุณสามารถส่งคำขอรายละเอียดสถานที่เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับสถานที่ใดก็ได้ในการตอบกลับ

การค้นหาข้อความจะเริ่มต้นด้วยการเรียกใช้เมธอด textSearch() ของ PlacesService

service = new google.maps.places.PlacesService(map);
service.textSearch(request, callback);

วิธีการนี้จะรับคําขอที่มีช่องต่อไปนี้

  • query (ต้องระบุ) สตริงข้อความที่จะค้นหา เช่น "restaurant" หรือ "123 Main Street" ต้องเป็นชื่อ ที่อยู่ หรือหมวดหมู่ของสถานที่ตั้ง อินพุตประเภทอื่นๆ อาจทำให้เกิดข้อผิดพลาดและไม่มีการรับประกันว่าจะแสดงผลลัพธ์ที่ถูกต้อง บริการ Places จะแสดงรายการที่ตรงกันตามสตริงนี้และจัดเรียงผลลัพธ์ตามความเกี่ยวข้องที่รับรู้ พารามิเตอร์นี้จะกลายเป็นพารามิเตอร์ที่ไม่บังคับหากมีการใช้พารามิเตอร์ type ในคำขอค้นหาด้วย
  • ไม่บังคับ
    • openNow — ค่าบูลีน ซึ่งระบุว่าบริการสถานที่ควรแสดงเฉพาะสถานที่ที่เปิดทําธุรกิจอยู่ ณ เวลาที่มีการส่งการค้นหา ระบบจะไม่แสดงสถานที่ที่ไม่ได้ระบุเวลาทำการในฐานข้อมูล Google Places หากคุณระบุพารามิเตอร์นี้ในคำค้นหา การตั้งค่า openNow เป็น false จะไม่มีผล
    • minPriceLevel และ maxPriceLevel - จำกัดผลการค้นหาให้แสดงเฉพาะสถานที่ที่อยู่ในระดับราคาที่ระบุเท่านั้น ค่าที่ใช้ได้อยู่ในช่วงตั้งแต่ 0 (ราคาไม่แพงที่สุด) ถึง 4 (ราคาแพงที่สุด)
    • โดยทำอย่างใดอย่างหนึ่งต่อไปนี้
      • bounds ซึ่งต้องเป็นออบเจ็กต์ google.maps.LatLngBounds ที่กําหนดพื้นที่การค้นหาสี่เหลี่ยมผืนผ้า ระยะทางตามแนวทแยงสูงสุดที่รองรับสำหรับพื้นที่ขอบเขตคือประมาณ 100,000 เมตร
      • location และ radius - คุณอาจทำให้ผลลัพธ์เอนเอียงไปยังวงกลมที่ระบุได้โดยการส่งพารามิเตอร์ location และ radius ซึ่งจะสั่งให้บริการ Places แสดงผลการค้นหาภายในวงกลมนั้น ผลการค้นหาที่อยู่นอกพื้นที่ที่กําหนดอาจยังแสดงอยู่ ตำแหน่งใช้ออบเจ็กต์ google.maps.LatLng และรัศมีใช้จำนวนเต็มธรรมดา ซึ่งแสดงรัศมีของวงกลมเป็นเมตร รัศมีสูงสุดที่อนุญาตคือ 50,000 เมตร
    • type — จำกัดผลการค้นหาให้แสดงเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุ ระบุได้เพียงประเภทเดียว (หากระบุมากกว่า 1 ประเภท ระบบจะละเว้นประเภททั้งหมดที่อยู่หลังรายการแรก) ดูรายการประเภทที่รองรับ

นอกจากนี้ คุณยังต้องส่งเมธอด Callback ไปยัง textSearch() เพื่อจัดการออบเจ็กต์ผลลัพธ์และการตอบกลับ google.maps.places.PlacesServiceStatus ด้วย

var map;
var service;
var infowindow;

function initialize() {
  var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);

  map = new google.maps.Map(document.getElementById('map'), {
      center: pyrmont,
      zoom: 15
    });

  var request = {
    location: pyrmont,
    radius: '500',
    query: 'restaurant'
  };

  service = new google.maps.places.PlacesService(map);
  service.textSearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      var place = results[i];
      createMarker(results[i]);
    }
  }
}

การตอบกลับการค้นหา

รหัสสถานะ

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

  • INVALID_REQUEST: คำขอนี้ไม่ถูกต้อง
  • OK: การตอบกลับแสดงผลลัพธ์ที่ถูกต้อง
  • OVER_QUERY_LIMIT: หน้าเว็บมีคำขอเกินโควต้า
  • REQUEST_DENIED: หน้าเว็บไม่ได้รับอนุญาตให้ใช้ PlacesService
  • UNKNOWN_ERROR: ประมวลผลคําขอ PlacesService ไม่ได้เนื่องจากข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ คำขออาจสำเร็จหากคุณลองอีกครั้ง
  • ZERO_RESULTS: ไม่พบผลการค้นหาสำหรับคำขอนี้

ผลการค้นหาสถานที่

ฟังก์ชัน findPlace(), nearbySearch() และ textSearch() จะแสดงผลอาร์เรย์ของออบเจ็กต์ PlaceResult

ออบเจ็กต์ PlaceResult แต่ละรายการอาจมีพร็อพเพอร์ตี้ต่อไปนี้

  • business_status ระบุสถานะการทํางานของสถานที่ หากเป็นธุรกิจ โดยอาจมีค่าใดค่าหนึ่งต่อไปนี้
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    หากไม่มีข้อมูล ระบบจะไม่แสดง business_status
  • formatted_address คือสตริงที่มีที่อยู่ของสถานที่นี้ซึ่งมนุษย์อ่านได้ ระบบจะแสดงพร็อพเพอร์ตี้ formatted_address สำหรับการค้นหาข้อความเท่านั้น

    ที่อยู่นี้มักจะเทียบเท่ากับที่อยู่ไปรษณีย์ โปรดทราบว่าบางประเทศ เช่น สหราชอาณาจักร ไม่อนุญาตให้เผยแพร่ที่อยู่ไปรษณีย์จริงเนื่องจากข้อจำกัดด้านใบอนุญาต

    ที่อยู่ที่มีการจัดรูปแบบประกอบด้วยองค์ประกอบที่อยู่อย่างน้อย 1 รายการ เช่น ที่อยู่ที่ "111 8th Avenue, New York, NY" ประกอบด้วยองค์ประกอบต่อไปนี้ "111" (เลขที่) "8th Avenue" (ถนน) "New York" (เมือง) และ "NY" (รัฐในสหรัฐอเมริกา)

    อย่าแยกวิเคราะห์ที่อยู่ที่มีการจัดรูปแบบแบบเป็นโปรแกรม แต่คุณควรใช้องค์ประกอบที่อยู่แต่ละรายการแทน ซึ่งคำตอบของ API จะรวมไว้นอกเหนือจากช่องที่อยู่ที่มีการจัดรูปแบบแล้ว

  • geometry: ข้อมูลเกี่ยวกับเรขาคณิตของสถานที่ ซึ่งรวมถึงข้อมูลต่อไปนี้
    • location จะระบุละติจูดและลองจิจูดของสถานที่
    • viewport กำหนดวิวพอร์ตที่ต้องการบนแผนที่เมื่อดูสถานที่นี้
  • permanently_closed (เลิกใช้งานแล้ว) คือธงบูลีนที่ระบุว่าสถานที่ปิดกิจการถาวรหรือชั่วคราว (ค่า true) อย่าใช้ permanently_closed แต่ให้ใช้ business_status instead เพื่อดูสถานะการทํางานของธุรกิจ
  • plus_code (ดูOpen Location Code และ Plus Codes) เป็นข้อมูลอ้างอิงตำแหน่งที่เข้ารหัสซึ่งมาจากพิกัดละติจูดและลองจิจูดที่แสดงถึงพื้นที่ 1/8000 องศาคูณ 1/8000 องศา (ประมาณ 14 ม. x 14 ม. ที่เส้นศูนย์สูตร) หรือเล็กกว่านั้น คุณสามารถใช้ Plus Codes แทนที่อยู่ซึ่งไม่มีอยู่ (ในกรณีที่ไม่มีเลขที่อาคารหรือไม่มีชื่อถนน)

    Plus Code มีรูปแบบเป็นรหัสสากลและรหัสประกอบ ดังนี้

    • global_code คือรหัสพื้นที่ 4 อักขระและรหัสท้องถิ่น 6 อักขระขึ้นไป (849VCWC8+R9)
    • compound_code คือรหัสท้องถิ่นที่มีความยาวตั้งแต่ 6 อักขระขึ้นไปพร้อมตำแหน่งที่ชัดเจน (CWC8+R9, Mountain View, CA, USA) อย่าแยกวิเคราะห์เนื้อหานี้แบบเป็นโปรแกรม
    โดยทั่วไป ระบบจะแสดงผลทั้งรหัสส่วนกลางและรหัสประกอบ อย่างไรก็ตาม หากผลลัพธ์อยู่ในพื้นที่ห่างไกล (เช่น ทะเลหรือทะเลทราย) ระบบอาจแสดงเฉพาะรหัสส่วนกลาง
  • html_attributions: อาร์เรย์ของการระบุแหล่งที่มาที่คุณควรแสดงเมื่อแสดงผลการค้นหา แต่ละรายการในอาร์เรย์จะมีข้อความ HTML สำหรับการระบุแหล่งที่มารายการเดียว หมายเหตุ: ข้อมูลนี้เป็นการรวมแหล่งที่มาทั้งหมดของผลการค้นหาทั้งหมด ดังนั้นออบเจ็กต์ PlaceResult ทั้งหมดในการตอบกลับจึงมีรายการการระบุแหล่งที่มาที่เหมือนกัน
  • icon จะแสดงผล URL ของไอคอน PNG ขนาด 71 x 71 พิกเซลที่มีสี
  • icon_mask_base_uri จะแสดงผล URL พื้นฐานสําหรับไอคอนที่ไม่มีสี โดยลบส่วนขยาย .svg หรือ .png
  • icon_background_color จะแสดงรหัสสี HEX เริ่มต้นสำหรับหมวดหมู่ของสถานที่
  • name: ชื่อสถานที่
  • opening_hours อาจมีข้อมูลต่อไปนี้
    • open_now คือค่าบูลีนที่ระบุว่าสถานที่เปิดอยู่หรือไม่ ณ เวลาปัจจุบัน (เลิกใช้งานแล้วใน Places Library, Maps JavaScript API ให้ใช้ utc_offset_minutes แทน)
  • place_id คือตัวระบุที่เป็นข้อความซึ่งระบุสถานที่อย่างเจาะจง หากต้องการเรียกข้อมูลเกี่ยวกับสถานที่ ให้ส่งตัวระบุนี้ในคำขอรายละเอียดสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีอ้างอิงสถานที่ด้วยรหัสสถานที่
  • rating มีคะแนนของสถานที่ตั้งแต่ 0.0 ถึง 5.0 โดยอิงตามรีวิวของผู้ใช้ที่รวบรวม
  • types อาร์เรย์ของประเภทสำหรับสถานที่นี้ (เช่น ["political", "locality"] หรือ ["restaurant", "lodging"]) อาร์เรย์นี้อาจมีค่าหลายค่าหรืออาจว่างเปล่า เราอาจเปิดตัวค่าใหม่โดยไม่แจ้งให้ทราบล่วงหน้า ดูรายการประเภทที่รองรับ
  • vicinity: ที่อยู่แบบย่อของสถานที่ ซึ่งรวมถึงชื่อถนน เลขที่ และสถานที่ตั้ง แต่ไม่มีจังหวัด/รัฐ รหัสไปรษณีย์ หรือประเทศ เช่น สำนักงานของ Google ในซิดนีย์ ออสเตรเลียมีค่า vicinity เป็น 5/48 Pirrama Road, Pyrmont

การเข้าถึงผลการค้นหาเพิ่มเติม

โดยค่าเริ่มต้น การค้นหาสถานที่แต่ละครั้งจะแสดงผลการค้นหาสูงสุด 20 รายการต่อคำค้นหา อย่างไรก็ตาม การค้นหาแต่ละครั้งจะแสดงผลลัพธ์ได้สูงสุด 60 รายการ โดยแบ่งออกเป็น 3 หน้า หน้าอื่นๆ มีอยู่ในออบเจ็กต์ PlaceSearchPagination หากต้องการเข้าถึงหน้าเว็บเพิ่มเติม คุณต้องบันทึกออบเจ็กต์ PlaceSearchPagination ผ่านฟังก์ชันการเรียกกลับ ออบเจ็กต์ PlaceSearchPagination ได้รับการกําหนดดังนี้

  • hasNextPage พร็อพเพอร์ตี้บูลีนที่ระบุว่ามีผลการค้นหาเพิ่มเติมหรือไม่ true เมื่อมีหน้าผลการค้นหาเพิ่มเติม
  • nextPage() ฟังก์ชันที่จะแสดงผลลัพธ์ชุดถัดไป หลังจากทำการค้นหาแล้ว คุณต้องรอ 2 วินาทีจึงจะเห็นผลการค้นหาหน้าถัดไป

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

ตัวอย่างด้านล่างแสดงวิธีแก้ไขฟังก์ชัน Callback เพื่อบันทึกออบเจ็กต์ PlaceSearchPagination เพื่อให้คุณส่งคำขอค้นหาได้หลายรายการ

TypeScript

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

function initMap(): void {
  // Create the map.
  const pyrmont = { lat: -33.866, lng: 151.196 };
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      center: pyrmont,
      zoom: 17,
      mapId: "8d193001f940fde3",
    } as google.maps.MapOptions
  );

  // Create the places service.
  const service = new google.maps.places.PlacesService(map);
  let getNextPage: () => void | false;
  const moreButton = document.getElementById("more") as HTMLButtonElement;

  moreButton.onclick = function () {
    moreButton.disabled = true;

    if (getNextPage) {
      getNextPage();
    }
  };

  // Perform a nearby search.
  service.nearbySearch(
    { location: pyrmont, radius: 500, type: "store" },
    (
      results: google.maps.places.PlaceResult[] | null,
      status: google.maps.places.PlacesServiceStatus,
      pagination: google.maps.places.PlaceSearchPagination | null
    ) => {
      if (status !== "OK" || !results) return;

      addPlaces(results, map);
      moreButton.disabled = !pagination || !pagination.hasNextPage;

      if (pagination && pagination.hasNextPage) {
        getNextPage = () => {
          // Note: nextPage will call the same handler function as the initial call
          pagination.nextPage();
        };
      }
    }
  );
}

function addPlaces(
  places: google.maps.places.PlaceResult[],
  map: google.maps.Map
) {
  const placesList = document.getElementById("places") as HTMLElement;

  for (const place of places) {
    if (place.geometry && place.geometry.location) {
      const image = {
        url: place.icon!,
        size: new google.maps.Size(71, 71),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(17, 34),
        scaledSize: new google.maps.Size(25, 25),
      };

      new google.maps.Marker({
        map,
        icon: image,
        title: place.name!,
        position: place.geometry.location,
      });

      const li = document.createElement("li");

      li.textContent = place.name!;
      placesList.appendChild(li);

      li.addEventListener("click", () => {
        map.setCenter(place.geometry!.location!);
      });
    }
  }
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">
function initMap() {
  // Create the map.
  const pyrmont = { lat: -33.866, lng: 151.196 };
  const map = new google.maps.Map(document.getElementById("map"), {
    center: pyrmont,
    zoom: 17,
    mapId: "8d193001f940fde3",
  });
  // Create the places service.
  const service = new google.maps.places.PlacesService(map);
  let getNextPage;
  const moreButton = document.getElementById("more");

  moreButton.onclick = function () {
    moreButton.disabled = true;
    if (getNextPage) {
      getNextPage();
    }
  };

  // Perform a nearby search.
  service.nearbySearch(
    { location: pyrmont, radius: 500, type: "store" },
    (results, status, pagination) => {
      if (status !== "OK" || !results) return;

      addPlaces(results, map);
      moreButton.disabled = !pagination || !pagination.hasNextPage;
      if (pagination && pagination.hasNextPage) {
        getNextPage = () => {
          // Note: nextPage will call the same handler function as the initial call
          pagination.nextPage();
        };
      }
    },
  );
}

function addPlaces(places, map) {
  const placesList = document.getElementById("places");

  for (const place of places) {
    if (place.geometry && place.geometry.location) {
      const image = {
        url: place.icon,
        size: new google.maps.Size(71, 71),
        origin: new google.maps.Point(0, 0),
        anchor: new google.maps.Point(17, 34),
        scaledSize: new google.maps.Size(25, 25),
      };

      new google.maps.Marker({
        map,
        icon: image,
        title: place.name,
        position: place.geometry.location,
      });

      const li = document.createElement("li");

      li.textContent = place.name;
      placesList.appendChild(li);
      li.addEventListener("click", () => {
        map.setCenter(place.geometry.location);
      });
    }
  }
}

window.initMap = initMap;
ดูตัวอย่าง

ลองใช้ตัวอย่าง

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

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

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

ระบบจะขอรายละเอียดสถานที่ด้วยการเรียกใช้เมธอด getDetails() ของบริการ

service = new google.maps.places.PlacesService(map);
service.getDetails(request, callback);

เมธอดนี้จะรับคําขอที่มี placeId ของสถานที่ที่ต้องการ และช่องที่ระบุประเภทข้อมูลสถานที่ที่จะแสดง ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีอ้างอิงสถานที่ด้วยรหัสสถานที่

นอกจากนี้ยังใช้เมธอดการเรียกกลับ ซึ่งต้องจัดการรหัสสถานะที่ส่งมาในคําตอบ google.maps.places.PlacesServiceStatus รวมถึงออบเจ็กต์ google.maps.places.PlaceResult ด้วย

var request = {
  placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4',
  fields: ['name', 'rating', 'formatted_phone_number', 'geometry']
};

service = new google.maps.places.PlacesService(map);
service.getDetails(request, callback);

function callback(place, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    createMarker(place);
  }
}

ดูตัวอย่าง

ฟิลด์ (รายละเอียดสถานที่)

พารามิเตอร์ fields ใช้อาร์เรย์สตริง (ชื่อฟิลด์)

ใช้พารามิเตอร์ fields เพื่อระบุอาร์เรย์ประเภทข้อมูลสถานที่ที่จะแสดงผล เช่น fields: ['address_components', 'opening_hours', 'geometry'] ใช้จุดเมื่อระบุค่าคอมโพเนนต์ เช่น opening_hours.weekday_text

ช่องต่างๆ สอดคล้องกับผลการค้นหารายละเอียดสถานที่ และแบ่งออกเป็น 3 หมวดหมู่การเรียกเก็บเงิน ได้แก่ พื้นฐาน การติดต่อ และบรรยากาศ ระบบจะเรียกเก็บเงินสำหรับช่องพื้นฐานในราคาฐานและไม่มีค่าใช้จ่ายเพิ่มเติม ระบบจะเรียกเก็บเงินสำหรับฟิลด์รายชื่อติดต่อและบรรยากาศในอัตราที่สูงขึ้น ดูข้อมูลเพิ่มเติมได้ที่ชีตราคา ระบบจะแสดงการระบุแหล่งที่มา (html_attributions) ทุกครั้งที่มีการเรียกใช้ ไม่ว่าจะมีการขอหรือไม่ก็ตาม

พื้นฐาน

หมวดหมู่พื้นฐานประกอบด้วยช่องต่อไปนี้
address_components, adr_address, business_status, formatted_address, geometry, icon, icon_mask_base_uri, icon_background_color,name, permanently_closed (เลิกใช้งานแล้ว), photo, place_id, plus_code, type, url, utc_offset (เลิกใช้งานแล้ว ใน Places Library, Maps JavaScript API), utc_offset_minutes, vicinity

การติดต่อ

หมวดหมู่ "ข้อมูลติดต่อ" มีช่องต่อไปนี้
formatted_phone_number, international_phone_number, opening_hours, website

บรรยากาศ

หมวดหมู่บรรยากาศประกอบด้วยช่องต่อไปนี้ price_level, rating, reviews, user_ratings_total

ดูข้อมูลเพิ่มเติมเกี่ยวกับช่องสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเรียกเก็บเงินคำขอข้อมูลสถานที่ได้ที่การใช้งานและการเรียกเก็บเงิน

คำตอบเกี่ยวกับรายละเอียดสถานที่

รหัสสถานะ

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

  • INVALID_REQUEST: คำขอนี้ไม่ถูกต้อง
  • OK: การตอบกลับแสดงผลลัพธ์ที่ถูกต้อง
  • OVER_QUERY_LIMIT: หน้าเว็บมีคำขอเกินโควต้า
  • NOT_FOUND ไม่พบสถานที่อ้างอิงในฐานข้อมูลสถานที่
  • REQUEST_DENIED: หน้าเว็บไม่ได้รับอนุญาตให้ใช้ PlacesService
  • UNKNOWN_ERROR: ประมวลผลคําขอ PlacesService ไม่ได้เนื่องจากข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ คำขออาจสำเร็จหากคุณลองอีกครั้ง
  • ZERO_RESULTS: ไม่พบผลการค้นหาสำหรับคำขอนี้

ผลการค้นหารายละเอียดสถานที่

การเรียกใช้ getDetails() ที่สำเร็จจะแสดงผลออบเจ็กต์ PlaceResult ที่มีพร็อพเพอร์ตี้ต่อไปนี้

  • address_components: อาร์เรย์ที่มีคอมโพเนนต์แยกต่างหากซึ่งใช้กับที่อยู่นี้ได้

    โดยทั่วไปแล้วองค์ประกอบที่อยู่แต่ละรายการจะมีช่องต่อไปนี้

    • types[] คืออาร์เรย์ที่ระบุประเภทของคอมโพเนนต์ที่อยู่ ดูรายการประเภทที่รองรับ
    • long_name คือคำอธิบายแบบเต็มหรือชื่อของคอมโพเนนต์ที่อยู่ตามที่ Geocoder แสดง
    • short_name คือชื่อแบบย่อของข้อความสำหรับคอมโพเนนต์ที่อยู่ หากมี ตัวอย่างเช่น องค์ประกอบที่อยู่สำหรับรัฐอะแลสกาอาจมี long_name เป็น "Alaska" และ short_name เป็น "AK" โดยใช้ตัวย่อไปรษณีย์ 2 ตัว

    โปรดทราบข้อเท็จจริงต่อไปนี้เกี่ยวกับอาร์เรย์ address_components[]

    • อาร์เรย์ขององค์ประกอบที่อยู่อาจมีองค์ประกอบมากกว่า formatted_address
    • อาร์เรย์ไม่จำเป็นต้องรวมนิติบุคคลทางการเมืองทั้งหมดที่มีที่อยู่ นอกเหนือจากที่อยู่ที่อยู่ใน formatted_address หากต้องการดึงข้อมูลนิติบุคคลทั้งหมดที่มีที่อยู่ที่ต้องการ คุณควรใช้การแปลงพิกัดภูมิศาสตร์ย้อนกลับ โดยส่งละติจูด/ลองจิจูดของที่อยู่เป็นพารามิเตอร์ไปยังคำขอ
    • เราไม่รับประกันว่ารูปแบบของคำตอบจะเหมือนกันระหว่างคำขอ โดยเฉพาะอย่างยิ่ง จำนวน address_components จะแตกต่างกันไปตามที่อยู่ที่มีการขอ และอาจเปลี่ยนแปลงเมื่อเวลาผ่านไปสำหรับที่อยู่เดียวกัน คอมโพเนนต์สามารถเปลี่ยนตำแหน่งในอาร์เรย์ได้ ประเภทของคอมโพเนนต์จะเปลี่ยนแปลงได้ คอมโพเนนต์บางอย่างอาจหายไปในการตอบกลับในภายหลัง
  • business_status ระบุสถานะการทํางานของสถานที่ หากเป็นธุรกิจ โดยอาจมีค่าใดค่าหนึ่งต่อไปนี้
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    หากไม่มีข้อมูล ระบบจะไม่แสดง business_status
  • formatted_address: ที่อยู่ของสถานที่นี้ที่มนุษย์อ่านได้

    ที่อยู่นี้มักจะเทียบเท่ากับที่อยู่ไปรษณีย์ โปรดทราบว่าบางประเทศ เช่น สหราชอาณาจักร ไม่อนุญาตให้เผยแพร่ที่อยู่ไปรษณีย์จริงเนื่องจากข้อจำกัดด้านใบอนุญาต

    ที่อยู่ที่มีการจัดรูปแบบประกอบด้วยองค์ประกอบที่อยู่อย่างน้อย 1 รายการ เช่น ที่อยู่ที่ "111 8th Avenue, New York, NY" ประกอบด้วยองค์ประกอบต่อไปนี้ "111" (เลขที่) "8th Avenue" (ถนน) "New York" (เมือง) และ "NY" (รัฐในสหรัฐอเมริกา)

    อย่าแยกวิเคราะห์ที่อยู่ที่มีการจัดรูปแบบแบบเป็นโปรแกรม แต่คุณควรใช้องค์ประกอบที่อยู่แต่ละรายการแทน ซึ่งคำตอบของ API จะรวมไว้นอกเหนือจากช่องที่อยู่ที่มีการจัดรูปแบบแล้ว

  • formatted_phone_number: หมายเลขโทรศัพท์ของสถานที่ที่จัดรูปแบบตาม รูปแบบภูมิภาคของหมายเลข
  • geometry: ข้อมูลเกี่ยวกับเรขาคณิตของสถานที่ ซึ่งรวมถึงข้อมูลต่อไปนี้
    • location จะระบุละติจูดและลองจิจูดของสถานที่
    • viewport กำหนดวิวพอร์ตที่ต้องการบนแผนที่เมื่อดูสถานที่นี้
  • permanently_closed (เลิกใช้งานแล้ว) คือธงบูลีนที่ระบุว่าสถานที่ปิดกิจการถาวรหรือชั่วคราว (ค่า true) อย่าใช้ permanently_closed แต่ให้ใช้ business_status instead เพื่อดูสถานะการทํางานของธุรกิจ
  • plus_code (ดูOpen Location Code และ Plus Codes) เป็นข้อมูลอ้างอิงตำแหน่งที่เข้ารหัสซึ่งมาจากพิกัดละติจูดและลองจิจูดที่แสดงถึงพื้นที่ 1/8000 องศาคูณ 1/8000 องศา (ประมาณ 14 ม. x 14 ม. ที่เส้นศูนย์สูตร) หรือเล็กกว่านั้น คุณสามารถใช้ Plus Codes แทนที่อยู่ซึ่งไม่มีอยู่ (ในกรณีที่ไม่มีเลขที่อาคารหรือไม่มีชื่อถนน)

    Plus Code มีรูปแบบเป็นรหัสสากลและรหัสประกอบ ดังนี้

    • global_code คือรหัสพื้นที่ 4 อักขระและรหัสท้องถิ่น 6 อักขระขึ้นไป (849VCWC8+R9)
    • compound_code คือรหัสท้องถิ่นที่มีความยาวตั้งแต่ 6 อักขระขึ้นไปพร้อมตำแหน่งที่ชัดเจน (CWC8+R9, Mountain View, CA, USA) อย่าแยกวิเคราะห์เนื้อหานี้แบบเป็นโปรแกรม
    โดยทั่วไป ระบบจะแสดงทั้งรหัสส่วนกลางและรหัสคอมโพเนนต์ อย่างไรก็ตาม หากผลลัพธ์อยู่ในพื้นที่ห่างไกล (เช่น ทะเลหรือทะเลทราย) ระบบอาจแสดงเฉพาะรหัสส่วนกลาง
  • html_attributions: ข้อความระบุแหล่งที่มาที่จะแสดงสำหรับผลการค้นหาสถานที่นี้
  • icon: URL ไปยังแหล่งข้อมูลรูปภาพที่สามารถใช้เพื่อแสดงประเภทของสถานที่นี้
  • international_phone_number มีหมายเลขโทรศัพท์ของสถานที่ในรูปแบบระหว่างประเทศ รูปแบบระหว่างประเทศจะมีรหัสประเทศและนำหน้าด้วยเครื่องหมายบวก (+) ตัวอย่างเช่น international_phone_number สำหรับสำนักงานของ Google ในซิดนีย์ ออสเตรเลียคือ +61 2 9374 4000
  • name: ชื่อสถานที่
  • utc_offset เลิกใช้งานแล้ว ในไลบรารี Places, Maps JavaScript API ให้ใช้ utc_offset_minutes แทน
  • utc_offset_minutes มีจำนวนนาทีที่เขตเวลาปัจจุบันของสถานที่นี้ชดเชยจาก UTC ตัวอย่างเช่น สำหรับสถานที่ในซิดนีย์ ออสเตรเลียในช่วงที่เปลี่ยนเวลาเป็นฤดูร้อน ค่านี้จะเท่ากับ 660 (+11 ชั่วโมงจาก UTC) และสำหรับสถานที่ในแคลิฟอร์เนียที่ไม่ได้เปลี่ยนเวลาเป็นฤดูร้อน ค่านี้จะเท่ากับ -480 (-8 ชั่วโมงจาก UTC)
  • opening_hours มีข้อมูลต่อไปนี้
    • open_now (เลิกใช้งานแล้วใน Places Library, Maps JavaScript API ให้ใช้ opening_hours.isOpen() แทน) ดูวิธีใช้ isOpen กับรายละเอียดสถานที่ได้ในวิดีโอนี้) เป็นค่าบูลีนที่ระบุว่าสถานที่เปิดอยู่หรือไม่ ณ เวลาปัจจุบัน
    • periods[] คืออาร์เรย์ของระยะเวลาเปิดทำการ 7 วัน โดยเริ่มจากวันอาทิตย์ตามลำดับเวลา แต่ละระยะเวลาจะมีข้อมูลต่อไปนี้
      • open มีออบเจ็กต์วันและเวลา 2 รายการซึ่งอธิบายเวลาเปิดของสถานที่ ดังนี้
        • day ตัวเลข 0-6 ซึ่งสอดคล้องกับวันในสัปดาห์ โดยเริ่มจากวันอาทิตย์ เช่น 2 หมายถึงวันอังคาร
        • time อาจมีเวลาของวันในรูปแบบ 24 ชั่วโมง hhmm (ค่าอยู่ในช่วง 0000–2359) ระบบจะรายงานtimeตามเขตเวลาของสถานที่
      • close อาจมีออบเจ็กต์วันและเวลา 2 รายการซึ่งอธิบายเวลาที่สถานที่ปิด หมายเหตุ: หากสถานที่เปิดตลอด ส่วน close จะหายไปจากคำตอบ แอปพลิเคชันสามารถใช้ค่าเปิดอยู่เสมอซึ่งแสดงเป็นระยะเวลา open ที่มี day ที่มีค่า 0 และ time ที่มีค่า 0000 และไม่มี close
    • weekday_text คืออาร์เรย์สตริง 7 รายการที่แสดงเวลาทำการที่ฟอร์แมตแล้วสำหรับแต่ละวันในสัปดาห์ หากมีการระบุพารามิเตอร์ language ในคำขอรายละเอียดสถานที่ บริการ Places จะจัดรูปแบบและแปลเวลาทำการเป็นภาษานั้นๆ อย่างเหมาะสม ลําดับขององค์ประกอบในอาร์เรย์นี้ขึ้นอยู่กับพารามิเตอร์ language บางภาษาเริ่มต้นสัปดาห์ที่วันจันทร์ ส่วนบางภาษาเริ่มต้นที่วันอาทิตย์
  • permanently_closed (เลิกใช้งานแล้ว) คือธงบูลีนที่ระบุว่าสถานที่ปิดกิจการถาวรหรือชั่วคราว (ค่า true) อย่าใช้ permanently_closed แต่ให้ใช้ business_status instead เพื่อดูสถานะการทํางานของธุรกิจ
  • photos[]: อาร์เรย์ของออบเจ็กต์ PlacePhoto คุณสามารถใช้ PlacePhoto เพื่อรับรูปภาพด้วยวิธี getUrl() หรือจะตรวจสอบวัตถุเพื่อหาค่าต่อไปนี้ก็ได้
    • height: ความสูงสูงสุดของรูปภาพเป็นพิกเซล
    • width: ความกว้างสูงสุดของรูปภาพในหน่วยพิกเซล
    • html_attributions: ข้อความระบุแหล่งที่มาที่จะแสดงพร้อมกับรูปภาพสถานที่นี้
  • place_id: ตัวระบุที่เป็นข้อความซึ่งระบุสถานที่อย่างเจาะจงและสามารถใช้เพื่อดึงข้อมูลเกี่ยวกับสถานที่ผ่านคำขอรายละเอียดสถานที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีอ้างอิงสถานที่ด้วยรหัสสถานที่
  • rating: คะแนนของสถานที่ตั้งแต่ 0.0 ถึง 5.0 โดยอิงตามรีวิวจากผู้ใช้ที่รวบรวม
  • reviews อาร์เรย์ของรีวิวไม่เกิน 5 รายการ การตรวจสอบแต่ละครั้งประกอบด้วยองค์ประกอบหลายอย่าง ดังนี้
    • aspects[] มีอาร์เรย์ของออบเจ็กต์ PlaceAspectRating โดยแต่ละรายการจะให้คะแนนแอตทริบิวต์เดียวของสถานประกอบการ ระบบจะถือว่าออบเจ็กต์แรกในอาร์เรย์เป็นแง่มุมหลัก PlaceAspectRating แต่ละรายการมีคำจำกัดความดังนี้
      • type ชื่อของด้านที่กําลังให้คะแนน ระบบรองรับประเภทต่อไปนี้ appeal, atmosphere, decor, facilities, food, overall, quality และ service
      • rating คะแนนของผู้ใช้สำหรับแง่มุมนี้โดยเฉพาะ โดยคะแนนมีตั้งแต่ 0 ถึง 3
    • author_name ชื่อผู้ใช้ที่ส่งรีวิว รีวิวที่ไม่ระบุตัวตนจะระบุแหล่งที่มาว่า "ผู้ใช้ Google" หากตั้งค่าพารามิเตอร์ภาษาไว้ วลี "ผู้ใช้ Google" จะแสดงสตริงที่แปลแล้ว
    • author_url URL ไปยังโปรไฟล์ Google+ ของผู้ใช้ หากมี
    • language รหัสภาษา IETF ที่ระบุภาษาที่ใช้ในรีวิวของผู้ใช้ ช่องนี้มีเฉพาะแท็กภาษาหลักเท่านั้น โดยไม่มีแท็กรองที่ระบุประเทศหรือภูมิภาค เช่น รีวิวภาษาอังกฤษทั้งหมดติดแท็กเป็น "en" ไม่ใช่ "en-AU" หรือ "en-UK" และอื่นๆ
    • rating คะแนนโดยรวมของผู้ใช้สำหรับสถานที่นี้ ค่านี้เป็นจำนวนเต็มตั้งแต่ 1 ถึง 5
    • text รีวิวของผู้ใช้ เมื่อรีวิวสถานที่ด้วย Google Places รีวิวแบบข้อความจะถือเป็นตัวเลือก ดังนั้นช่องนี้จึงอาจว่างเปล่า
  • types อาร์เรย์ของประเภทสำหรับสถานที่นี้ (เช่น ["political", "locality"] หรือ ["restaurant", "lodging"]) อาร์เรย์นี้อาจมีหลายค่าหรืออาจว่างเปล่า เราอาจเปิดตัวค่าใหม่โดยไม่แจ้งให้ทราบล่วงหน้า ดูรายการประเภทที่รองรับ
  • url: URL ของหน้าอย่างเป็นทางการของ Google สำหรับสถานที่นี้ หน้านี้เป็นหน้าของ Google ที่มีข้อมูลที่พร้อมใช้งานที่ดีที่สุดเกี่ยวกับสถานที่ แอปพลิเคชันต้องลิงก์หรือฝังหน้านี้ในหน้าจอที่แสดงผลการค้นหาโดยละเอียดเกี่ยวกับสถานที่แก่ผู้ใช้
  • vicinity: ที่อยู่แบบย่อของสถานที่ ซึ่งรวมถึงชื่อถนน เลขที่ และสถานที่ตั้ง แต่ไม่มีจังหวัด/รัฐ รหัสไปรษณีย์ หรือประเทศ เช่น สำนักงานของ Google ในซิดนีย์ ออสเตรเลียมีค่า vicinity เป็น 5/48 Pirrama Road, Pyrmont ระบบจะแสดงพร็อพเพอร์ตี้ vicinity เฉพาะสําหรับการค้นหาในพื้นที่เท่านั้น
  • website แสดงเว็บไซต์ที่เชื่อถือได้ของสถานที่นี้ เช่น หน้าแรกของธุรกิจ

หมายเหตุ: การให้คะแนนแบบหลายมิติอาจไม่พร้อมใช้งานในบางพื้นที่ หากมีรีวิวน้อยเกินไป การตอบกลับแบบละเอียดจะมีคะแนนเดิมในรูปแบบ 0.0 ถึง 5.0 (หากมี) หรือไม่มีคะแนนเลย

การอ้างอิงสถานที่ด้วยรหัสสถานที่

รหัสสถานที่เป็นการอ้างอิงที่ไม่ซ้ำกันสำหรับสถานที่บน Google Maps รหัสสถานที่มีให้บริการสำหรับสถานที่ส่วนใหญ่ รวมถึงธุรกิจ จุดสังเกต สวนสาธารณะ และทางแยก

หากต้องการใช้รหัสสถานที่ในแอป คุณต้องค้นหารหัสก่อน ซึ่งจะอยู่ใน PlaceResult ของคำขอค้นหาสถานที่หรือรายละเอียด จากนั้นคุณก็ใช้รหัสสถานที่นี้เพื่อค้นหารายละเอียดสถานที่ได้

รหัสสถานที่ได้รับการยกเว้นจากข้อจำกัดการแคชที่ระบุไว้ในส่วนที่ 3.2.3(ข) ของข้อกำหนดในการให้บริการของ Google Maps Platform คุณจึงจัดเก็บค่ารหัสสถานที่ไว้ใช้ภายหลังได้ ดูแนวทางปฏิบัติแนะนำเมื่อจัดเก็บรหัสสถานที่ได้ที่ภาพรวมรหัสสถานที่

var map;

function initialize() {
  // Create a map centered in Pyrmont, Sydney (Australia).
  map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: -33.8666, lng: 151.1958},
    zoom: 15
  });

  // Search for Google's office in Australia.
  var request = {
    location: map.getCenter(),
    radius: '500',
    query: 'Google Sydney'
  };

  var service = new google.maps.places.PlacesService(map);
  service.textSearch(request, callback);
}

// Checks that the PlacesServiceStatus is OK, and adds a marker
// using the place ID and location from the PlacesService.
function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    var marker = new google.maps.Marker({
      map: map,
      place: {
        placeId: results[0].place_id,
        location: results[0].geometry.location
      }
    });
  }
}

google.maps.event.addDomListener(window, 'load', initialize);

รูปภาพสถานที่

ฟีเจอร์รูปภาพสถานที่ช่วยให้คุณเพิ่มเนื้อหารูปภาพคุณภาพสูงลงในเว็บไซต์ได้ บริการรูปภาพช่วยให้คุณเข้าถึงรูปภาพหลายล้านรูปที่จัดเก็บไว้ในฐานข้อมูล Places และ Google+ Local เมื่อคุณรับข้อมูลสถานที่โดยใช้คำขอรายละเอียดสถานที่ ระบบจะแสดงข้อมูลอ้างอิงรูปภาพสำหรับเนื้อหารูปภาพที่เกี่ยวข้อง คำขอการค้นหาใกล้เคียงและการค้นหาข้อความจะแสดงรูปภาพอ้างอิงรูปเดียวต่อสถานที่ด้วย หากเกี่ยวข้อง เมื่อใช้บริการ Photos คุณจะเข้าถึงรูปภาพที่อ้างอิงและปรับขนาดรูปภาพให้เหมาะสมกับแอปพลิเคชันของคุณได้

ระบบจะแสดงผลอาร์เรย์ออบเจ็กต์ PlacePhoto เป็นส่วนหนึ่งของออบเจ็กต์ PlaceResult สำหรับคำขอ getDetails(), textSearch() หรือ nearbySearch() ทั้งหมดที่ส่งไปยัง PlacesService

หมายเหตุ: จำนวนรูปภาพที่แสดงจะแตกต่างกันไปตามคำขอ

  • การค้นหาใกล้เคียงหรือการค้นหาข้อความจะแสดงผลออบเจ็กต์ PlacePhoto รายการที่มากที่สุด
  • คำขอรายละเอียดจะแสดงผลออบเจ็กต์ PlacePhoto ได้สูงสุด 10 รายการ

คุณสามารถขอ URL ของรูปภาพที่เชื่อมโยงได้โดยเรียกใช้เมธอด PlacePhoto.getUrl() และส่งออบเจ็กต์ PhotoOptions ที่ถูกต้อง ออบเจ็กต์ PhotoOptions ช่วยให้คุณระบุความสูงและความกว้างสูงสุดที่ต้องการของรูปภาพได้ หากคุณระบุค่าสำหรับทั้ง maxHeight และ maxWidth บริการรูปภาพจะปรับขนาดรูปภาพให้เล็กลงโดยรักษาสัดส่วนภาพเดิม

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

function createPhotoMarker(place) {
  var photos = place.photos;
  if (!photos) {
    return;
  }

  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location,
    title: place.name,
    icon: photos[0].getUrl({maxWidth: 35, maxHeight: 35})
  });
}

รูปภาพที่บริการ Photos แสดงผลมาจากแหล่งที่มาที่หลากหลาย ซึ่งรวมถึงรูปภาพจากเจ้าของธุรกิจและรูปภาพที่ผู้ใช้ส่งเข้ามา ในกรณีส่วนใหญ่ คุณสามารถใช้รูปภาพเหล่านี้ได้โดยไม่ต้องระบุแหล่งที่มา หรือจะมีแหล่งที่มาที่จําเป็นรวมอยู่ในรูปภาพ อย่างไรก็ตาม หากองค์ประกอบ photo ที่แสดงผลมีค่าในช่อง html_attributions คุณต้องใส่การระบุแหล่งที่มาเพิ่มเติมในแอปพลิเคชันทุกที่ที่คุณแสดงรูปภาพ