การเพิ่มประสิทธิภาพการใช้โควต้าเมื่อกำหนดพิกัดทางภูมิศาสตร์

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

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

ตัวอย่างการระบุพิกัดทางภูมิศาสตร์ฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

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

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

ดูตัวอย่างเพิ่มเติมได้ที่เอกสารประกอบ Maps JavaScript API

ต่อไปนี้คือตัวอย่างการใช้ Python ในการส่งคำขอเข้ารหัสพิกัดภูมิศาสตร์ฝั่งเซิร์ฟเวอร์

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

การดำเนินการนี้จะสร้างออบเจ็กต์ JSON ที่มีเนื้อหาต่อไปนี้

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "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" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

นอกจากนี้ โปรแกรมเข้ารหัสพิกัดฝั่งเซิร์ฟเวอร์ยังมีรูปแบบ XML เป็นทางเลือกสำหรับ JSON ดูตัวอย่างเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ Geocoding API และไลบรารีของไคลเอ็นต์สำหรับ Python และภาษาอื่นๆ

ข้อควรพิจารณาเกี่ยวกับโควต้าและต้นทุน

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

ค่าใช้จ่าย

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

ขีดจำกัดอัตรา

บริการการระบุพิกัดทางภูมิศาสตร์มีอัตราที่จำกัดไว้ที่ 3,000 QPM (จำนวนการค้นหาต่อนาที) ซึ่งคำนวณเป็นผลรวมของข้อความค้นหาฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

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

  • แนะนำช่วงเวลาแบบสุ่มในคำขอของคุณ (Jitter) ตรวจสอบว่าคำขอเป็นแบบสุ่มในฐานผู้ใช้ทั้งหมด
  • หากเป็นการพัฒนาสำหรับ Android ให้ใช้การปลุกซ้ำที่ไม่แน่นอน
  • หากกำลังพัฒนาสำหรับ Android ให้เลือกกลยุทธ์ตำแหน่งที่เหมาะสม

การแคช

ดู นโยบาย Geocoding API เกี่ยวกับการแคช

ควรใช้การระบุพิกัดทางภูมิศาสตร์ฝั่งไคลเอ็นต์เมื่อใด

คำตอบสั้นๆ คือ "เกือบทุกครั้ง" เหตุผลมีดังนี้

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

โดยเฉพาะอย่างยิ่ง การระบุพิกัดทางภูมิศาสตร์ฝั่งไคลเอ็นต์จะดีที่สุดเมื่อระบุพิกัดทางภูมิศาสตร์ของที่อยู่ซึ่งอิงตามข้อมูลจากผู้ใช้

มีสถาปัตยกรรมพื้นฐาน 2 แบบสำหรับการระบุพิกัดทางภูมิศาสตร์ฝั่งไคลเอ็นต์ ได้แก่

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

ควรใช้การระบุพิกัดทางภูมิศาสตร์ฝั่งเซิร์ฟเวอร์เมื่อใด

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

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