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