Geocoding v3 থেকে v4-এ মাইগ্রেট করা

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA)-এর ডেভেলপার

Geocoding API v4-এ বেশ কিছু নতুন পদ্ধতি যোগ করা হয়েছে যা API-এর v3-তে থাকা কার্যকারিতাকে প্রতিস্থাপন করে। নতুন v4 পদ্ধতি ব্যবহার করার জন্য কীভাবে আপনার অ্যাপ মাইগ্রেট করবেন তা এই গাইডে দেখানো হয়েছে।

আপনি নতুন v4 পদ্ধতির সাথে আগে থেকে থাকা API কী ব্যবহার করতে পারবেন। তবে, আপনি যদি API-এর v3 ভার্সনে কোটা বাড়ানোর অনুরোধ করে থাকেন, তাহলে আপনাকে নতুন v4 API-তে কোটা বাড়ানোর অনুরোধ করতে হবে।

v3 ফরওয়ার্ড জিওকোডিং থেকে মাইগ্রেট করা

আপনি যদি ঠিকানা জিওকোড করতে v3 জিওকোডিং ব্যবহার করেন, তাহলে আপনাকে v4 ঠিকানা জিওকোড করুন পদ্ধতিতে মাইগ্রেট করতে হবে, যা GET অনুরোধ গ্রহণ করে।

v4 API-তে বিভিন্ন প্যারামিটারের নাম, স্ট্রাকচার ও সাপোর্ট পরিবর্তন করা হয়েছে। আমরা দৃঢ়ভাবে সাজেস্ট করি যে আপনি ফিল্ড মাস্ক ব্যবহার করে সেইসব ফিল্ড নির্দিষ্ট করুন যেগুলি আপনি উত্তরে পেতে চান।

অনুরোধ প্যারামিটারে পরিবর্তন

v3 প্যারামিটার v4 প্যারামিটার নোট
address, components address URL পাথে এখন আনস্ট্রাকচার্ড অ্যাড্রেস (v3 address) পাস করা হয়। স্ট্রাকচার্ড অ্যাড্রেস কম্পোনেন্ট (v3 components) address.* কোয়েরি প্যারামিটার হিসেবে পাস করা যেতে পারে। v3 কম্পোনেন্ট ফিল্টার রিপ্রোডিউস করা দেখুন।
bounds locationBias.rectangle নাম পরিবর্তন করা হয়েছে; স্ট্রাকচার পরিবর্তন করে অবজেক্ট করা হয়েছে।
language languageCode নাম পরিবর্তন করা হয়েছে। বাদ দেওয়া হলে, v3 Accept-Language হেডার ব্যবহার করে বা ডিফল্ট হিসেবে en ব্যবহার করে, যেখানে v4 ডিফল্ট হিসেবে লোকেশনের স্থানীয় ভাষা ও স্ক্রিপ্ট ব্যবহার করে।
region regionCode নাম পরিবর্তন করা হয়েছে। বাদ দেওয়া হলে, v3 ডিফল্ট হিসেবে us-এ সেট হয়ে যায়, যেখানে v4-এর কোনও ডিফল্ট ভ্যালু নেই।
extra_computations সরিয়ে দেওয়া হয়েছে SearchDestinations পদ্ধতি দ্বারা প্রতিস্থাপিত।

উত্তর যোগ করার ফিল্ডে পরিবর্তন

v3 ফিল্ড v4 ফিল্ড নোট
status, error_message সরিয়ে দেওয়া হয়েছে v4 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 নাম পরিবর্তন করা হয়েছে। এখন এক বা একাধিক লোকালিটির জন্য রিটার্ন করা হয়েছে (v3 প্রয়োজন >১)।
results.partial_match সরানো হয়েছে
নতুন results.addressComponents.languageCode ঠিকানার নির্দিষ্ট অংশের ভাষা।
নতুন results.bounds high/low ব্যবহার করে স্পষ্ট বাউন্ড।
নতুন results.place জায়গার জন্য রিসোর্সের নাম।
নতুন results.postalAddress স্ট্রাকচার্ড PostalAddress অবজেক্ট।

