الترميز الجغرافي هو عملية تحويل العناوين ("1600 Amphitheatre Parkway, Mountain View, CA") إلى الإحداثيات الجغرافية (37.423021, -122.083739)، التي يمكنك استخدامها لوضع علامات أو موضع الخريطة. تقدّم واجهات برمجة التطبيقات في "خرائط Google" طريقتَين للترميز الجغرافي:
- الترميز الجغرافي من جهة العميل، الذي يتم تنفيذه في المتصفّح، استجابةً لإجراء المستخدم بشكل عام. توفّر واجهة برمجة تطبيقات JavaScript للخرائط صفوف تقدّم الطلبات نيابةً عنك. وقد تم توضيح هذا النهج في مستندات JavaScript API للخرائط.
- الترميز الجغرافي من جهة خادم HTTP، والذي يسمح للخادم بطلب بحث مباشرة عن خوادم Google للرموز الجغرافية. واجهة برمجة التطبيقات للترميز الجغرافي هي خدمة ويب توفّر هذه الوظيفة. وعادةً ما تدمج هذه الخدمة مع رمز آخر يتم تشغيله من جهة الخادم تم وصف الترميز الجغرافي من جهة الخادم في مستندات واجهة برمجة تطبيقات الترميز الجغرافي.
أمثلة على الترميز الجغرافي من جهة العميل والخادم
في ما يلي نموذج عن الترميز الجغرافي من جهة العميل الذي يأخذ عنوانًا ويحسبه جغرافيًا وينقل وسط الخريطة إلى ذلك الموقع، ويضيف علامة خريطة إلى ذلك الموقع:
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 }); } });
ولمزيد من الأمثلة، يمكنك الاطّلاع على المستندات المتعلّقة بواجهة برمجة تطبيقات JavaScript للخرائط.
إليك مثال على استخدام 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. للحصول على مزيد من الأمثلة، يمكنك الاطّلاع على مستندات واجهة برمجة التطبيقات حول الترميز الجغرافي ومكتبات العميل للغة Python واللغات الأخرى.
اعتبارات الحصة والتكلفة
إنّ الاستراتيجيات المتعلقة بالترميز الجغرافي والحصص وحدود معدّل الاستخدام تحدّد الاستراتيجيات الموضّحة في هذا المستند.
التكلفة
لم يعُد يتم استخدام حدود الحصة اليومية لطلبات الترميز الجغرافي. بدلاً من ذلك، يتم تحصيل رسوم كل طلب ترميز ترميز جغرافي، سواء من جهة العميل أو من خلال الخادم أو من خلال خدمة الويب لترميز "واجهة برمجة التطبيقات الجغرافية". لإدارة تكلفة الاستخدام، يمكنك الحدّ من حصتك اليومية.
الحدود القصوى لمعدّل الاستخدام
تقتصر خدمة الترميز الجغرافي على 50 طلبًا في الثانية (QPS) (طلبات البحث في الثانية)، يتم احتسابها من خلال مجموع طلبات البحث من جهة العميل والخادم.
عند تنفيذ طلبات ترميز جغرافي من جهة العميل على فترات دورية، مثل التطبيق المتوافق مع الأجهزة الجوّالة، قد تعرض طلباتك أخطاء إذا كان جميع المستخدمين يرسلون طلبات في الوقت نفسه (على سبيل المثال، كل هذه الثواني في كل دقيقة). ولتجنُّب ذلك، يمكنك تنفيذ أحد الإجراءات التالية:
- قدِّم فواصل زمنية عشوائية لطلباتك (مثل عدم استقرار). تأكّد من أن الطلبات عشوائية عبر قاعدة المستخدمين بأكملها.
- إذا كنت تعمل على تطوير برامج متوافقة مع Android، استخدِم منبّهًا متكررًا غير دقيق.
- إذا كنت تريد تطوير نظام التشغيل Android، اختَر استراتيجية تحديد الموقع الجغرافي مناسبة.
التخزين المؤقت
راجِع سياسات واجهة برمجة التطبيقات للترميز الجغرافي حول التخزين المؤقت.
حالات استخدام الترميز الجغرافي من جهة العميل
الإجابة القصيرة هي "&دائمًا"؛ الأسباب هي:
- يقدّم الطلب والاستجابة من جانب العميل تجربة أسرع وأكثر تفاعلاً للمستخدمين.
- يمكن أن يتضمّن الطلب من جهة العميل معلومات تحسّن جودة الترميز الجغرافي: لغة المستخدم والمنطقة وإطار العرض.
وعلى وجه الخصوص، من الأفضل استخدام الترميز الجغرافي من جهة العميل عند إدخال عناوين ترميز جغرافي استنادًا إلى ملاحظات المستخدمين.
هناك بنيتان أساسيتان للترميز الجغرافي من جهة العميل:
- إجراء الترميز الجغرافي والعرض بالكامل في المتصفح. على سبيل المثال، يُدخل المستخدم عنوانًا على صفحتك. ينفّذ تطبيقك ترميزًا جغرافيًا. بعد ذلك، تستخدِم صفحتك الترميز الجغرافي لإنشاء محدّد موقع على الخريطة. أو يُجري تطبيقك بعض التحليل البسيط باستخدام الترميز الجغرافي. لا يتم إرسال أي بيانات إلى الخادم الخاص بك. يؤدي هذا الأمر إلى تقليل الحمل على الخادم.
- نفِّذ الترميز الجغرافي في المتصفح ثم أرسله إلى الخادم. على سبيل المثال، يُدخل المستخدم عنوانًا في صفحتك. ينفّذ تطبيقك ترميزًا جغرافيًا في المتصفّح. بعد ذلك، يرسل التطبيق البيانات إلى الخادم الخاص بك. يستجيب الخادم ببعض البيانات، مثل نقاط الاهتمام المجاورة. ويتيح لك هذا الخيار تخصيص ردّ استنادًا إلى بياناتك الخاصة.
حالات استخدام الترميز الجغرافي من جهة الخادم
من الأفضل استخدام الترميز الجغرافي من جهة الخادم للتطبيقات التي تتطلب منك ترميز العناوين بدون إدخال رمز من العميل. من الأمثلة الشائعة عند حصولك على مجموعة بيانات تأتي بشكل مستقل عن إدخال المستخدم، على سبيل المثال، إذا كانت لديك مجموعة ثابتة ومحدودة ومعروفة من العناوين التي تحتاج إلى ترميز جغرافي. وقد يكون الترميز الجغرافي من جهة الخادم مفيدًا أيضًا كنسخة احتياطية في حال تعذّر الترميز الجغرافي من جهة العميل.
ويُعدّ بعض المخاوف المحتملة هي زيادة غير ضرورية في وقت الاستجابة بالنسبة إلى المستخدم، كما تؤدي نتائج الترميز الجغرافي إلى جودة أقل من جودة البيانات من جهة العميل، وذلك بسبب توفّر معلومات أقل في الطلب.