زمینکدیابی فرایند تبدیل نشانیها («1600 Amphitheatre Parkway, Mountain View, CA») به مختصات جغرافیایی (37.423021, -122.083739) است که میتوانید از آن برای قرار دادن نشانگرها یا موقعیتیابی نقشه استفاده کنید. میاناهای برنامهسازی کاربردی پلاتفرم Google Maps دو رویکرد برای زمینکدیابی ارائه میدهند:
- زمینکدگذاری سمت کارخواه، که در مرورگر اجرا میشود، معمولاً در پاسخ به اقدام کاربر. 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) دیگر برای درخواستهای زمینکدیابی استفاده نمیشود. درعوض، هر درخواست زمینکدی، چه سمت کارخواه ازطریق مرورگر و چه سمت سرور ازطریق سرویس وب میانای برنامهسازی کاربردی «زمینکدی»، با قیمت هر درخواست صورتحساب میشود. برای مدیریت هزینه استفاده، سهمیه روزانهتان را محدود کنید.
محدودیتهای نرخ
سرویس زمینکدیابی به ۳٬۰۰۰ پد (پُرسمان در دقیقه) محدود شده است، که بهعنوان مجموع پُرسمانهای سمت کارخواه و سمت سرور محاسبه میشود.
وقتی درخواستهای زمینکدیابی سمت کارخواه را در فواصل زمانی معین اجرا میکنید، مثلاً در برنامه تلفن همراه، اگر همه کاربران شما درخواستها را در یک زمان انجام دهند (برای مثال، همه در یک ثانیه از هر دقیقه)، درخواستهای شما ممکن است خطا برگرداند. برای جلوگیری از این مشکل، یکی از موارد زیر را درنظر بگیرید:
- فاصلههای تصادفی به درخواستهایتان اضافه کنید (لرزش). مطمئن شوید درخواستها در کل پایگاه کاربر شما تصادفی باشد.
- اگر برای Android توسعه میدهید، از زنگ هشدار تکرارشونده غیردقیق استفاده کنید.
- اگر برای Android توسعه میدهید، استراتژی مکان مناسبی را انتخاب کنید.
در حال ذخیره در حافظه نهان
برای اطلاعات بیشتر درباره ذخیرهسازی در حافظه نهان، خطمشیهای Geocoding API را ببینید.
زمان استفاده از زمینکدیابی سمت کارخواه
پاسخ کوتاه این است: «تقریباً همیشه». دلایل عبارتاند از:
- درخواست و پاسخ سمت مشتری تجربه سریعتر و تعاملیتری برای کاربران فراهم میکند.
- درخواست سمت کارخواه میتواند شامل اطلاعاتی باشد که کیفیت زمینکدیابی را بهبود میبخشد: زبان کاربر، منطقه، و درگاه دید.
بهویژه، زمینکدیابی سمت کارخواه برای زمینکدیابی نشانیها براساس ورودی کاربر بهترین گزینه است.
دو معماری اصلی برای زمینکدیابی سمت کارخواه وجود دارد:
- مکانیابی جغرافیایی و نمایش را بهطور کامل در مرورگر انجام دهید. برای نمونه، کاربر نشانیای را در صفحه شما وارد میکند. برنامه شما آن را زمینکدگذاری میکند. سپس صفحه شما از زمینکدیاب برای ایجاد نشانگر روی نقشه استفاده میکند. یا برنامه شما بااستفاده از زمینکد، تجزیهوتحلیل سادهای انجام میدهد. هیچ دادهای به سرورتان ارسال نمیشود. این کار بار سرورتان را کاهش میدهد.
- زمینکدیابی را در مرورگر انجام دهید و سپس آن را به سرور ارسال کنید. برای مثال، کاربر نشانیای را در صفحه شما وارد میکند. برنامه شما آن را در مرورگر زمینکد میکند. سپس برنامه دادهها را به سرور شما ارسال میکند. سرور با برخیاز دادهها، مثل نقاط موردعلاقه اطراف، پاسخ میدهد. این کار به شما امکان میدهد پاسخ را براساس دادههای خودتان سفارشیسازی کنید.
زمان استفاده از زمینکدگذاری سمت سرور
زمینکدیابی سمت سرور برای برنامههایی که نیاز دارند نشانیها را بدون ورودی از کارخواه زمینکدیابی کنید بهترین گزینه است. مثال رایج این است که مجموعه دادهای دریافت کنید که مستقل از ورودی کاربر باشد، برای مثال اگر مجموعه ثابتی از نشانیها داشته باشید که نیاز به زمینکدگذاری داشته باشند. زمینکدیابی سمت سرور میتواند بهعنوان پشتیبان در مواقعی که زمینکدیابی سمت کارخواه ناموفق است مفید باشد.
برخیاز نگرانیهای احتمالی عبارتاند از افزایش غیرضروری تأخیر برای کاربر، و نتایج زمینکدگذاری با کیفیت پایینتر از سمت کارخواه زیرا اطلاعات کمتری در درخواست دردسترس است.