انتقال از Geocoding نسخه ۳ به نسخه ۴

توسعه‌دهندگان منطقه اقتصادی اروپا (EEA)

Geocoding API v4 چندین روش جدید معرفی می‌کند که جایگزین عملکرد در نسخه ۳ این API می‌شود. این راهنما به شما نشان می‌دهد که چگونه برنامه خود را برای استفاده از روش‌های جدید v4 منتقل کنید.

می‌توانید از کلیدهای میانای API موجودتان با روش‌های جدید v4 استفاده کنید. بااین‌حال، اگر درخواست افزایش سهمیه برای نسخه ۳ میانای برنامه‌سازی کاربردی داده‌اید، باید برای میاناهای برنامه‌سازی کاربردی جدید نسخه ۴ درخواست افزایش سهمیه بدهید.

انتقال از «زمین‌کدیابی مستقیم» نسخه ۳

اگر از v3 Geocoding برای زمین‌کدیابی نشانی‌ها استفاده می‌کنید، باید به روش v4 Geocode an address مهاجرت کنید که درخواست GET را می‌پذیرد.

v4 API نام‌ها، ساختار، و پشتیبانی از چندین پارامتر را تغییر می‌دهد. توصیه می‌کنیم برای مشخص کردن فیلدهایی که می‌خواهید در پاسخ برگردانده شوند، از ماسک فیلد استفاده کنید.

درخواست کردن تغییرات پارامتر

پارامتر v3 پارامتر v4 یادداشت‌ها
‫address،‏ components address نشانی غیرساختارمند (نسخه ۳ address) اکنون در مسیر نشانی وب ارسال می‌شود. عناصر نشانی ساختاریافته (v3 components) می‌توانند به‌عنوان پارامترهای پُرسمان address.* منتقل شوند. بازتولید فیلترهای مؤلفه نسخه ۳ را ببینید.
bounds locationBias.rectangle تغییر نام داده شد؛ ساختار به شیء تغییر کرد.
language languageCode نام تغییر کرد. وقتی حذف شود، v3 از سرصفحه Accept-Language استفاده می‌کند یا به‌طور پیش‌فرض به en می‌رود، درحالی‌که v4 به‌طور پیش‌فرض به زبان محلی و نویسه مکان می‌رود.
region regionCode نام تغییر کرد. وقتی حذف شود، v3 به‌طور پیش‌فرض روی us قرار می‌گیرد، درحالی‌که v4 مقدار پیش‌فرض ندارد.
extra_computations برداشته شد با روش SearchDestinations جایگزین شده است.

تغییرات فیلد پاسخ

فیلد v3 فیلد v4 یادداشت‌ها
‫status،‏ error_message برداشته شد نسخه ۴ از کدهای وضعیت HTTP و متن‌های خطا استفاده می‌کند.
results.address_components.long_name / results.address_components.short_name results.addressComponents.longText / results.addressComponents.shortText نام تغییر کرد.
results.geometry.location_type results.granularity نام تغییر کرد.
results.geometry.location results.location نام‌های فیلد: lat/lng -> latitude/longitude.
results.geometry.viewport results.viewport نام فیلدها: northeast/southwest -> high/low.
results.postcode_localities results.postalCodeLocalities نام تغییر کرد. اکنون برای یک یا چند محل برگردانده شده است (نسخه ۳ به بیشتر از ۱ نیاز دارد).
results.partial_match برداشته شد
جدید results.addressComponents.languageCode زبان عنصر نشانی خاص.
جدید results.bounds کران‌های صریح بااستفاده از high/low.
جدید results.place نام منبع برای مکان.
جدید results.postalAddress شیء PostalAddress ساختاریافته.

بازتولید فیلترهای عنصر v3