v3 কম্পোনেন্ট ফিল্টার রিপ্রোডিউস করুন

জিওকোডিং v3-এ ফরওয়ার্ড জিওকোডিং-এ একটি components প্যারামিটার অন্তর্ভুক্ত ছিল যা নির্দিষ্ট কম্পোনেন্টের জন্য ফলাফল হার্ড ফিল্টার করার সুবিধা চালু করত (যেমন, components=country:US)। v4-এ ফরওয়ার্ড জিওকোডিং-এ অনুরোধ প্যারামিটারে এই ধরনের হার্ড ফিল্টার করার সুবিধা কাজ করে না। v4-এ, আপনি ঠিকানার তথ্য পাথে একটি আনস্ট্রাকচার্ড স্ট্রিং হিসেবে অথবা address.addressLines, address.locality, address.administrativeArea, address.postalCode এবং address.regionCode-এর মতো স্ট্রাকচার্ড কোয়েরি প্যারামিটার হিসেবে দিতে পারেন। স্ট্রাকচারড প্যারামিটার হার্ড ফিল্টার হিসেবে কাজ করে না। পরিবর্তে, API যে সম্পূর্ণ অ্যাড্রেস জিওকোড করার চেষ্টা করবে সেটি তৈরি করতে, প্রদান করা সব কম্পোনেন্ট একত্রিত করা হয়। API, সব কম্পোনেন্ট জুড়ে নির্দিষ্ট করা সম্পূর্ণ ঠিকানার জন্য সবচেয়ে ভাল ম্যাচ সার্চ করে। স্ট্রাকচার্ড উপায়ে কম্পোনেন্ট প্রদান করলে, API-কে উদ্দেশ্য আরও ভালোভাবে বুঝতে সাহায্য করতে পারে, বিশেষ করে যখন ঠিকানা সংক্রান্ত তথ্য আলাদা ফর্ম ফিল্ড থেকে সংগ্রহ করা হয়। এটি API-কে প্রতিটি কম্পোনেন্টের মধ্যে ছোটখাটো টাইপো বা অস্পষ্টতা ম্যানেজ করতে সাহায্য করতে পারে, কারণ প্রতিটি ফিল্ডে তথ্যের ধরন স্পষ্ট।

v3-এর হার্ড কম্পোনেন্ট ফিল্টারের মতো আচরণ পেতে, আপনাকে অবশ্যই v4 API-এর মাধ্যমে রিটার্ন করা results অ্যারেতে ক্লায়েন্ট-সাইড ফিল্টারিং প্রয়োগ করতে হবে। এটি 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-এ লেভেল ২ এলাকা (যেমন, "Santa Cruz de Tenerife") থাকতে পারে। দ্বিতীয়ত, কিছু অঞ্চলে উপবিভাগের সংক্ষিপ্ত নাম সাধারণত ব্যবহার করা হয় না এবং এটি postalAddress.administrativeArea আরও বড় নাম দিয়ে দেখানো হয় (একই কারণে, উপবিভাগের সাথে সম্পর্কিত ঠিকানার কম্পোনেন্ট addressComponents.shortText উপবিভাগের ISO 3166-2 কোড সাফিক্সের সাথে নাও মিলতে পারে)। এছাড়াও, কিছু ক্ষেত্রে সাবডিভিশন, administrative_area_level_n-এর জন্য অ্যাড্রেস কম্পোনেন্টে দেখানো হতে পারে, যেখানে n-এর মান ১-এর বেশি। সবচেয়ে বিস্তারিত ফলাফল পেতে, আপনাকে postalAddress.administrativeArea এবং administrative_area_level_n ধরনের (যেমন, administrative_area_level_1) যেকোনও addressComponents-এর মধ্যে মিল আছে কিনা তা চেক করতে হবে।

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") বা সাফিক্স (যেমন, মার্কিন যুক্তরাষ্ট্রের পিন কোডে "+4") ম্যানেজ করার জন্য আরও উন্নত নরমালাইজেশনের প্রয়োজন হতে পারে। প্রয়োজনীয় নির্দিষ্ট নর্মালাইজেশন লজিক, সংশ্লিষ্ট দেশ ও পোস্টাল কোডের ফর্ম্যাটের উপর নির্ভর করে পরিবর্তিত হবে। আপনাকে হয়ত প্রদত্ত নরমালাইজেশন ফাংশন অ্যাডাপ্ট করতে হবে অথবা আপনি যে অঞ্চলকে টার্গেট করছেন তার জন্য আরও জটিল লজিক প্রয়োগ করতে হবে।

প্রদত্ত উদাহরণটি মার্কিন যুক্তরাষ্ট্রের পিন কোডগুলি পরিচালনা করে এবং ZIP+4 প্রদান বা ফেরত দেওয়া হলেও ৫-সংখ্যার বেসে মিল করার অনুমতি দেয়।

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');

v3 রিভার্স জিওকোডিং থেকে মাইগ্রেট করা

আপনি যদি স্থানাঙ্ককে ঠিকানায় পরিবর্তন করতে v3 রিভার্স জিওকোডিং ব্যবহার করেন, তাহলে আপনাকে v4 কোনও লোকেশন রিভার্স জিওকোড করুন পদ্ধতিতে মাইগ্রেট করতে হবে, যা 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 সরিয়ে দেওয়া হয়েছে v4 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 অবজেক্ট।

v3 ঠিকানা বর্ণনাকারী থেকে মাইগ্রেট করুন

আপনি যদি Geocoding v3-এর মাধ্যমে কোনও লোকেশন সম্পর্কে অতিরিক্ত তথ্য পেতে address_descriptor ব্যবহার করেন, তাহলে আপনাকে অবশ্যই SearchDestinationsResponse-এর landmarks ফিল্ড ব্যবহার করার জন্য মাইগ্রেট করতে হবে।

v3 প্লেস জিওকোডিং থেকে মাইগ্রেট করা

আপনি যদি Geocoding v3-এর মাধ্যমে কোনও নির্দিষ্ট স্থান আইডির ঠিকানা পেতে place_id ব্যবহার করেন, তাহলে আপনাকে অবশ্যই v4 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 সরানো হয়েছে v4 HTTP স্ট্যাটাস কোড এবং সমস্যার বডি ব্যবহার করে।
results (রুট) v4 একটি একক ফলাফল অবজেক্ট রিটার্ন করে, 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 নাম পরিবর্তন করা হয়েছে। এখন এক বা একাধিক লোকালিটির জন্য রিটার্ন করা হয়েছে (v3 প্রয়োজন >১)।
নতুন addressComponents.languageCode ঠিকানার নির্দিষ্ট অংশের ভাষা।
নতুন bounds high/low ব্যবহার করে স্পষ্ট বাউন্ড।
নতুন place জায়গার জন্য রিসোর্সের নাম।
নতুন postalAddress স্ট্রাকচার্ড PostalAddress অবজেক্ট।

জিওকোডিং হাইপারলোকাল ডেটা থেকে গন্তব্যে মাইগ্রেট করা

Geocoding API v3-এর নিম্নলিখিত ফিচারগুলি Geocoding API v4-এর SearchDestinations পদ্ধতি দ্বারা প্রতিস্থাপিত হচ্ছে:

  • প্রবেশপথ
  • নেভিগেশন পয়েন্ট
  • আউটলাইন তৈরি করা
  • গ্রাউন্ডগুলি

আপনি যদি উপরের ফিচারগুলির জন্য জিওকোডিং API v3 ব্যবহার করে থাকেন, তাহলে এই ফিচারগুলি পেতে SearchDestinations পদ্ধতি ব্যবহার করার জন্য আপনাকে সাহায্য করতে এই ডকুমেন্ট ব্যবহার করুন। এই ডকুমেন্ট থেকে জানতে পারবেন যে SearchDestinations উত্তরের কোন অংশে এইসব ফিচার খুঁজে পাবেন এবং Geocoding API v3 ও Geocoding API v4-এর SearchDestinations পদ্ধতির মধ্যে API উত্তরের মধ্যে এইসব ফিচার কীভাবে দেখানো হয় তার পার্থক্য।

প্রবেশপথ

destination-এর সাথে যুক্ত প্রবেশপথের তথ্য পেতে, destination.entrances ফিল্ড ব্যবহার করুন।

মনে রাখবেন যে entrance-এর ফর্ম্যাট Geocoding API v3-তে প্রবেশপথের ফর্ম্যাট-এর থেকে সামান্য আলাদা। destination.entrances-এ প্রতিটি প্রবেশপথের নিম্নলিখিত ফিল্ড আছে:

  • displayName - এটি একটি নতুন ঐচ্ছিক ফিল্ড যেখানে প্রবেশপথের জন্য মানুষের-পঠনযোগ্য নাম থাকবে, যেমন "গেট B"।
  • location - এটি হল LatLng ধরনের লোকেশন, যা Geocoding API v3-এ ব্যবহৃত ফর্ম্যাটের থেকে আলাদা।
  • tags - এটি Geocoding API v3-এর প্রবেশপথের tags ফিল্ডের মতোই।
  • place - Geocoding API v3 থেকে পাওয়া এন্ট্রান্সের buildingPlaceId ফিল্ডের সাথে তুলনীয়। তবে, এই ফিল্ডে থাকা প্লেস আইডি যেকোনও ধরনের জায়গার জন্য হতে পারে, শুধু বিল্ডিংয়ের জন্য নয়।

destination-এর সাথে যুক্ত নেভিগেশন পয়েন্ট পেতে, destination.navigationPoints ফিল্ড ব্যবহার করুন।

মনে রাখবেন যে navigationPoint-এর ফর্ম্যাট Geocoding API v3-এ নেভিগেশন পয়েন্ট ফর্ম্যাট থেকে কিছুটা আলাদা। destination.navigationPoints-এর প্রতিটি নেভিগেশন পয়েন্টে নিম্নলিখিত ফিল্ডগুলি থাকে:

  • displayName - এটি একটি নতুন ঐচ্ছিক ফিল্ড যাতে নেভিগেশন পয়েন্টের জন্য মানুষের পড়ার উপযুক্ত নাম থাকবে, যেমন "5th Ave"।
  • location - এটি হল LatLng ধরনের লোকেশন, যা Geocoding API v3-তে ব্যবহৃত ফর্ম্যাটের থেকে আলাদা।
  • travelModes - এটি Geocoding API v3 থেকে পাওয়া নেভিগেশন পয়েন্টের restrictedTravelModes ফিল্ডের মতো। সম্ভাব্য এনুম ভ্যালু একই থাকে, একমাত্র পার্থক্য হল যে এই ফিল্ডটি এখন সীমাবদ্ধ ট্রাভেল মোডের পরিবর্তে নেভিগেশন পয়েন্টের জন্য গ্রহণযোগ্য ট্রাভেল মোডকে উপস্থাপন করে।
  • usage - এটি একটি নতুন ফিল্ড যাতে নেভিগেশন পয়েন্টের মাধ্যমে কাজ করে এমন ব্যবহারের উদাহরণ রয়েছে।

আউটলাইন তৈরি করা

destination-এর সাথে যুক্ত বিল্ডিংয়ের আউটলাইন পেতে, আপনাকে placeView destination-এর মধ্যে থাকা বিল্ডিংয়ের প্রতিনিধিত্বকারী অবজেক্টের displayPolygon ফিল্ড ব্যবহার করতে হবে। প্রতিটি 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 v3-এ বিল্ডিং আউটলাইন ফর্ম্যাট-এর সাথে মেলে, যা হল GeoJSON ফর্ম্যাট, RFC 7946 ফর্ম্যাট ব্যবহার করে।

গ্রাউন্ডগুলি

আউটলাইন তৈরির মতোই, কোনও destination-এর সাথে যুক্ত গ্রাউন্ড পেতে, আপনাকে destination-এর placeView অবজেক্টের displayPolygon ফিল্ড ব্যবহার করতে হবে, যা গ্রাউন্ডকে উপস্থাপন করে। প্রতিটি 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 করা হয়েছে।

Destinations API (v4 SearchDestinations)-তে, কোনও location_type ফিল্ড নেই। পরিবর্তে, স্থানিক তথ্য আলাদাভাবে ম্যানেজ করা হয়:

  • ক্লায়েন্ট-সাইডে ম্যানুয়ালি ফিল্টার করার প্রয়োজন নেই: স্ট্যান্ডার্ড জিওকোডিং বিভিন্ন গ্র্যানুলারিটি জুড়ে একাধিক ফলাফল প্রদান করলেও, SearchDestinations পদ্ধতিটি যখনই সম্ভব একটি একক, অপ্টিমাইজ করা গন্তব্যে সমাধান করে অস্পষ্টতা কমিয়ে দেয়। এর ফলে, কোন ফলাফলটি সবচেয়ে ভালো তা নির্ধারণ করার জন্য ক্লায়েন্টদের লোকেশনের ধরন অনুযায়ী ফিল্টার করতে হয় না।
  • স্ট্রাকচারের ধরন ও ডিসপ্লে পলিগনের মাধ্যমে দেখানো স্পেশিয়াল তথ্য: স্পেশিয়াল জিওমেট্রি ও স্ট্রাকচার এগুলির মাধ্যমে দেখানো হয়:
    • displayPolygon (সঠিক জ্যামিতির জন্য)।
    • placeView অবজেক্টের মধ্যে structureType ফিল্ড।
  • স্ট্রাকচারের ধরন ম্যাপিং:
    • POINT, BUILDING বা SECTION-এর structureTypeটি সাধারণত আগে ROOFTOP নামে পরিচিত ছিল।
    • GROUNDS-এর structureType সাধারণত 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-কে সার্ভার-টু-সার্ভার API হিসেবে ডিজাইন করা হয়েছে। v3 থেকে v4-এ জাভাস্ক্রিপ্ট ব্যবহারকারীদের জন্য কোনও সরাসরি মাইগ্রেশন পাথ নেই। API কী ব্যবহার করে ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট (যেমন, ব্রাউজারে) থেকে সরাসরি v4 মেথড কল করলে, আপনার API কী চুরি ও অপব্যবহার হওয়ার ঝুঁকি অনেক বেড়ে যায়।

HTTP রেফারার সংক্রান্ত বিধিনিষেধ, কার্যকর হলেও, ওয়েব সার্ভিস এন্ডপয়েন্টের জন্য পর্যাপ্ত সুরক্ষা নয়, কারণ আক্রমণকারীরা তাদের অনুরোধে Referer হেডার জাল করে সহজেই এটি বাইপাস করতে পারে।

Geocoding API v4 ব্যবহার করার জন্য সাজেস্ট করা পদ্ধতি হল আপনার নিজস্ব ব্যাকএন্ড সার্ভার থেকে ব্যবহার করা। আপনার ক্লায়েন্ট অ্যাপ্লিকেশন এই মধ্যস্থতাকারী সার্ভারে অনুরোধ করবে, যা তারপরে সুরক্ষিত API কী (যেমন, এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট ম্যানেজারে স্টোর করা কী) ব্যবহার করে Google API-কে নিরাপদে কল করবে। এটি নিশ্চিত করে যে আপনার API কী কখনই ফ্রন্টএন্ড কোডে প্রকাশ করা হয় না।

ক্লায়েন্ট-সাইড প্রয়োজন মেটানোর বিকল্প

আপনার যদি ক্লায়েন্ট-সাইড সংক্রান্ত এমন কোনও প্রয়োজন থাকে যার জন্য জিওকোডিং দরকার, তাহলে আগে থেকে উপলভ্য ক্লায়েন্ট-সাইড সমাধানগুলির মধ্যে কোনও একটি ব্যবহার করার কথা বিবেচনা করুন: