بهینه سازی استفاده از سهمیه هنگام کدگذاری جغرافیایی

ژئوکدینگ فرآیند تبدیل آدرس ها ("1600 Amphitheatre Parkway, Mountain View, CA") به مختصات جغرافیایی (37.423021، -122.083739) است که می توانید از آنها برای قرار دادن نشانگرها یا موقعیت نقشه استفاده کنید. API های پلتفرم نقشه های گوگل دو رویکرد برای کدگذاری جغرافیایی ارائه می دهند:

  • geocoding سمت کلاینت ، که در مرورگر اجرا می شود، به طور کلی در پاسخ به عملکرد کاربر. 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 مراجعه کنید.

در اینجا مثالی با استفاده از پایتون برای انجام یک درخواست ژئوکدینگ سمت سرور آورده شده است:

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
        }
      }
    }
  } ]
}

geocoder سمت سرور همچنین یک فرمت XML را به عنوان جایگزینی برای JSON ارائه می دهد. برای مثال‌های بیشتر، به مستندات API Geocoding و کتابخانه‌های سرویس گیرنده پایتون و سایر زبان‌ها مراجعه کنید.

ملاحظات سهمیه و هزینه

هزینه‌های کدگذاری جغرافیایی، سهمیه‌ها و محدودیت‌های نرخ، استراتژی‌های ذکر شده در این سند را هدایت می‌کنند.

هزینه

محدودیت های سهمیه در روز (QPD) دیگر برای درخواست های کدگذاری جغرافیایی استفاده نمی شود . در عوض، هر درخواست کدگذاری جغرافیایی، چه در سمت مشتری از طریق مرورگر یا سمت سرور از طریق سرویس وب Geocoding API، به ازای هر قیمت صورت‌حساب می‌شود. برای مدیریت هزینه استفاده، سقف سهمیه روزانه خود را در نظر بگیرید.

محدودیت های نرخ

نرخ سرویس کدگذاری جغرافیایی محدود به 3000 QPM (پرس و جو در دقیقه) است که به عنوان مجموع پرس و جوهای سمت مشتری و سمت سرور محاسبه می شود.

هنگام اجرای درخواست‌های کدگذاری جغرافیایی سمت کلاینت در فواصل زمانی متناوب، مثلاً در یک برنامه تلفن همراه، اگر همه کاربران شما در یک زمان درخواستی را انجام دهند (مثلاً همه در یک ثانیه در هر دقیقه) ممکن است درخواست‌های شما با خطا مواجه شود. برای جلوگیری از این امر، یکی از موارد زیر را در نظر بگیرید:

  • فواصل تصادفی را به درخواست های خود معرفی کنید (جتر). اطمینان حاصل کنید که درخواست ها در کل پایگاه کاربری شما تصادفی هستند.
  • اگر برای Android در حال توسعه هستید، از زنگ هشدار تکرار شونده غیر دقیق استفاده کنید.
  • اگر برای Android در حال توسعه هستید، یک استراتژی مکان مناسب انتخاب کنید.

ذخیره سازی

به سیاست‌های Geocoding API در مورد ذخیره‌سازی مراجعه کنید.

زمان استفاده از کدگذاری جغرافیایی سمت مشتری

پاسخ کوتاه "تقریبا همیشه" است. دلایل عبارتند از:

  • درخواست و پاسخ سمت مشتری تجربه سریعتر و تعاملی بیشتری را برای کاربران فراهم می کند.
  • یک درخواست سمت کلاینت می تواند شامل اطلاعاتی باشد که کیفیت کدگذاری جغرافیایی را بهبود می بخشد: زبان کاربر، منطقه و درگاه دید.

به طور خاص، زمانی که آدرس‌ها را بر اساس ورودی کاربر کدگذاری جغرافیایی می‌کند، کد جغرافیایی سمت مشتری بهترین است.

دو معماری اساسی برای ژئوکدینگ سمت مشتری وجود دارد:

  • ژئوکدینگ و نمایش را به طور کامل در مرورگر انجام دهید. به عنوان مثال، کاربر آدرسی را در صفحه شما وارد می کند. برنامه شما آن را ژئوکد می کند. سپس صفحه شما از ژئوکد برای ایجاد یک نشانگر روی نقشه استفاده می کند. یا برنامه شما با استفاده از ژئوکد تجزیه و تحلیل ساده ای انجام می دهد. هیچ داده ای به سرور شما ارسال نمی شود. این باعث کاهش بار روی سرور شما می شود.
  • geocoding را در مرورگر انجام دهید و سپس آن را به سرور ارسال کنید. به عنوان مثال، کاربر آدرسی را در صفحه شما وارد می کند. برنامه شما آن را در مرورگر جغرافیایی کد می کند. سپس برنامه داده ها را به سرور شما ارسال می کند. سرور با برخی از داده ها مانند نقاط مورد علاقه نزدیک پاسخ می دهد. این به شما امکان می دهد پاسخ را بر اساس داده های خود سفارشی کنید.

چه زمانی باید از کدگذاری جغرافیایی سمت سرور استفاده کرد

ژئوکدینگ سمت سرور برای برنامه‌هایی که نیاز به ژئوکد کردن آدرس‌ها بدون ورودی مشتری دارند، بهترین استفاده است. یک مثال رایج زمانی است که مجموعه داده‌ای را دریافت می‌کنید که مستقل از ورودی کاربر می‌آید، برای مثال اگر مجموعه‌ای از آدرس‌های ثابت، محدود و شناخته‌شده دارید که نیاز به کدگذاری جغرافیایی دارند. رمزگذاری جغرافیایی سمت سرور همچنین می تواند به عنوان یک پشتیبان برای زمانی که کد جغرافیایی سمت سرویس گیرنده با شکست مواجه می شود مفید باشد.

برخی از نگرانی های احتمالی افزایش غیرضروری تاخیر برای کاربر و نتایج کدگذاری جغرافیایی با کیفیت کمتری نسبت به سمت مشتری است زیرا اطلاعات کمتری در درخواست موجود است.