การเข้ารหัสพิกัดคือกระบวนการแปลงที่อยู่ ("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) ไม่ได้ใช้งานสําหรับคําขอการระบุพิกัดทางภูมิศาสตร์อีกต่อไป แต่คําขอการเข้ารหัสพิกัดภูมิศาสตร์แต่ละรายการ ไม่ว่าจะในฝั่งไคลเอ็นต์ผ่านทางเบราว์เซอร์หรือฝั่งเซิร์ฟเวอร์ผ่านบริการเว็บ Geocoding API จะได้รับการเรียกเก็บเงินสําหรับแต่ละราคา หากต้องการจัดการค่าใช้จ่าย ให้ลองกําหนดขีดจํากัดรายวัน
ขีดจำกัดอัตรา
บริการการเข้ารหัสภูมิศาสตร์จํากัดอัตราไว้ที่ 50 QPS (จํานวนคําค้นหาต่อวินาที) โดยคํานวณเป็นผลรวมของคําค้นหาฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์
เมื่อมีการเรียกใช้คําขอการเข้ารหัสฝั่งไคลเอ็นต์ตามช่วงเวลา เช่น ในแอปบนอุปกรณ์เคลื่อนที่ คําขออาจแสดงข้อผิดพลาดหากผู้ใช้ทั้งหมดของคุณส่งคําขอในเวลาเดียวกัน (เช่น ทุกวินาทีเดียวกันทุกนาที) ลองดําเนินการอย่างใดอย่างหนึ่งต่อไปนี้เพื่อหลีกเลี่ยงไม่ให้ระบบดําเนินการดังกล่าว
- แนะนําช่วงเวลาแบบสุ่มให้กับคําขอของคุณ (Jitter) โปรดตรวจสอบว่าคําขอแบบสุ่มอยู่ในฐานผู้ใช้ทั้งหมด
- หากเป็นการพัฒนาสําหรับ Android ให้ใช้การปลุกซ้ําแบบไม่จํากัด
- หากพัฒนาซอฟต์แวร์สําหรับ Android ให้เลือกกลยุทธ์ตําแหน่งที่เหมาะสม
การแคช
ดูนโยบาย Geocoding API เกี่ยวกับการแคช
กรณีที่ควรใช้การระบุพิกัดฝั่งไคลเอ็นต์
คําตอบสั้นๆ คือ &;quot;เกือบจะตลอดเวลาเลย" โดยมีสาเหตุดังนี้
- คําขอฝั่งไคลเอ็นต์และการตอบสนองมอบประสบการณ์แบบอินเทอร์แอกทีฟที่รวดเร็วกว่าให้แก่ผู้ใช้
- คําขอฝั่งไคลเอ็นต์อาจมีข้อมูลที่ปรับปรุงคุณภาพการเข้ารหัสภูมิศาสตร์ได้ เช่น ภาษาของผู้ใช้ ภูมิภาค และวิวพอร์ต
โดยเฉพาะอย่างยิ่ง การระบุพิกัดฝั่งไคลเอ็นต์จะให้ผลดีที่สุดเมื่อการระบุพิกัดทางภูมิศาสตร์โดยใช้ที่อยู่ในข้อมูลจากผู้ใช้
สถาปัตยกรรมพื้นฐานสําหรับการเข้ารหัสฝั่งไคลเอ็นต์มีสถาปัตยกรรมพื้นฐาน 2 แบบดังนี้
- ระบุพิกัดทางภูมิศาสตร์และการแสดงผลทั้งหมดในเบราว์เซอร์ ตัวอย่างเช่น ผู้ใช้ป้อนที่อยู่ในหน้าเว็บ แอปพลิเคชันจะเข้ารหัสภูมิศาสตร์ของแอปพลิเคชัน จากนั้นหน้าของคุณจะใช้รหัสพิกัดเพื่อสร้างเครื่องหมายบนแผนที่ หรือแอปวิเคราะห์แบบง่ายๆ โดยใช้รหัสพิกัดภูมิศาสตร์ โดยจะไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ของคุณ ซึ่งจะช่วยลดภาระงานบนเซิร์ฟเวอร์ของคุณ
- ทําการระบุพิกัดภูมิศาสตร์ในเบราว์เซอร์ แล้วส่งไปยังเซิร์ฟเวอร์ ตัวอย่างเช่น ผู้ใช้ป้อนที่อยู่ในหน้าเว็บของคุณ แอปพลิเคชันจะเข้ารหัสพิกัดในเบราว์เซอร์ จากนั้นแอปจะส่งข้อมูลไปยังเซิร์ฟเวอร์ของคุณ เซิร์ฟเวอร์จะตอบกลับด้วยข้อมูลบางอย่าง เช่น จุดสนใจใกล้เคียง ซึ่งจะช่วยให้คุณปรับแต่งการตอบกลับโดยอิงตามข้อมูลของตนเองได้
กรณีที่ควรใช้การระบุพิกัดฝั่งเซิร์ฟเวอร์
การระบุพิกัดทางภูมิศาสตร์ฝั่งเซิร์ฟเวอร์ใช้สําหรับแอปพลิเคชันที่ต้องใช้ การระบุพิกัดทางภูมิศาสตร์กับโดเมนโดยไม่ต้องป้อนข้อมูลจากไคลเอ็นต์ ตัวอย่างที่พบบ่อยคือคุณได้รับชุดข้อมูลที่มาจากผู้ใช้ที่เข้ามาเป็นอิสระ เช่น ในกรณีที่คุณมีชุดที่อยู่แบบตายตัว ไม่จํากัด และเป็นที่รู้จัก ซึ่งต้องมีการเข้ารหัสทางภูมิศาสตร์ การระบุพิกัดในฝั่งเซิร์ฟเวอร์ยังมีประโยชน์ต่อการสํารองข้อมูลเมื่อการเข้ารหัสภูมิศาสตร์ฝั่งไคลเอ็นต์ล้มเหลวด้วย
ข้อกังวลที่เป็นไปได้คือเวลาในการตอบสนองที่เพิ่มขึ้นของผู้ใช้โดยไม่จําเป็น และผลการระบุพิกัดทางภูมิศาสตร์ให้มีคุณภาพน้อยกว่าฝั่งไคลเอ็นต์เนื่องจากมีข้อมูลในคําขอไม่เพียงพอ