«زمین‌کدیابی پیش‌رو» در «زمین‌کدیابی» نسخه ۳ شامل پارامتر components بود که فیلتر کردن سخت نتایج را برای مؤلفه‌های خاص (مثلاً components=country:US) فعال می‌کرد. «زمین‌کدیابی پیش‌رو» در نسخه ۴ از این نوع فیلتر کردن سخت در پارامترهای درخواست پشتیبانی نمی‌کند. در نسخه ۴، می‌توانید اطلاعات نشانی را به‌صورت یک رشته غیرساختاریافته در مسیر یا به‌صورت پارامترهای پُرسمان ساختاریافته مانند address.addressLines،‏ address.locality،‏ address.administrativeArea،‏ address.postalCode، و address.regionCode ارائه دهید. پارامترهای ساختاری به‌عنوان فیلترهای سخت عمل نمی‌کنند. درعوض، همه عناصر ارائه‌شده با هم ترکیب می‌شوند تا نشانی کاملی را تشکیل دهند که میانای برنامه‌سازی کاربردی تلاش می‌کند آن را زمین‌کدگذاری کند. این «میانای برنامه‌سازی کاربردی» در همه عناصر، بهترین مطابقت را برای کل نشانی مشخص‌شده جستجو می‌کند. ارائه مؤلفه‌ها به‌صورت ساختاریافته می‌تواند به میانای برنامه‌سازی کاربردی کمک کند تا قصد را بهتر درک کند، به‌ویژه زمانی که اطلاعات نشانی از فیلدهای فرم جداگانه جمع‌آوری می‌شود. این کار می‌تواند به میانای برنامه‌سازی کاربردی کمک کند تا غلط‌های املایی جزئی یا ابهامات موجود در هر مؤلفه را مدیریت کند، زیرا نوع اطلاعات در هر فیلد مشخص است.

برای دستیابی به رفتاری مشابه فیلترهای مؤلفه سخت v3، باید فیلتر کردن سمت کارخواه را در آرایه results که توسط میانای برنامه‌سازی کاربردی v4 براساس اشیاء postalAddress و addressComponents در پاسخ برگردانده شده است پیاده‌سازی کنید.

جدول زیر بهترین مطابقت بین فیلترهای v3 components و فیلدهای v4 postalAddress را نشان می‌دهد:

فیلتر عنصر v3 فیلد پاسخ v4
country postalAddress.regionCode
postal_code postalAddress.postalCode
administrative_area ‫postalAddress.administrativeArea یا addressComponents

نمونه‌های فیلتر کردن سمت کارخواه

مثال‌های زیر نشان می‌دهند که چگونه نتایج را فیلتر کنید تا به رفتاری مشابه فیلتر کردن مؤلفه v3 برای فیلدهای پشتیبانی‌شده دست یابید: کشور، تقسیمات کشوری، و کد پستی. توصیه نمی‌شود که فیلتر کردن را روی فیلدهای دیگر انجام دهید زیرا معیار فیلتر کردن قابل‌اعتمادی وجود ندارد.

فیلتر کردن براساس کشور

address.regionCode را از درخواستتان با postalAddress.regionCode در هر نتیجه مطابقت دهید. توجه داشته باشید که اگرچه API کدهای منطقه حروف کوچک را در درخواست می‌پذیرد، اما همیشه آن‌ها را در پاسخ به‌صورت حروف بزرگ برمی‌گرداند، بنابراین باید ورودی خود را قبل‌از مقایسه به حروف بزرگ تبدیل کنید.

نمونه کد Python
def filter_by_country(results, region_code):
    return [
        res for res in results
        if res.get('postalAddress', {}).get('regionCode') == region_code.upper()
    ]

# Example usage:
# v4_response = ... # API call response
# filtered = filter_by_country(v4_response.get('results', []), 'US')
نمونه کد Node.js
function filterByCountry(results, regionCode) {
    return results.filter(res => res.postalAddress?.regionCode === regionCode.toUpperCase());
}

// Example usage:
// const v4Response = ... # API call response
// const filtered = filterByCountry(v4Response.results, 'US');
فیلتر کردن براساس «تقسیمات کشوری»

address.administrativeArea را از درخواستتان با postalAddress.administrativeArea در هر نتیجه مطابقت دهید. مشابه کد کشور، باید ورودی خود را قبل‌از مقایسه به حروف بزرگ تبدیل کنید. این مورد فقط زمانی قابل‌اطمینان است که administrativeArea در درخواست شما با اختصار استاندارد ۲ حرفی ارائه شده باشد. postalAddress.administrativeArea در پاسخ ممکن است به دلایل مختلفی مستقیماً با پسوندهای کد ISO 3166-2 مطابقت نداشته باشد. اولاً، در برخی مناطق، بخش فرعی مربوط به کد ISO 3166-2 بخشی از نمایش استاندارد نشانی‌های پستی نیست. برای مثال، در اسپانیا، تقسیمات کشوری سطح ۱ (مثلاً «CN» برای جزایر قناری) ممکن است در addressComponents وجود داشته باشد، اما postalAddress.administrativeArea ممکن است حاوی منطقه سطح ۲ باشد (مثلاً «سانتا کروس د تنریف»). ثانیاً، در برخی مناطق، از مخفف بخش فرعی معمولاً استفاده نمی‌شود و در postalAddress.administrativeArea با نام طولانی‌تری نشان داده می‌شود (به دلایل مشابه، addressComponents.shortText برای مؤلفه نشانی مربوط به بخش فرعی ممکن است با پسوند کد ISO 3166-2 بخش فرعی مطابقت نداشته باشد). علاوه‌براین، در برخی موارد ممکن است بخش فرعی در مؤلفه نشانی برای administrative_area_level_n با n بزرگ‌تر از ۱ نشان داده شود. برای جامع‌ترین نتایج، باید در هر دو postalAddress.administrativeArea و هر addressComponents با نوع administrative_area_level_n (برای نمونه administrative_area_level_1) به‌دنبال مطابقت بگردید.

نمونه کد Python
def filter_by_admin_area(results, admin_area):
    target = admin_area.upper()
    filtered = []
    for res in results:
        # Check postalAddress
        pa_aa = res.get('postalAddress', {}).get('administrativeArea', '')
        if pa_aa == target:
            filtered.append(res)
            continue
        # Check all administrative area levels in addressComponents
        for comp in res.get('addressComponents', []):
            is_admin_level = any(t.startswith('administrative_area_level_')
                               for t in comp.get('types', []))
            if is_admin_level:
                short = comp.get('shortText', '')
                if short == target:
                    filtered.append(res)
                    break
    return filtered

# Example usage:
# filtered = filter_by_admin_area(v4_response.get('results', []), 'CA')
نمونه کد Node.js
function filterByAdminArea(results, adminArea) {
    const target = adminArea.toUpperCase();
    return results.filter(res => {
        // Check postalAddress.administrativeArea
        if (res.postalAddress?.administrativeArea === target) {
            return true;
        }
        // Check addressComponents for any administrative area level
        return res.addressComponents?.some(c => {
            const isAdmin = c.types?.some(t => t.startsWith('administrative_area_level_'));
            return isAdmin && c.shortText === target;
        });
    });
}

// Example usage:
// const filtered = filterByAdminArea(v4Response.results, 'CA');
فیلتر کردن براساس کد پستی

address.postalCode را از درخواستتان با postalAddress.postalCode در هر نتیجه مطابقت دهید. باید هم کد پستی ورودی و هم کد پستی نتیجه را قبل‌از مقایسه نرمال‌سازی کنید. منطق عادی‌سازی به‌شدت به منطقه وابسته است. یک رویکرد پایه شامل برداشتن فاصله‌ها و خط تیره‌ها و تبدیل به یک حالت ثابت است.

برای مدیریت پیشوندهای کد پستی (برای نمونه، «L2» در پادشاهی متحد) یا پسوندها (برای نمونه، «+۴» در کد پستی ایالات متحده)، ممکن است به عادی‌سازی پیشرفته‌تری نیاز باشد. منطق عادی‌سازی خاص موردنیاز بسته به کشور و قالب‌های کد پستی مربوطه متفاوت خواهد بود. ممکن است لازم باشد توابع عادی‌سازی ارائه‌شده را تطبیق دهید یا منطق پیچیده‌تری را برای مناطقی که هدف‌یابی می‌کنید پیاده‌سازی کنید.

نمونه ارائه‌شده کدهای پستی ایالات متحده را مدیریت می‌کند و امکان مطابقت دادن با کد ۵ رقمی پایه را فراهم می‌کند، حتی اگر کد پستی ۹ رقمی ارائه یا برگردانده شده باشد.

نمونه کد Python (با تمرکز بر کد پستی ایالات متحده)
import re

def normalize_postal_code_us(pc):
    # Basic normalization for US: uppercase, alphanumeric only
    if not pc:
        return ""
    normalized = re.sub(r'[^A-Z0-9]', '', pc.upper())
    # Return only the first 5 digits for US ZIP codes
    return normalized[:5]

def filter_by_postal_code_us(results, postal_code):
    normalized_input = normalize_postal_code_us(postal_code)
    if not normalized_input:
        return []
    filtered_results = []
    for res in results:
        pa_pc = res.get('postalAddress', {}).get('postalCode', '')
        if normalize_postal_code_us(pa_pc) == normalized_input:
            filtered_results.append(res)
    return filtered_results

# Example usage:
# Matches '94043', '94043-1351', '940431351'
# filtered = filter_by_postal_code_us(v4_response.get('results', []), '94043')
# filtered = filter_by_postal_code_us(v4_response.get('results', []), '94043-1234')
نمونه کد Node.js (متمرکز بر کد پستی ایالات متحده)
function normalizePostalCodeUs(pc) {
    // Basic normalization for US: uppercase, alphanumeric only
    const normalized = (pc || '').toUpperCase().replace(/[^A-Z0-9]/g, '');
    // Return only the first 5 digits for US ZIP codes
    return normalized.substring(0, 5);
}

function filterByPostalCodeUs(results, postalCode) {
    const normalizedInput = normalizePostalCodeUs(postalCode);
    if (!normalizedInput) {
        return [];
    }
    return results.filter(res => {
        const paPc = res.postalAddress?.postalCode || '';
        return normalizePostalCodeUs(paPc) === normalizedInput;
    });
}

// Example usage:
// Matches '94043', '94043-1351', '940431351'
// const filtered = filterByPostalCodeUs(v4Response.results, '94043');
// const filtered = filterByPostalCodeUs(v4Response.results, '94043-1234');

انتقال از «زمین‌کدیابی معکوس نسخه ۳»

اگر از زمین‌کدیابی معکوس نسخه ۳ برای تبدیل مختصات به نشانی استفاده می‌کنید، باید به روش زمین‌کدیابی معکوس مکان نسخه ۴ که درخواست GET را می‌پذیرد مهاجرت کنید.

v4 API نام‌ها، ساختار، و پشتیبانی از چندین پارامتر را تغییر می‌دهد. توصیه می‌کنیم از ماسک فیلد استفاده کنید تا فیلدهایی را که می‌خواهید در پاسخ برگردانده شود مشخص کنید.

درخواست کردن تغییرات پارامتر

پارامتر v3 پارامتر v4 یادداشت‌ها
language languageCode نام تغییر کرد. وقتی حذف شود، v3 از سرصفحه Accept-Language استفاده می‌کند یا به‌طور پیش‌فرض از en استفاده می‌کند، درحالی‌که v4 به‌طور پیش‌فرض از زبان و خط محلی مکان استفاده می‌کند.
region regionCode نام تغییر کرد. وقتی حذف شود، v3 به‌طور پیش‌فرض روی us تنظیم می‌شود، درحالی‌که v4 مقدار پیش‌فرض ندارد.
result_type types تغییر نام داده شد؛ از پارامترهای پُرسمان تکراری استفاده می‌کند.
location_type granularity تغییر نام داده شد؛ از پارامترهای پُرسمان تکراری استفاده می‌کند.
extra_computations برداشته شد با روش SearchDestinations جایگزین شده است.

تغییرات فیلد پاسخ

فیلد v3 فیلد v4 یادداشت‌ها
‫status،‏ error_message برداشته شد نسخه ۴ از کدهای وضعیت HTTP و متن‌های خطا استفاده می‌کند.
results.address_components.long_name / results.address_components.short_name results.addressComponents.longText / results.addressComponents.shortText نام تغییر کرد.
results.geometry.location_type results.granularity نام تغییر کرد.
results.geometry.location results.location نام‌های فیلد: lat/lng -> latitude/longitude.
results.geometry.viewport results.viewport نام فیلدها: northeast/southwest -> high/low.
جدید results.addressComponents.languageCode زبان عنصر نشانی خاص.
جدید results.bounds کران‌های صریح بااستفاده از high/low.
جدید results.place نام منبع برای مکان.
جدید results.postalAddress شیء ساختاریافته PostalAddress.

انتقال از توصیف‌کننده‌های نشانی نسخه ۳

اگر از address_descriptor برای دریافت اطلاعات بیشتر درباره مکان با Geocoding نسخه ۳ استفاده می‌کنید، باید به استفاده از فیلد landmarks از SearchDestinationsResponse مهاجرت کنید.

انتقال از زمین‌کدیابی «مکان» نسخه ۳

اگر از place_id برای دریافت نشانی شناسه مکان خاصی با Geocoding نسخه ۳ استفاده می‌کنید، باید به روش Place Geocoding نسخه ۴ که درخواست GET را می‌پذیرد مهاجرت کنید.

v4 API نام‌ها، ساختار، و پشتیبانی از چندین پارامتر را تغییر می‌دهد. توصیه می‌کنیم از ماسک فیلد استفاده کنید تا فیلدهایی را که می‌خواهید در پاسخ برگردانده شود مشخص کنید.

درخواست کردن تغییرات پارامتر

پارامتر v3 پارامتر v4 یادداشت‌ها
place_id فیلد place در پروتکل درخواست «شناسه مکان» اکنون به‌عنوان پارامتر مسیر places/{place} ارائه می‌شود، برای مثال: https://geocode.googleapis.com/v4/geocode/places/ChIJj61dQgK6j4AR4GeTYWZsKWw. این مورد به فیلد مکان در درخواست زیرین نگاشت می‌شود.
language languageCode نام تغییر کرد. وقتی حذف شود، v3 از سرصفحه Accept-Language استفاده می‌کند یا به‌طور پیش‌فرض از en استفاده می‌کند، درحالی‌که v4 به‌طور پیش‌فرض از زبان و خط محلی مکان استفاده می‌کند.
region regionCode نام تغییر کرد. وقتی حذف شود، v3 به‌طور پیش‌فرض روی us قرار می‌گیرد، درحالی‌که v4 مقدار پیش‌فرض ندارد.

تغییرات فیلد پاسخ

فیلد v3 فیلد v4 یادداشت‌ها
‫status،‏ error_message برداشته شد نسخه ۴ از کدهای وضعیت HTTP و متن‌های خطا استفاده می‌کند.
results (root) نسخه ۴ یک شیء نتیجه واحد برمی‌گرداند، نه آرایه results.
results.address_components.long_name / results.address_components.short_name addressComponents.longText / addressComponents.shortText نام تغییر کرد.
results.geometry.location_type granularity نام تغییر کرد.
results.geometry.location location نام‌های فیلد: lat/lng -> latitude/longitude.
results.geometry.viewport viewport نام فیلدها: northeast/southwest -> high/low.
results.postcode_localities postalCodeLocalities نام تغییر کرد. اکنون برای یک یا چند محل برگردانده شده است (نسخه ۳ به بیشتر از ۱ نیاز دارد).
جدید addressComponents.languageCode زبان عنصر نشانی خاص.
جدید bounds کران‌های صریح بااستفاده از high/low.
جدید place نام منبع برای مکان.
جدید postalAddress شیء ساختاریافته PostalAddress.

انتقال از «داده‌های فرامحلی زمین‌کدیابی» به «مقصدها»

ویژگی‌های زیر در Geocoding API v3 با روش SearchDestinations در Geocoding API v4 جایگزین می‌شود:

  • ورودی‌ها
  • نقاط پیمایش
  • طرح‌های ساختمان
  • محوطه

اگر از Geocoding API v3 برای ویژگی‌های بالا استفاده می‌کردید، از این سند برای کمک به استفاده از روش SearchDestinations به‌جای آن برای دریافت این ویژگی‌ها استفاده کنید. این سند توضیح می‌دهد که این ویژگی‌ها را در کجای پاسخ SearchDestinations پیدا کنید و تفاوت‌های نحوه نمایش این ویژگی‌ها در پاسخ‌های میانای برنامه‌سازی کاربردی بین Geocoding API v3 و روش SearchDestinations Geocoding API v4 را شرح می‌دهد.

ورودی‌ها

برای دریافت ورودی‌های مرتبط با destination، از فیلد destination.entrances استفاده کنید.

توجه داشته باشید که قالب entrance کمی با قالب ورودی در Geocoding API نسخه ۳ متفاوت است. هر ورودی در destination.entrances فیلدهای زیر را دارد:

  • displayName - این فیلد اختیاری جدیدی است که نامی قابل‌خواندن برای انسان برای ورودی خواهد داشت، برای مثال «دروازه ب».
  • ‫location - این مکان از نوع LatLng است، که با قالب استفاده‌شده در Geocoding API v3 متفاوت است.
  • tags - این همان فیلد tags ورودی‌های Geocoding API v3 است.
  • place - مشابه فیلد buildingPlaceId ورودی‌ها از Geocoding API v3. بااین‌حال، «شناسه مکان» در این فیلد می‌تواند برای «مکان» از هر نوعی باشد، نه لزوماً فقط ساختمان.

برای دریافت نقاط ناوبری مرتبط با destination، از فیلد destination.navigationPoints استفاده کنید.

توجه داشته باشید که قالب navigationPoint کمی با قالب نقطه پیمایش در Geocoding API نسخه ۳ متفاوت است. هر نقطه ناوبری در destination.navigationPoints فیلدهای زیر را دارد:

  • displayName - این فیلد اختیاری جدیدی است که نامی قابل‌خواندن برای انسان برای نقطه پیمایش خواهد داشت، برای مثال «خیابان پنجم».
  • location - این مکان از نوع LatLng است، که با قالب استفاده‌شده در Geocoding API v3 متفاوت است.
  • travelModes - این مورد مشابه فیلد restrictedTravelModes از نقاط پیمایش در Geocoding API v3 است. مقادیر ممکن enum یکسان هستند، تنها تفاوت این است که این فیلد اکنون حالت‌های سفر قابل‌قبول برای نقطه ناوبری را نشان می‌دهد، نه حالت‌های سفر محدودشده.
  • usage - این فیلد جدیدی است که حاوی موارد استفاده پشتیبانی‌شده توسط نقطه ناوبری است.

طرح‌های ساختمان

برای دریافت رئوس ساختمان‌های منسوب به destination، باید از فیلد displayPolygon placeView در destination که ساختمان‌ها را نشان می‌دهد استفاده کنید. برای هر placeView، می‌توانید بااستفاده از فیلد placeView.structureType بررسی کنید که آیا ساختمان است یا نه. اگر نوع ساختار BUILDING باشد، می‌توانید طرح کلی را از فیلد placeView.displayPolygon دریافت کنید. placeView همچنین فیلدهای اضافی برای ساختمان خواهد داشت که در Geocoding API v3 وجود نداشت.

destination می‌تواند شیء placeView داشته باشد که نشان‌دهنده ساختمان در فیلدهای زیر است:

  • destination.primary - این مکان اصلی برای مقصد است.
  • destination.containingPlaces - این فیلد تکراری است که می‌تواند مکان‌های بزرگ‌تری را که مکان اصلی را «دربرمی‌گیرند» نگه دارد. برای مثال، اگر مکان اصلی subpremise باشد، containingPlaces معمولاً placeView نشان‌دهنده ساختمان را نگه می‌دارد.
  • destination.subDestinations - این فیلد تکراری است که می‌تواند زیرمقصدهای مکان اصلی را در خود جای دهد. برای مثال، واحدهای آپارتمانی مجزا در یک ساختمان. این فیلد معمولاً placeView ندارد که نشان‌دهنده ساختمان باشد.

توجه داشته باشید که قالب placeView.displayPolygon با قالب طرح کلی ساختمان در Geocoding API نسخه ۳ مطابقت دارد، که قالب GeoJSON بااستفاده از قالب RFC 7946 است.

محوطه

مشابه ساختن طرح کلی، برای دریافت دلایل مرتبط با destination، باید از فیلد displayPolygon اشیای placeView در destination که نشان‌دهنده دلایل هستند استفاده کنید. برای هر placeView، می‌توانید بااستفاده از فیلد placeView.structureType بررسی کنید که آیا زمین است یا نه. اگر نوع ساختار GROUNDS باشد، می‌توانید طرح کلی را از فیلد placeView.displayPolygon دریافت کنید. placeView همچنین فیلدهای اضافی برای زمین‌هایی خواهد داشت که در Geocoding API v3 نبودند.

destination می‌تواند شیء placeView داشته باشد که نشان‌دهنده محوطه در فیلدهای زیر است:

  • destination.primary
  • destination.containingPlaces
  • destination.subDestinations

توجه داشته باشید که قالب placeView.displayPolygon با قالب رئوس مطالب زمین در Geocoding API v3 مطابقت دارد، که قالب GeoJSON است و از قالب RFC 7946 استفاده می‌کند.

دقت نتایج

در Geocoding API v3، فیلد location_type در هندسه پاسخ دقت نتایج را نشان می‌داد و برخی‌از مشتریان نتایج را براساس این مقادیر (ROOFTOP، RANGE_INTERPOLATED، GEOMETRIC_CENTER، و APPROXIMATE) رتبه‌بندی یا فیلتر می‌کردند. در انتقال‌های استاندارد Geocoding API v4، نام این فیلد به granularity تغییر کرده است.

در «میانای برنامه‌سازی کاربردی مقصدها» (نسخه ۴ SearchDestinations)، فیلد location_type وجود ندارد. درعوض، اطلاعات فضایی به روش دیگری مدیریت می‌شود:

  • بدون نیاز به فیلتر کردن دستی در سمت مشتری: درحالی‌که «مکان‌گذاری جغرافیایی» استاندارد نتایج متعددی را در سطوح مختلف جزئیات ارائه می‌دهد، روش SearchDestinations با تبدیل به یک مقصد بهینه‌سازی‌شده واحد درصورت امکان، ابهام را به حداقل می‌رساند. این کار نیاز مشتریان را به فیلتر کردن براساس نوع مکان برای تعیین بهترین نتیجه برطرف می‌کند.
  • اطلاعات فضایی که با نوع ساختار و چندضلعی‌های نمایش نشان داده می‌شود: هندسه و ساختار فضایی با موارد زیر نشان داده می‌شود:
    • ‫displayPolygon (برای هندسه دقیق).
    • فیلد structureType در شیء placeView.
  • نگاشت نوع ساختار:
    • structureType از POINT، BUILDING، یا SECTION معمولاً با آنچه قبلاً ROOFTOP نامیده می‌شد مطابقت دارد.
    • ‫structureType از GROUNDS معمولاً معادل GEOMETRIC_CENTER است.

برای درخواست این ویژگی‌ها، از پوشش فیلد استفاده کنید

روش SearchDestinations به ماسک فیلد نیاز دارد، همان‌طور که در انتخاب فیلدها برای برگرداندن توضیح داده شده است. پوشش فیلد را می‌توان روی * تنظیم کرد تا همه فیلدها برگردانده شود، یا می‌توانید آن را روی فیلدهای خاصی که می‌خواهید دریافت کنید تنظیم کنید. برای مثال، درخواست API زیر ماسک فیلد را تنظیم می‌کند تا همه فیلدهای لازم برای دریافت ورودی‌ها، نقاط پیمایش، طرح‌های کلی ساختمان، و زمین‌های مقصد را دریافت کند:

curl -X POST -d '{"place": "places/ChIJG3kh4hq6j4AR_XuFQnV0_t8"}' \
  -H "X-Goog-Api-Key: API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Goog-FieldMask: destinations.entrances,destinations.navigationPoints,destinations.primary,destinations.containingPlaces,destinations.subDestinations" \
  https://geocode.googleapis.com/v4/geocode/destinations

ملاحظات امنیتی

Geocoding API v4 به‌عنوان یک میانای برنامه‌سازی کاربردی سروربه‌سرور طراحی شده است. مسیر انتقال مستقیم برای کاربران جاوا اسکریپت از نسخه ۳ به نسخه ۴ وجود ندارد. فراخوانی روش‌های v4 مستقیماً از جاوا اسکریپت سمت کارخواه (برای مثال، در مرورگر) بااستفاده از کلید میانای برنامه‌سازی کاربردی، کلید میانای برنامه‌سازی کاربردی شما را درمعرض خطر بالای سرقت و سوءاستفاده قرار می‌دهد.

محدودیت‌های ارجاع‌دهنده HTTP، اگرچه مفید هستند، اما محافظت کافی برای نقاط پایانی سرویس وب نیستند زیرا مهاجمانی که سرصفحه Referer را در درخواست‌های خود جعل می‌کنند، می‌توانند به‌راحتی از آن‌ها عبور کنند.

روش توصیه‌شده برای استفاده از Geocoding API v4 از سرور زیرینه خودتان است. برنامه کارخواه شما باید درخواست‌ها را به این سرور واسطه ارسال کند، که سپس بااستفاده از کلید میانای برنامه‌سازی کاربردی محافظت‌شده (برای مثال، کلیدی که در متغیر محیطی یا مدیر مخفی ذخیره شده است) به‌طور ایمن با Google API تماس می‌گیرد. این کار تضمین می‌کند که کلید API شما هرگز در کد نمای جلویی فاش نشود.

جایگزین‌هایی برای نیازهای سمت کارخواه

اگر نیازهای سمت کارخواه دارید که به زمین‌کدیابی نیاز دارند، از یکی از راه‌حل‌های موجود سمت کارخواه استفاده کنید: