บริการการเข้ารหัสพิกัดภูมิศาสตร์

หมายเหตุ: ไลบรารีฝั่งเซิร์ฟเวอร์
นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (EEA)

ภาพรวม

การเข้ารหัสพิกัดภูมิศาสตร์คือกระบวนการแปลงที่อยู่ (เช่น "1600 Amphitheatre Parkway, Mountain View, CA") เป็นพิกัดทางภูมิศาสตร์ (เช่น ละติจูด 37.423021 และลองจิจูด -122.083739) ซึ่งคุณสามารถใช้เพื่อวางเครื่องหมายหรือตำแหน่งบนแผนที่ได้

การเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับคือกระบวนการแปลงพิกัดทางภูมิศาสตร์เป็นที่อยู่ที่มนุษย์อ่านได้ (ดูการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ (การค้นหาที่อยู่))

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

Maps JavaScript API มีคลาส Geocoder สำหรับการเข้ารหัสพิกัดภูมิศาสตร์และการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับแบบไดนามิกจากข้อมูลที่ผู้ใช้ป้อน หากต้องการเข้ารหัสพิกัดภูมิศาสตร์ที่อยู่แบบคงที่และทราบแล้ว ให้ดูเว็บเซอร์วิสการเข้ารหัสพิกัดภูมิศาสตร์แทน

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

ก่อนใช้บริการการเข้ารหัสพิกัดภูมิศาสตร์ใน Maps JavaScript API ให้ตรวจสอบก่อนว่าได้เปิดใช้ Geocoding API ในคอนโซล Google Cloud ในโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สำหรับ Maps JavaScript API

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

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

ราคาและนโยบาย

ราคา

ดูข้อมูลเกี่ยวกับนโยบายราคาและการใช้งานสำหรับบริการการเข้ารหัสพิกัดภูมิศาสตร์ JavaScript ได้ที่การใช้งานและการเรียกเก็บเงินสำหรับ Geocoding API

นโยบาย

การใช้บริการ Geocoding ต้องเป็นไปตามนโยบายสำหรับ Geocoding API

คำขอการเข้ารหัสพิกัดภูมิศาสตร์

การเข้าถึงบริการ Geocoding เป็นแบบอะซิงโครนัส ซึ่งต้องมีการเรียกไปยังเซิร์ฟเวอร์ภายนอก ด้วยเหตุนี้ เมธอด geocode จึงแสดงผล Promise ที่จะได้รับการแก้ไขเมื่อคำขอเสร็จสมบูรณ์ เมื่อแก้ไขแล้ว คุณจะใช้ .then() หรือ await เพื่อจัดการการตอบกลับได้

re

คุณเข้าถึงบริการการเข้ารหัสพิกัดภูมิศาสตร์ของ Google Maps API ภายในโค้ดได้โดยใช้ออบเจ็กต์คอนสตรัคเตอร์ google.maps.Geocoder เมธอด Geocoder.geocode() จะเริ่มส่งคำขอไปยังบริการเข้ารหัสพิกัดภูมิศาสตร์ โดยส่งออบเจ็กต์นิยามคู่ GeocoderRequest ที่มีคำที่ป้อนและเมธอด Callback เพื่อดำเนินการเมื่อได้รับการตอบกลับ

ออบเจ็กต์นิยามคู่ GeocoderRequest มีช่องต่อไปนี้

{
 address: string,
 location: LatLng,
 placeId: string,
 bounds: LatLngBounds,
 componentRestrictions: GeocoderComponentRestrictions,
 region: string
}

พารามิเตอร์ที่จำเป็น: คุณต้องระบุฟิลด์ต่อไปนี้เพียงฟิลด์เดียวเท่านั้น

  • address — ที่อยู่ที่ต้องการเข้ารหัสพิกัดภูมิศาสตร์
         หรือ
    location — LatLng (หรือ LatLngLiteral) ที่คุณต้องการรับที่อยู่ที่ใกล้ที่สุดและมนุษย์อ่านได้ โปรแกรมเข้ารหัสพิกัดภูมิศาสตร์จะทำการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ ดูข้อมูลเพิ่มเติมได้ที่การเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ
         หรือ
    placeId — รหัสสถานที่ของสถานที่ที่คุณต้องการ รับที่อยู่ที่มนุษย์อ่านได้ซึ่งใกล้ที่สุด ดูข้อมูลเพิ่มเติมเกี่ยวกับการดึงข้อมูลที่อยู่สำหรับรหัสสถานที่

พารามิเตอร์ที่ไม่บังคับ

  • bounds — LatLngBounds ที่จะให้น้ำหนักผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์อย่างชัดเจนยิ่งขึ้น พารามิเตอร์ bounds จะส่งผลต่อผลลัพธ์จากโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์เท่านั้น แต่จะไม่จำกัดผลลัพธ์โดยสมบูรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการให้น้ำหนักวิวพอร์ต ด้านล่าง
  • componentRestrictions - ใช้เพื่อจำกัดผลการค้นหาให้อยู่ในพื้นที่ที่เฉพาะเจาะจง ดูข้อมูลเพิ่มเติมเกี่ยวกับการกรองคอมโพเนนต์ด้านล่าง
  • region — รหัสภูมิภาค ซึ่งระบุเป็นแท็กย่อยของภูมิภาค Unicode แบบ 2 อักขระ (ไม่ใช่ตัวเลข) ในกรณีส่วนใหญ่ แท็กเหล่านี้จะแมปโดยตรงกับค่า ccTLD ("โดเมนระดับบนสุด") ที่คุ้นเคยซึ่งมีอักขระ 2 ตัว พารามิเตอร์ region จะส่งผลต่อผลลัพธ์จากโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์เท่านั้น แต่จะไม่จำกัดผลลัพธ์โดยสมบูรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการให้น้ำหนักรหัสภูมิภาคด้านล่าง
  • extraComputations — ค่าเดียวที่อนุญาตสำหรับพารามิเตอร์นี้คือ ADDRESS_DESCRIPTORS ดูรายละเอียดเพิ่มเติมได้ที่ คำอธิบายที่อยู่
  • fulfillOnZeroResults — ทำตามสัญญาเกี่ยวกับสถานะ ZERO_RESULT ในการตอบกลับ ซึ่งอาจเป็นสิ่งที่ต้องการเนื่องจากแม้ว่าผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์จะเป็น 0 แต่ก็อาจยังมีช่องระดับการตอบกลับเพิ่มเติมที่แสดงผล ดูรายละเอียดเพิ่มเติมได้ที่ ดำเนินการตามคำขอเมื่อไม่มีผลลัพธ์

การตอบกลับการเข้ารหัสพิกัดภูมิศาสตร์

บริการเข้ารหัสพิกัดภูมิศาสตร์ต้องใช้เมธอด Callback เพื่อดำเนินการเมื่อดึงข้อมูลผลลัพธ์ของโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์ Callback นี้ควรส่งพารามิเตอร์ 2 รายการเพื่อเก็บ results และรหัส status ตามลำดับ

ผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์

ออบเจ็กต์ GeocoderResult แสดงผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์รายการเดียว คำขอรหัสพิกัดภูมิศาสตร์อาจแสดงผลออบเจ็กต์ผลลัพธ์หลายรายการ ดังนี้

results[]: {
 types[]: string,
 formatted_address: string,
 address_components[]: {
   short_name: string,
   long_name: string,
   postcode_localities[]: string,
   types[]: string
 },
 partial_match: boolean,
 place_id: string,
 postcode_localities[]: string,
 geometry: {
   location: LatLng,
   location_type: GeocoderLocationType
   viewport: LatLngBounds,
   bounds: LatLngBounds
 }
}

โดยช่องเหล่านี้มีคำอธิบายดังนี้

  • types[] คืออาร์เรย์ที่ระบุประเภทที่อยู่ของผลลัพธ์ที่แสดงผล อาร์เรย์นี้มีชุดแท็กอย่างน้อย 0 รายการที่ระบุประเภทของฟีเจอร์ที่แสดงในผลลัพธ์ ตัวอย่างเช่น รหัสพิกัดภูมิศาสตร์ของ "Chicago" จะแสดงผล "locality" ซึ่งบ่งบอกว่า "Chicago" เป็นเมือง และแสดงผล "political" ซึ่งบ่งบอกว่าเป็นหน่วยงานทางการเมือง ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทที่อยู่และประเภทคอมโพเนนต์ที่อยู่ด้านล่าง
  • formatted_address คือสตริงที่มีที่อยู่ที่มนุษย์อ่านได้ของสถานที่ตั้งนี้

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

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

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

  • address_components[] คืออาร์เรย์ที่มีคอมโพเนนต์แยกต่างหากที่ใช้กับที่อยู่นี้

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

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

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

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

    ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทที่อยู่และประเภทคอมโพเนนต์ที่อยู่ด้านล่าง

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

    การจับคู่บางส่วนมักเกิดขึ้นกับที่อยู่ซึ่งไม่มีอยู่จริงในท้องถิ่นที่คุณส่งมาในคำขอ ระบบอาจแสดงผลการจับคู่บางส่วนด้วยเมื่อคำขอตรงกับสถานที่ตั้ง 2 แห่งขึ้นไปในท้องถิ่นเดียวกัน เช่น "Hillpar St, Bristol, UK" จะแสดงผลการจับคู่บางส่วนสำหรับทั้ง Henry Street และ Henrietta Street โปรดทราบว่าหากคำขอมีคอมโพเนนต์ที่อยู่ซึ่งสะกดผิด บริการเข้ารหัสพิกัดภูมิศาสตร์อาจแนะนำที่อยู่อื่น คำแนะนำที่เรียกใช้ด้วยวิธีนี้จะได้รับการทำเครื่องหมายว่าตรงกันบางส่วนด้วย

  • place_idคือตัวระบุที่ไม่ซ้ำกันของสถานที่ ซึ่งสามารถใช้กับ Google APIs อื่นๆ ได้ ตัวอย่างเช่น คุณสามารถใช้ place_id กับไลบรารี Google Places API เพื่อดูรายละเอียดของธุรกิจในพื้นที่ เช่น หมายเลขโทรศัพท์ เวลาทำการ รีวิวจากผู้ใช้ และอื่นๆ ดูภาพรวมรหัสสถานที่
  • postcode_localities[] คืออาร์เรย์ที่แสดงท้องถิ่นทั้งหมดที่อยู่ในรหัสไปรษณีย์ และจะแสดงเมื่อผลลัพธ์เป็นรหัสไปรษณีย์ที่มีท้องถิ่นหลายแห่งเท่านั้น
  • geometry มีข้อมูลต่อไปนี้

    • location มีค่าละติจูดและลองจิจูดที่เข้ารหัสพิกัดภูมิศาสตร์ โปรดทราบว่าเราจะแสดงผลตำแหน่งนี้เป็นออบเจ็กต์ LatLng ไม่ใช่สตริงที่จัดรูปแบบ
    • location_type จะจัดเก็บข้อมูลเพิ่มเติมเกี่ยวกับสถานที่ตั้งที่ระบุ ค่าที่รองรับมีดังนี้
      • ROOFTOP บ่งชี้ว่าผลลัพธ์ที่แสดงผลแสดงถึงรหัสพิกัดภูมิศาสตร์ที่แม่นยำ
      • RANGE_INTERPOLATED ระบุว่าผลลัพธ์ที่แสดงเป็นค่าประมาณ (โดยปกติจะอยู่บนถนน) ที่ประมาณค่าในช่วงระหว่างจุดที่แน่นอน 2 จุด (เช่น ทางแยก) โดยทั่วไปแล้ว ระบบจะแสดงผลลัพธ์ที่ประมาณค่าในช่วงเมื่อไม่มีรหัสพิกัดภูมิศาสตร์ระดับหลังคาสำหรับที่อยู่
      • GEOMETRIC_CENTER บ่งบอกว่าผลลัพธ์ที่แสดงเป็นศูนย์กลางทางเรขาคณิตของผลลัพธ์ เช่น เส้นประกอบ (เช่น ถนน) หรือรูปหลายเหลี่ยม (ภูมิภาค)
      • APPROXIMATE บ่งบอกว่าผลลัพธ์ที่แสดงเป็นค่าประมาณ

    • viewport จะจัดเก็บวิวพอร์ตที่แนะนำสำหรับผลลัพธ์ที่แสดงผล
    • bounds (แสดงผลหรือไม่ก็ได้) จะจัดเก็บ LatLngBounds ซึ่งมีผลลัพธ์ที่แสดงผลได้ครบถ้วน โปรดทราบว่าขอบเขตเหล่านี้อาจไม่ตรงกับวิวพอร์ตที่แนะนำ (เช่น ซานฟรานซิสโกรวมหมู่เกาะฟารัลลอน ซึ่งในทางเทคนิคเป็นส่วนหนึ่งของเมือง แต่ไม่ควรแสดงในวิวพอร์ต)

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

ประเภทที่อยู่และประเภทคอมโพเนนต์ที่อยู่

อาร์เรย์ types[] ใน GeocoderResult ในการตอบกลับจะระบุประเภทที่อยู่ ตัวอย่างประเภทที่อยู่ ได้แก่ ที่อยู่ตามท้องถนน ประเทศ หรือหน่วยงานทางการเมือง อาร์เรย์ types ใน GeocoderAddressComponent จะระบุประเภทของแต่ละส่วนของที่อยู่ ตัวอย่างเช่น หมายเลขถนนหรือประเทศ

ที่อยู่อาจมีได้หลายประเภท ประเภทอาจถือเป็น "แท็ก" ตัวอย่างเช่น เมืองหลายแห่งมีการติดแท็กด้วยประเภท political และ locality

ระบบรองรับประเภทต่อไปนี้และแสดงผลทั้งในอาร์เรย์ประเภทที่อยู่และอาร์เรย์ประเภทคอมโพเนนต์ที่อยู่

ประเภทที่อยู่ คำอธิบาย
street_address ที่อยู่ที่แน่นอน
route เส้นทางที่มีชื่อ (เช่น "US 101")
intersection ทางแยกหลัก ซึ่งมักเป็นทางแยกของถนนสายหลัก 2 สาย
political หน่วยงานทางการเมือง โดยปกติแล้ว ประเภทนี้จะระบุรูปหลายเหลี่ยมของการปกครองพลเรือนบางประเภท
country หน่วยงานทางการเมืองระดับชาติ และโดยทั่วไปจะเป็นประเภทลำดับสูงสุดที่โปรแกรมเข้ารหัสพิกัดภูมิศาสตร์แสดงผล
administrative_area_level_1 หน่วยงานพลเรือนระดับที่ 1 ที่ต่ำกว่าระดับประเทศ ในสหรัฐอเมริกา การบริหารระดับเหล่านี้คือรัฐ บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้ ในกรณีส่วนใหญ่ ชื่อย่อของ administrative_area_level_1 จะตรงกับเขตย่อยตามมาตรฐาน ISO 3166-2 และรายการอื่นๆ ที่ใช้กันอย่างแพร่หลาย อย่างไรก็ตาม เราไม่รับประกันว่าจะเป็นเช่นนี้เสมอไป เนื่องจากผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์ของเราอิงตามสัญญาณและข้อมูลตำแหน่งที่หลากหลาย
administrative_area_level_2 หน่วยงานพลเรือนระดับที่ 2 ที่ต่ำกว่าระดับประเทศ ในสหรัฐอเมริกา การบริหารระดับเหล่านี้คือเคาน์ตี บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
administrative_area_level_3 หน่วยงานพลเรือนระดับที่ 3 ที่ต่ำกว่าระดับประเทศ ประเภทนี้ระบุถึงเขตการปกครองย่อย บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
administrative_area_level_4 หน่วยงานพลเรือนระดับที่ 4 ที่ต่ำกว่าระดับประเทศ ประเภทนี้ระบุถึงเขตการปกครองย่อย บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
administrative_area_level_5 หน่วยงานพลเรือนระดับที่ 5 ที่ต่ำกว่าระดับประเทศ ประเภทนี้ระบุถึงเขตการปกครองย่อย บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
administrative_area_level_6 หน่วยงานพลเรือนระดับที่ 6 ที่ต่ำกว่าระดับประเทศ ประเภทนี้ระบุถึงเขตการปกครองย่อย บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
administrative_area_level_7 หน่วยงานพลเรือนระดับที่ 7 ที่ต่ำกว่าระดับประเทศ ประเภทนี้ระบุถึงเขตการปกครองย่อย บางประเทศไม่ได้ใช้การบริหารระดับเหล่านี้
colloquial_area ชื่ออื่นที่ใช้กันโดยทั่วไปสำหรับเอนทิตี
locality หน่วยงานทางการเมืองของเมืองหรือเทศบาลที่จัดตั้งขึ้น
sublocality หน่วยงานพลเรือนระดับที่ 1 ที่ต่ำกว่าระดับท้องถิ่น สถานที่บางแห่งอาจได้รับประเภทเพิ่มเติมอย่างใดอย่างหนึ่งต่อไปนี้ sublocality_level_1 ถึง sublocality_level_5 ระดับท้องถิ่นย่อยแต่ละระดับเป็นหน่วยงานพลเรือน ตัวเลขที่มากขึ้นหมายถึงพื้นที่ทางภูมิศาสตร์ที่เล็กลง
neighborhood ย่านที่มีชื่อ
premise สถานที่ที่มีชื่อ ซึ่งมักเป็นอาคารหรือกลุ่มอาคารที่มีชื่อร่วมกัน
subpremise เอนทิตีที่ระบุที่อยู่ได้ซึ่งอยู่ต่ำกว่าระดับสถานที่ตั้ง เช่น อพาร์ตเมนต์ ยูนิต หรือห้องชุด
plus_code การอ้างอิงตำแหน่งที่เข้ารหัส ซึ่งได้มาจากละติจูดและลองจิจูด Plus Code สามารถใช้แทนที่อยู่ได้ในสถานที่ที่ไม่มีที่อยู่ (อาคารไม่มีหมายเลขหรือถนนไม่มีชื่อ) ดูรายละเอียดได้ที่ https://plus.codes
postal_code รหัสไปรษณีย์ที่ใช้ในการจ่าหน้าจดหมายภายในประเทศ
natural_feature ลักษณะทางธรรมชาติที่โดดเด่น
airport สนามบิน
park สวนสาธารณะที่มีชื่อ
point_of_interest จุดที่น่าสนใจที่มีชื่อ โดยปกติแล้ว "POI" เหล่านี้จะเป็นสถานที่โดดเด่นในท้องถิ่นซึ่งไม่เข้ากับหมวดหมู่อื่นๆ เช่น "ตึกเอ็มไพร์สเตต" หรือ "หอไอเฟล"

รายการประเภทที่ว่างเปล่าบ่งชี้ว่าไม่มีประเภทที่รู้จักสำหรับองค์ประกอบที่อยู่หนึ่งๆ (เช่น Lieu-dit ในฝรั่งเศส)

นอกจากประเภทข้างต้นแล้ว คอมโพเนนต์ที่อยู่อาจมีประเภทด้านล่างด้วย

หมายเหตุ: รายการนี้ไม่ได้ครอบคลุมข้อมูลทั้งหมดและอาจเปลี่ยนแปลงได้

นอกจากประเภทข้างต้นแล้ว คอมโพเนนต์ที่อยู่อาจมีประเภทที่ระบุไว้ด้านล่างด้วย

ประเภทองค์ประกอบที่อยู่ คำอธิบาย
floor ชั้นของที่อยู่อาคาร
establishment โดยปกติแล้วจะเป็นสถานที่ที่ยังไม่ได้จัดหมวดหมู่
landmark สถานที่ใกล้เคียงที่ใช้เป็นข้อมูลอ้างอิงเพื่อช่วยในการนำทาง
point_of_interest จุดที่น่าสนใจที่มีชื่อ
parking ที่จอดรถหรืออาคารจอดรถ
post_box ตู้ไปรษณีย์ที่เฉพาะเจาะจง
postal_town การจัดกลุ่มพื้นที่ทางภูมิศาสตร์ เช่น locality และ sublocality ซึ่งใช้สำหรับที่อยู่จัดส่งในบางประเทศ
room ห้องของที่อยู่อาคาร
street_number เลขที่ถนนที่แน่นอน
bus_station, train_station และ transit_station ตำแหน่งของป้ายรถประจำทาง รถไฟ หรือขนส่งสาธารณะ

รหัสสถานะ

โค้ด status อาจแสดงผลค่าใดค่าหนึ่งต่อไปนี้

  • "OK" บ่งบอกว่าไม่มีข้อผิดพลาดเกิดขึ้น ระบบแยกวิเคราะห์ที่อยู่เรียบร้อยแล้ว และแสดงผลรหัสพิกัดภูมิศาสตร์อย่างน้อย 1 รายการ
  • "ZERO_RESULTS" บ่งชี้ว่าการเข้ารหัสพิกัดภูมิศาสตร์สำเร็จ แต่ไม่แสดงผลลัพธ์ กรณีนี้อาจเกิดขึ้นหากโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์ได้รับ address ที่ไม่มีอยู่
  • "OVER_QUERY_LIMIT" บ่งบอกว่าคุณใช้พื้นที่เก็บข้อมูลเกินโควต้า
  • "REQUEST_DENIED" บ่งบอกว่าคำขอของคุณถูกปฏิเสธ หน้าเว็บไม่ได้รับอนุญาตให้ใช้โปรแกรมเข้ารหัสพิกัดภูมิศาสตร์
  • โดยทั่วไปแล้ว "INVALID_REQUEST" บ่งชี้ว่าไม่มีการค้นหา (address, components หรือ latlng)
  • "UNKNOWN_ERROR" บ่งชี้ว่าประมวลผลคำขอไม่ได้เนื่องจากข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ คำขออาจสำเร็จหากคุณลองอีกครั้ง
  • "ERROR" บ่งชี้ว่าคำขอหมดเวลาหรือมีปัญหาในการติดต่อเซิร์ฟเวอร์ของ Google คำขออาจสำเร็จหากคุณลองอีกครั้ง

ตัวอย่างการเข้ารหัสพิกัดภูมิศาสตร์

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

TypeScript

async function geocode(request: google.maps.GeocoderRequest) {
    clear();
    const { LatLng } = await google.maps.importLibrary('core');

    try {
        const response = await geocoder.geocode(request);
        const { results } = response;

        innerMap.setCenter(results[0].geometry.location);
        marker.position = new LatLng(results[0].geometry.location);
        mapElement.append(marker);
        responseDiv.style.display = 'block';
        responsePre.innerText = JSON.stringify(response, null, 2);
        return results;
    } catch (e) {
        alert(
            'Geocode was not successful for the following reason: ' + String(e)
        );
    }
}

JavaScript

async function geocode(request) {
    clear();
    const { LatLng } = await google.maps.importLibrary('core');

    try {
        const response = await geocoder.geocode(request);
        const { results } = response;

        innerMap.setCenter(results[0].geometry.location);
        marker.position = new LatLng(results[0].geometry.location);
        mapElement.append(marker);
        responseDiv.style.display = 'block';
        responsePre.innerText = JSON.stringify(response, null, 2);
        return results;
    } catch (e) {
        alert(
            'Geocode was not successful for the following reason: ' + String(e)
        );
    }
}

ดูตัวอย่างที่เสร็จสมบูรณ์

การให้น้ำหนักวิวพอร์ต

คุณสามารถสั่งให้บริการเข้ารหัสพิกัดภูมิศาสตร์แสดงผลลัพธ์ภายในวิวพอร์ตที่ระบุ (แสดงเป็นกรอบล้อมรอบ) โดยตั้งค่าพารามิเตอร์ bounds ภายในออบเจ็กต์นิยามคู่ GeocoderRequest เพื่อกำหนดขอบเขตของวิวพอร์ตนี้ โปรดทราบว่าการให้น้ำหนักพิเศษจะเลือกผลลัพธ์ภายในขอบเขตเท่านั้น หากมีผลลัพธ์ที่เกี่ยวข้องมากกว่าอยู่นอกขอบเขตเหล่านี้ ระบบอาจรวมผลลัพธ์เหล่านั้นไว้ด้วย

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

{
  "types":["locality","political"],
  "formatted_address":"Winnetka, IL, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["locality","political"]
  },{
    "long_name":"Illinois",
    "short_name":"IL",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "geometry":{
    "location":[ -87.7417070, 42.1083080],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q"
}

อย่างไรก็ตาม การระบุพารามิเตอร์ bounds ที่กำหนดกรอบล้อมรอบสำหรับซานเฟอร์นันโดแวลลีย์ในลอสแอนเจลิสจะทำให้รหัสพิกัดภูมิศาสตร์นี้แสดงผลย่านที่ชื่อ "วินเน็ตกา" ในสถานที่ตั้งนั้น

{
  "types":["sublocality","political"],
  "formatted_address":"Winnetka, California, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["sublocality","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "types":["administrative_area_level_3","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "types":["administrative_area_level_2","political"]
  },{
    "long_name":"California",
    "short_name":"CA",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "geometry":{
    "location": [34.213171,-118.571022],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ"
}

การให้น้ำหนักพิเศษกับรหัสภูมิภาค

คุณสามารถตั้งค่าบริการเข้ารหัสพิกัดภูมิศาสตร์ให้แสดงผลลัพธ์ที่ให้น้ำหนักไปทางภูมิภาคใดภูมิภาคหนึ่งโดยเฉพาะได้ โดยใช้พารามิเตอร์ region พารามิเตอร์นี้จะใช้รหัสภูมิภาคที่ระบุเป็นแท็กย่อยของภูมิภาค Unicode แบบ 2 อักขระ (ไม่ใช่ตัวเลข) แท็กเหล่านี้จะแมปโดยตรงกับค่า ccTLD ("โดเมนระดับบนสุด") 2 อักขระที่คุ้นเคย เช่น "uk" ใน "co.uk" เป็นต้น ในบางกรณี แท็ก region ยังรองรับรหัส ISO-3166-1 ซึ่งบางครั้งอาจแตกต่างจากค่า ccTLD (เช่น "GB" สำหรับ "Great Britain")

เมื่อใช้พารามิเตอร์ region

  • ระบุประเทศหรือภูมิภาคเพียงแห่งเดียว ระบบจะไม่สนใจค่าหลายค่า และอาจส่งผลให้คำขอล้มเหลว
  • ใช้แท็กย่อยของภูมิภาคที่มีอักขระ 2 ตัวเท่านั้น (รูปแบบ Unicode CLDR) ส่วนอินพุตอื่นๆ ทั้งหมดจะส่งผลให้เกิดข้อผิดพลาด
  • ระบบรองรับเฉพาะประเทศและภูมิภาคที่ระบุไว้ในรายละเอียดความครอบคลุมของ Google Maps Platform เท่านั้น

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

ตัวอย่างเช่น รหัสพิกัดภูมิศาสตร์สำหรับ "Toledo" จะแสดงผลลัพธ์นี้ เนื่องจากโดเมนเริ่มต้นสำหรับบริการเข้ารหัสพิกัดภูมิศาสตร์ตั้งค่าเป็นสหรัฐอเมริกา

{
  "types":["locality","political"],
  "formatted_address":"Toledo, OH, USA",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Ohio",
    "short_name":"OH",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw"
}

รหัสพิกัดภูมิศาสตร์สำหรับ "Toledo" ที่มีช่อง region ตั้งค่าเป็น 'es' (สเปน) จะแสดงผลลัพธ์เป็นเมืองในสเปน ดังนี้

{
  "types":["locality","political"],
  "formatted_address":"Toledo, España",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Toledo",
    "short_name":"TO",
    "types":["administrative_area_level_2","political"]
  },{
    "long_name":"Castilla-La Mancha",
    "short_name":"CM",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"España",
    "short_name":"ES",
    "types":["country","political"]
  }],
  "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y"
}

การกรองคอมโพเนนต์

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

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

ตัวกรองคอมโพเนนต์ประกอบด้วยรายการต่อไปนี้อย่างน้อย 1 รายการ

  • route ตรงกับชื่อแบบยาวหรือชื่อย่อของเส้นทาง
  • locality ตรงกับประเภทท้องถิ่นและท้องถิ่นย่อย
  • administrativeArea ตรงกับเขตบริหารทุกระดับ
  • postalCode จะจับคู่รหัสไปรษณีย์และคำนำหน้ารหัสไปรษณีย์
  • country ตรงกับชื่อประเทศหรือรหัสประเทศ 2 ตัวอักษรตามมาตรฐาน ISO 3166-1 หมายเหตุ: API เป็นไปตามมาตรฐาน ISO สำหรับการกำหนดประเทศ และการกรองจะทำงานได้ดีที่สุดเมื่อใช้รหัส ISO ที่เกี่ยวข้องของประเทศ

ตัวอย่างต่อไปนี้แสดงการใช้พารามิเตอร์ componentRestrictions เพื่อกรองตาม country และ postalCode

async function codeAddress(request: google.maps.GeocoderRequest) {
    clear();
    geocoder.geocode({
        componentRestrictions: {
            country: 'AU',
            postalCode: '2000'
        }
    })
    .then((result) => {
        const { results } = result;
        innerMap.setCenter(results[0].geometry.location);
        let marker = new google.maps.marker.AdvancedMarkerElement({
            map: innerMap,
            position: results[0].geometry.location
        });
    })
    .catch((e) => {
        alert('Geocode was not successful for the following reason: ' + e);
    });
};

ดำเนินการเมื่อไม่พบผลการค้นหา

สำหรับการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ ระบบจะยกเลิกสัญญาในวันที่ status=ZERO_RESULTS โดยค่าเริ่มต้น อย่างไรก็ตาม ระบบอาจยังคงป้อนข้อมูลในช่องระดับการตอบกลับเพิ่มเติมของ plus_code และ address_descriptor ในกรณีนี้ หากระบุค่าเป็น "จริง" สำหรับพารามิเตอร์ fulfillOnZeroResults ระบบจะป้อนข้อมูลในกรณีนี้ หากระบุค่าเป็น "จริง" สำหรับพารามิเตอร์ fulfillOnZeroResults ระบบจะไม่ละเมิดสัญญาและจะเข้าถึงช่องเพิ่มเติมเหล่านี้ได้จากสัญญาหากมี

ต่อไปนี้เป็นตัวอย่างลักษณะการทำงานนี้สำหรับละติจูด/ลองจิจูดในแอนตาร์กติกา แม้ว่าจะไม่มีผลลัพธ์การเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ แต่เรายังคงพิมพ์ Plus Code ได้ใน Promise หากตั้งค่า fulfillOnZeroResults=true

function addressDescriptorReverseGeocoding() {
  var latlng = new google.maps.LatLng(-75.290330, 38.653861);
  geocoder
    .geocode({
      'location': latlng,
      'fulfillOnZeroResults': true,
    })
    .then((response) => {
      console.log(response.plus_code);
    })
    .catch((error) => {
      window.alert(`Error: ${error}`);
    });
}

ตัวระบุที่อยู่

Address Descriptor มีข้อมูลเพิ่มเติมที่ช่วยอธิบายสถานที่ตั้งโดยใช้จุดสังเกตและพื้นที่ ดูเดโมคำอธิบายที่อยู่เพื่อสำรวจฟีเจอร์

คุณเปิดใช้คำอธิบายที่อยู่ได้โดยใช้พารามิเตอร์ extraComputations ใส่ extra_computations=ADDRESS_DESCRIPTORS ในคำขอการเข้ารหัสพิกัดภูมิศาสตร์ คำขอการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ หรือคำขอการเข้ารหัสพิกัดภูมิศาสตร์ของสถานที่ เพื่อรับข้อบ่งชี้ที่อยู่ในการตอบกลับ

ตัวอย่างในการเข้ารหัสพิกัดภูมิศาสตร์ของสถานที่

คำค้นหาต่อไปนี้มีที่อยู่ของสถานที่ในเดลี

function addressDescriptorPlaceIdLookup() {
  geocoder.geocode({
  geocoder.geocode({
    'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q',
    'extraComputations': ['ADDRESS_DESCRIPTORS']
    }, function(results, status) {
    if (status == 'OK') {
      console.log(results[0].address_descriptor);
    } else {
      window.alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

ตัวอย่างในการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ

คำค้นหาต่อไปนี้มีค่าละติจูด/ลองจิจูดสำหรับสถานที่ในเดลี

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(28.640964,77.235875);
      geocoder
        .geocode({
          'location': latlng,
          'extraComputations': ["ADDRESS_DESCRIPTORS"],
        })
        .then((response) => {
          console.log(response.address_descriptor);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

ตัวอย่างคำอธิบายที่อยู่

ตัวอย่าง address_descriptor มีดังนี้

  {
    "address_descriptor" : {
       "areas" : [
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Turkman Gate"
             },
             "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs"
          },
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Chandni Chowk"
             },
             "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI"
          },
          {
             "containment" : "NEAR",
             "display_name" : {
                "language_code" : "en",
                "text" : "Katar Ganj"
             },
             "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY"
          }
       ],
       "landmarks" : [
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delite Cinema"
             },
             "straight_line_distance_meters" : 29.9306755065918,
             "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM",
             "travel_distance_meters" : 418.7794799804688,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "establishment", "movie_theater", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "YES Bank"
             },
             "straight_line_distance_meters" : 66.83731079101562,
             "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ",
             "travel_distance_meters" : 489.0340270996094,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "UCO Bank"
             },
             "straight_line_distance_meters" : 25.38849639892578,
             "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM",
             "travel_distance_meters" : 403.2246398925781,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delhi By Cycle Meeting Point"
             },
             "straight_line_distance_meters" : 44.02867126464844,
             "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM",
             "travel_distance_meters" : 97.41281890869141,
             "spatial_relationship" : "AROUND_THE_CORNER",
             "types" : [
                "establishment",
                "point_of_interest",
                "tourist_attraction",
                "travel_agency"
             ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Axis Bank Branch"
             },
             "straight_line_distance_meters" : 102.3495178222656,
             "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4",
             "travel_distance_meters" : 330.8566284179688,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          }
       ]
    }
  }

มีอาร์เรย์ 2 รายการในออบเจ็กต์ address_descriptor แต่ละรายการ ได้แก่ landmarks และ areas อาร์เรย์ landmarks มีผลลัพธ์สูงสุด 5 รายการที่จัดอันดับตามความเกี่ยวข้องโดยพิจารณาจากความใกล้เคียงกับพิกัดที่ขอ ความแพร่หลายของจุดสังเกต และระดับการมองเห็น ผลลัพธ์ของจุดสังเกตแต่ละรายการจะมีค่าต่อไปนี้

  • place_id คือรหัสสถานที่ของผลลัพธ์สถานที่สำคัญ ดูภาพรวมรหัสสถานที่
  • display_name คือชื่อที่แสดงของจุดสังเกตและมี language_code และ text
  • straight_line_distance_meters คือระยะทางแบบจุดต่อจุดเป็นเมตรระหว่างพิกัดอินพุตและผลลัพธ์ของจุดสังเกต
  • travel_distance_meters คือระยะทางเป็นเมตรที่เดินทางโดยใช้เครือข่ายถนน (ไม่สนใจข้อจำกัดของถนน) ระหว่างพิกัดอินพุตกับผลลัพธ์ของจุดสังเกต
  • spatial_relationship คือความสัมพันธ์โดยประมาณระหว่างพิกัดอินพุตและผลลัพธ์ของจุดสังเกต
    • "NEAR" คือความสัมพันธ์เริ่มต้นเมื่อไม่มีความสัมพันธ์ใดต่อไปนี้ที่เกี่ยวข้อง
    • "WITHIN" เมื่อพิกัดอินพุตอยู่ภายในขอบเขตของโครงสร้างที่เชื่อมโยงกับจุดสังเกต
    • "BESIDE" เมื่อพิกัดอินพุตอยู่ติดกับจุดสังเกตหรือจุดเข้าถึงของจุดสังเกตโดยตรง
    • "ACROSS_THE_ROAD" เมื่อพิกัดอินพุตอยู่ตรงข้ามกับจุดสังเกตที่อยู่อีกฝั่งของเส้นทางโดยตรง
    • "DOWN_THE_ROAD" เมื่อพิกัดที่ป้อนอยู่บนเส้นทางเดียวกับจุดสังเกต แต่ไม่ใช่ "BESIDES" หรือ "ACROSS_THE_ROAD"
    • "AROUND_THE_CORNER" เมื่อพิกัดอินพุตอยู่ตามเส้นทางที่ตั้งฉากกับจุดสังเกต (จำกัดให้เลี้ยวได้ครั้งเดียว)
    • "BEHIND" เมื่อพิกัดอินพุตอยู่ใกล้กับจุดสังเกตในเชิงพื้นที่ แต่ห่างจากจุดเข้าถึง
  • types คือประเภทสถานที่ของจุดสังเกต

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

  • place_id คือรหัสสถานที่ของผลลัพธ์พื้นที่ ดูภาพรวมรหัสสถานที่
  • display_name คือชื่อที่แสดงของพื้นที่และมี language_code และ text
  • containment คือความสัมพันธ์ของการครอบคลุมโดยประมาณระหว่างพิกัดอินพุตและผลลัพธ์ของพื้นที่ ดังนี้
    • "NEAR" คือความสัมพันธ์เริ่มต้นเมื่อไม่มีความสัมพันธ์ใดต่อไปนี้ที่เกี่ยวข้อง
    • "WITHIN" เมื่อพิกัดอินพุตอยู่ใกล้กับศูนย์กลางของพื้นที่
    • "OUTSKIRTS" เมื่อพิกัดอินพุตอยู่ใกล้กับขอบของพื้นที่

ความครอบคลุมของคำอธิบายที่อยู่

ตัวระบุที่อยู่พร้อมให้บริการแก่ผู้ใช้ทุกคนในอินเดียแล้ว การใช้คำอธิบายที่อยู่ในอินเดียไม่มีค่าใช้จ่ายเพิ่มเติม และการใช้งานจะครอบคลุมอยู่ใน SKU Essentials ของการเข้ารหัสพิกัดภูมิศาสตร์ (อินเดีย) ที่มีอยู่

ความคิดเห็น

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

การเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับ (การค้นหาที่อยู่)

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

แทนที่จะระบุ address เป็นข้อความ ให้ระบุคู่ละติจูด/ลองจิจูด ที่คั่นด้วยคอมมาในพารามิเตอร์ location

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

TypeScript

let marker: google.maps.marker.AdvancedMarkerElement;

async function init() {
    //  Request the needed libraries.
    const [{ InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] =
        await Promise.all([
            google.maps.importLibrary('maps'),
            google.maps.importLibrary('geocoding'),
            google.maps.importLibrary('marker'),
        ]);

    // Get the gmp-map element.
    const mapElement = document.querySelector('gmp-map')!;

    // Get the inner map.
    const innerMap = mapElement.innerMap;

    // Get the latlng input box.
    const latLngQuery = document.getElementById('latlng') as HTMLInputElement;

    // Get the submit button.
    const submitButton = document.getElementById('submit')!;

    // Set the cursor to crosshair.
    innerMap.setOptions({
        draggableCursor: 'crosshair',
        zoom: 13,
        mapTypeControl: false,
    });

    // Create a marker for re-use.
    marker = new AdvancedMarkerElement({
        map: innerMap,
    });

    marker.anchorTop = '40px';

    const geocoder = new Geocoder();
    const infoWindow = new InfoWindow();

    // Add a click event listener to the submit button.
    submitButton.addEventListener('click', () => {
        void geocodeLatLng(geocoder, innerMap, infoWindow);
    });

    // Add a click event listener to the map.
    innerMap.addListener('click', (event: google.maps.MapMouseEvent) => {
        if (event.latLng) {
            latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`;
            void geocodeLatLng(geocoder, innerMap, infoWindow);
        }
    });

    // Make an initial request upon loading.
    void geocodeLatLng(geocoder, innerMap, infoWindow);
}

async function geocodeLatLng(
    geocoder: google.maps.Geocoder,
    map: google.maps.Map,
    infoWindow: google.maps.InfoWindow
) {
    const input = (document.getElementById('latlng') as HTMLInputElement).value;
    const latlngStr = input.split(',', 2);
    const latlng = {
        lat: parseFloat(latlngStr[0]),
        lng: parseFloat(latlngStr[1]),
    };

    try {
        const { results } = await geocoder.geocode({ location: latlng });

        if (results[0]) {
            marker.position = latlng;
            map.setCenter(latlng);
            infoWindow.setContent(results[0].formatted_address);
            infoWindow.open(map, marker);
        } else {
            window.alert('No results found');
        }
    } catch (e) {
        window.alert('Geocoder failed due to: ' + String(e));
    }
}

void init();

JavaScript

let marker;

async function init() {
    //  Request the needed libraries.
    const [{ InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] =
        await Promise.all([
            google.maps.importLibrary('maps'),
            google.maps.importLibrary('geocoding'),
            google.maps.importLibrary('marker'),
        ]);

    // Get the gmp-map element.
    const mapElement = document.querySelector('gmp-map');

    // Get the inner map.
    const innerMap = mapElement.innerMap;

    // Get the latlng input box.
    const latLngQuery = document.getElementById('latlng');

    // Get the submit button.
    const submitButton = document.getElementById('submit');

    // Set the cursor to crosshair.
    innerMap.setOptions({
        draggableCursor: 'crosshair',
        zoom: 13,
        mapTypeControl: false,
    });

    // Create a marker for re-use.
    marker = new AdvancedMarkerElement({
        map: innerMap,
    });

    marker.anchorTop = '40px';

    const geocoder = new Geocoder();
    const infoWindow = new InfoWindow();

    // Add a click event listener to the submit button.
    submitButton.addEventListener('click', () => {
        void geocodeLatLng(geocoder, innerMap, infoWindow);
    });

    // Add a click event listener to the map.
    innerMap.addListener('click', (event) => {
        if (event.latLng) {
            latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`;
            void geocodeLatLng(geocoder, innerMap, infoWindow);
        }
    });

    // Make an initial request upon loading.
    void geocodeLatLng(geocoder, innerMap, infoWindow);
}

async function geocodeLatLng(geocoder, map, infoWindow) {
    const input = document.getElementById('latlng').value;
    const latlngStr = input.split(',', 2);
    const latlng = {
        lat: parseFloat(latlngStr[0]),
        lng: parseFloat(latlngStr[1]),
    };

    try {
        const { results } = await geocoder.geocode({ location: latlng });

        if (results[0]) {
            marker.position = latlng;
            map.setCenter(latlng);
            infoWindow.setContent(results[0].formatted_address);
            infoWindow.open(map, marker);
        } else {
            window.alert('No results found');
        }
    } catch (e) {
        window.alert('Geocoder failed due to: ' + String(e));
    }
}

void init();

CSS

/*
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
gmp-map {
    height: 100%;
}

/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
    font-family: Roboto, sans-serif;
}

#floating-panel {
    background-color: #fff;
    border-radius: 5px;
    box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
    margin: 10px;
    padding: 10px;
    font-family: Roboto, sans-serif;
    font-size: 1rem;
}

#latlng {
    width: 100%;
    font-family: Roboto, sans-serif;
    font-size: 1rem;
    margin-bottom: 4px;
}

#submit {
    font-size: 1rem;
}

HTML

<html>
    <head>
        <title>Reverse Geocoding</title>

        <link rel="stylesheet" type="text/css" href="./style.css" />
        <script type="module" src="./index.js"></script>
        <script>
            // prettier-ignore
            (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
                key: "GOOGLE_MAPS_API_KEY"
            });
        </script>
    </head>
    <body>
        <gmp-map center="0.714224, -73.961452" zoom="8" map-id="DEMO_MAP_ID">
            <div id="floating-panel" slot="control-block-start-inline-start">
                <p>
                    Click the map to reverse geocode, or add your own
                    coordinates.
                </p>
                <input
                    id="latlng"
                    type="text"
                    value="40.714224, -73.961452" /><br />
                <input id="submit" type="button" value="Reverse Geocode" />
            </div>
        </gmp-map>
    </body>
</html>
ดูตัวอย่าง

โปรดทราบว่าในตัวอย่างก่อนหน้านี้ เราได้แสดงผลการค้นหารายการแรกโดยเลือก results[0] โปรแกรมเปลี่ยนพิกัดภูมิศาสตร์เป็นที่อยู่มักจะแสดงผลลัพธ์มากกว่า 1 รายการ ที่อยู่ที่มีการเข้ารหัสพิกัดภูมิศาสตร์ไม่ใช่แค่ที่อยู่ทางไปรษณีย์ แต่เป็นวิธีใดก็ตามในการตั้งชื่อสถานที่ตั้งทางภูมิศาสตร์ ตัวอย่างเช่น เมื่อเข้ารหัสพิกัดภูมิศาสตร์จุดหนึ่งในเมืองชิคาโก จุดที่เข้ารหัสพิกัดภูมิศาสตร์อาจมีป้ายกำกับเป็นที่อยู่ เป็นเมือง (ชิคาโก) เป็นรัฐ (อิลลินอยส์) หรือเป็นประเทศ (สหรัฐอเมริกา) ทั้งหมดนี้เป็นที่อยู่สำหรับโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์ โปรแกรมเปลี่ยนพิกัดภูมิศาสตร์เป็นที่อยู่จะแสดงผลลัพธ์ทั้งหมดเหล่านี้

โปรแกรมการเข้ารหัสพิกัดภูมิศาสตร์แบบย้อนกลับจะจับคู่หน่วยงานทางการเมือง (ประเทศ จังหวัด เมือง และย่าน) ที่อยู่ และรหัสไปรษณีย์

ตัวอย่างรายการที่อยู่ที่การค้นหาข้างต้นอาจแสดงผลมีดังนี้

results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA"
results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA"
results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA"
results[3].formatted_address: "Brooklyn, NY, USA"
results[4].formatted_address: "New York, NY, USA"
results[5].formatted_address: "Brooklyn, NY 11211, USA"
results[6].formatted_address: "Kings County, NY, USA"
results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA"
results[8].formatted_address: "New York Metropolitan Area, USA"
results[9].formatted_address: "New York, USA"

ระบบจะแสดงผลที่อยู่ตามลำดับการจับคู่ที่ดีที่สุดไปจนถึงน้อยที่สุด โดยทั่วไปแล้ว ที่อยู่ที่ตรงกันมากกว่าจะเป็นผลการค้นหาที่โดดเด่นที่สุด เช่นเดียวกับในกรณีนี้ โปรดทราบว่าเราแสดงผลที่อยู่ประเภทต่างๆ ตั้งแต่ที่อยู่ถนนที่เจาะจงที่สุดไปจนถึงหน่วยงานทางการเมืองที่เจาะจงน้อยกว่า เช่น ย่าน เมือง เขต รัฐ เป็นต้น หากต้องการจับคู่ที่อยู่ทั่วไปมากขึ้น คุณอาจต้องตรวจสอบช่อง results[].types

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

การดึงข้อมูลที่อยู่สำหรับรหัสสถานที่

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

เมื่อคุณระบุ placeId คำขอต้องไม่มีช่องต่อไปนี้

  • address
  • latLng
  • location
  • componentRestrictions

ตัวอย่างต่อไปนี้ยอมรับรหัสสถานที่ ค้นหาที่อยู่ที่เกี่ยวข้อง และจัดแผนที่ให้อยู่กึ่งกลางที่ตำแหน่งนั้น นอกจากนี้ยังแสดงหน้าต่างข้อมูลที่แสดงที่อยู่ซึ่งจัดรูปแบบแล้วของสถานที่ที่เกี่ยวข้องด้วย

TypeScript

// Initialize the map.
async function init(): Promise<void> {
    const [{ Geocoder }, { InfoWindow }] = await Promise.all([
        google.maps.importLibrary('geocoding'),
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('marker'),
    ]);

    const mapElement = document.querySelector('gmp-map')!;
    const innerMap = mapElement.innerMap;
    const geocoder = new Geocoder();
    const infoWindow = new InfoWindow();

    document.getElementById('submit')!.addEventListener('click', () => {
        void geocodePlaceId(geocoder, innerMap, infoWindow);
    });
}

// This function is called when the user clicks the UI button.
async function geocodePlaceId(
    geocoder: google.maps.Geocoder,
    map: google.maps.Map,
    infoWindow: google.maps.InfoWindow
) {
    const placeId = (document.getElementById('place-id') as HTMLInputElement)
        .value;

    const { AdvancedMarkerElement } = await google.maps.importLibrary('marker');

    const { results } = await geocoder.geocode({ placeId });
    if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new AdvancedMarkerElement({
            map,
            position: results[0].geometry.location,
        });

        infoWindow.setContent(results[0].formatted_address);
        infoWindow.open(map, marker);
    } else {
        window.alert('No results found');
    }
}

void init();

JavaScript

// Initialize the map.
async function init() {
    const [{ Geocoder }, { InfoWindow }] = await Promise.all([
        google.maps.importLibrary('geocoding'),
        google.maps.importLibrary('maps'),
        google.maps.importLibrary('marker'),
    ]);

    const mapElement = document.querySelector('gmp-map');
    const innerMap = mapElement.innerMap;
    const geocoder = new Geocoder();
    const infoWindow = new InfoWindow();

    document.getElementById('submit').addEventListener('click', () => {
        void geocodePlaceId(geocoder, innerMap, infoWindow);
    });
}

// This function is called when the user clicks the UI button.
async function geocodePlaceId(geocoder, map, infoWindow) {
    const placeId = document.getElementById('place-id').value;

    const { AdvancedMarkerElement } = await google.maps.importLibrary('marker');

    const { results } = await geocoder.geocode({ placeId });
    if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new AdvancedMarkerElement({
            map,
            position: results[0].geometry.location,
        });

        infoWindow.setContent(results[0].formatted_address);
        infoWindow.open(map, marker);
    } else {
        window.alert('No results found');
    }
}

void init();
ดูตัวอย่าง