জিওকোডিং এপিআই v4 বেশ কিছু নতুন মেথড চালু করেছে যা এপিআই-এর v3-এর কার্যকারিতা প্রতিস্থাপন করে। এই নির্দেশিকাটি আপনাকে দেখাবে কীভাবে আপনার অ্যাপকে নতুন v4 মেথডগুলো ব্যবহার করার জন্য মাইগ্রেট করবেন।
আপনি আপনার বিদ্যমান এপিআই কীগুলো নতুন v4 পদ্ধতিগুলোর সাথে ব্যবহার করতে পারবেন। তবে, আপনি যদি এপিআই-এর v3 সংস্করণের জন্য কোটা বৃদ্ধির অনুরোধ করে থাকেন, তাহলে আপনাকে অবশ্যই নতুন v4 এপিআইগুলোর জন্যও অনুরোধ করতে হবে।
v3 ফরওয়ার্ড জিওকোডিং থেকে মাইগ্রেট করুন
আপনি যদি ঠিকানা জিওকোড করার জন্য v3 জিওকোডিং ব্যবহার করেন, তাহলে আপনার v4-এর ' Geocode an address' পদ্ধতিতে স্থানান্তরিত হওয়া উচিত, যা একটি GET অনুরোধ গ্রহণ করে।
v4 API-তে নাম, কাঠামো এবং বেশ কিছু প্যারামিটারের সাপোর্টে পরিবর্তন আনা হয়েছে। আমরা দৃঢ়ভাবে সুপারিশ করছি যে, রেসপন্সে আপনি যে ফিল্ডগুলো ফেরত পেতে চান, তা নির্দিষ্ট করার জন্য একটি ফিল্ড মাস্ক ব্যবহার করুন ।
অনুরোধ প্যারামিটার পরিবর্তন
| v3 প্যারামিটার | v4 প্যারামিটার | নোট |
|---|---|---|
address , components | address | অসংগঠিত ঠিকানা (v3 address ) এখন URL পাথে পাস করা হয়। সংগঠিত ঠিকানার উপাদানগুলো (v3 components ) address.* কোয়েরি প্যারামিটার হিসেবে পাস করা যেতে পারে। v3 উপাদান ফিল্টারগুলো পুনরুৎপাদন দেখুন। |
bounds | locationBias.rectangle | নাম পরিবর্তন করা হয়েছে; কাঠামো পরিবর্তন করে অবজেক্ট করা হয়েছে। |
language | languageCode | নাম পরিবর্তন করা হয়েছে। |
region | regionCode | নাম পরিবর্তন করা হয়েছে। |
extra_computations | অপসারণ করা হয়েছে | SearchDestinations পদ্ধতি দ্বারা প্রতিস্থাপিত হয়েছে। |
প্রতিক্রিয়া ক্ষেত্রের পরিবর্তন
| v3 ফিল্ড | ভি৪ ফিল্ড | নোট |
|---|---|---|
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 আবশ্যক >1)। |
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 মতো স্ট্রাকচার্ড কোয়েরি প্যারামিটার হিসাবে ঠিকানার তথ্য প্রদান করতে পারেন। স্ট্রাকচার্ড প্যারামিটারগুলো হার্ড ফিল্টার হিসাবে কাজ করে না। এর পরিবর্তে, প্রদত্ত সমস্ত কম্পোনেন্ট একত্রিত হয়ে সম্পূর্ণ ঠিকানাটি গঠন করে, যা এপিআই জিওকোড করার চেষ্টা করবে। এপিআই সমস্ত কম্পোনেন্ট জুড়ে নির্দিষ্ট করা সম্পূর্ণ ঠিকানার জন্য সেরা মিলটি অনুসন্ধান করে। একটি স্ট্রাকচার্ড উপায়ে কম্পোনেন্টগুলো প্রদান করা এপিআই-কে উদ্দেশ্য আরও ভালোভাবে বুঝতে সাহায্য করতে পারে, বিশেষ করে যখন ঠিকানার তথ্য আলাদা ফর্ম ফিল্ড থেকে সংগ্রহ করা হয়। এটি এপিআই-কে প্রতিটি কম্পোনেন্টের মধ্যে থাকা ছোটখাটো টাইপিংয়ের ভুল বা অস্পষ্টতা সামলাতে সাহায্য করতে পারে, কারণ প্রতিটি ফিল্ডের তথ্যের ধরন স্পষ্ট থাকে।
v3-এর হার্ড কম্পোনেন্ট ফিল্টারের অনুরূপ আচরণ পেতে হলে, আপনাকে অবশ্যই রেসপন্সে থাকা postalAddress এবং addressComponents অবজেক্টগুলোর উপর ভিত্তি করে v4 API দ্বারা ফেরত আসা results অ্যারেতে ক্লায়েন্ট-সাইড ফিল্টারিং প্রয়োগ করতে হবে।
নিম্নলিখিত সারণিতে v3 components ফিল্টার এবং v4 postalAddress ফিল্ডগুলির মধ্যে সেরা মিল দেখানো হয়েছে:
| v3 উপাদান ফিল্টার | v4 প্রতিক্রিয়া ক্ষেত্র |
|---|---|
country | postalAddress.regionCode |
postal_code | postalAddress.postalCode |
administrative_area | postalAddress.administrativeArea বা addressComponents |
ক্লায়েন্ট-সাইড ফিল্টারিং উদাহরণ
নিম্নলিখিত উদাহরণগুলি দেখায় কিভাবে সমর্থিত ফিল্ডগুলির (দেশ, প্রশাসনিক এলাকা এবং পোস্টাল কোড) জন্য v3 কম্পোনেন্ট ফিল্টারিং-এর অনুরূপ আচরণ অর্জনের জন্য ফলাফল ফিল্টার করতে হয়। অন্যান্য ফিল্ডের উপর ফিল্টার করার পরামর্শ দেওয়া হয় না, কারণ এর জন্য কোনো নির্ভরযোগ্য ফিল্টারিং মানদণ্ড নেই।
দেশ অনুযায়ী ফিল্টার করুন
আপনার অনুরোধের address.regionCode এর সাথে প্রতিটি ফলাফলের postalAddress.regionCode কে মেলান। মনে রাখবেন যে, এপিআই অনুরোধে ছোট হাতের অক্ষরে অঞ্চলের কোড গ্রহণ করলেও, প্রতিক্রিয়ায় তা সর্বদা বড় হাতের অক্ষরে ফেরত দেয়, তাই তুলনা করার আগে আপনাকে অবশ্যই আপনার ইনপুটকে বড় হাতের অক্ষরে স্বাভাবিক করে নিতে হবে।
পাইথন কোডের উদাহরণ
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')
নোড.জেএস কোড উদাহরণ
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 এবং administrative_area_level_n টাইপের (যেমন administrative_area_level_1 ) যেকোনো addressComponents এ মিল আছে কিনা তা পরীক্ষা করা উচিত।
পাইথন কোডের উদাহরণ
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')
নোড.জেএস কোড উদাহরণ
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 প্রদান করা হলে বা ফেরত এলেও ৫-সংখ্যার ভিত্তিতে মেলানোর সুযোগ দেয়।
পাইথন কোডের উদাহরণ (মার্কিন জিপ কোড কেন্দ্রিক)
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')
নোড.জেএস কোডের উদাহরণ (মার্কিন জিপ কোড কেন্দ্রিক)
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 | নাম পরিবর্তন করা হয়েছে। |
region | regionCode | নাম পরিবর্তন করা হয়েছে। |
result_type | types | নাম পরিবর্তন করা হয়েছে; এতে পুনরাবৃত্ত কোয়েরি প্যারামিটার ব্যবহার করা হয়েছে। |
location_type | granularity | নাম পরিবর্তন করা হয়েছে; এতে পুনরাবৃত্ত কোয়েরি প্যারামিটার ব্যবহার করা হয়েছে। |
extra_computations | অপসারণ করা হয়েছে | SearchDestinations পদ্ধতি দ্বারা প্রতিস্থাপিত হয়েছে। |
প্রতিক্রিয়া ক্ষেত্রের পরিবর্তন
| v3 ফিল্ড | ভি৪ ফিল্ড | নোট |
|---|---|---|
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 স্থান ভূ-কোডিং থেকে স্থানান্তরিত করুন
আপনি যদি জিওকোডিং v3-তে কোনো নির্দিষ্ট প্লেস আইডি-র ঠিকানা পেতে place_id ব্যবহার করেন, তাহলে আপনাকে অবশ্যই v4 প্লেস জিওকোডিং পদ্ধতিতে স্থানান্তরিত হতে হবে, যা একটি GET রিকোয়েস্ট গ্রহণ করে।
v4 API-তে নাম, কাঠামো এবং বেশ কিছু প্যারামিটারের সাপোর্টে পরিবর্তন আনা হয়েছে। আমরা দৃঢ়ভাবে সুপারিশ করছি যে, রেসপন্সে আপনি যে ফিল্ডগুলো ফেরত পেতে চান, তা নির্দিষ্ট করার জন্য একটি ফিল্ড মাস্ক ব্যবহার করুন ।
অনুরোধ প্যারামিটার পরিবর্তন
| v3 প্যারামিটার | v4 প্যারামিটার | নোট |
|---|---|---|
place_id | অনুরোধ প্রোটোতে ক্ষেত্র place | প্লেস আইডি এখন places/{place} পাথ প্যারামিটার হিসেবে প্রদান করা হয়, উদাহরণস্বরূপ: https://geocode.googleapis.com/v4/geocode/places/ChIJj61dQgK6j4AR4GeTYWZsKWw । এটি মূল রিকোয়েস্টের প্লেস ফিল্ডের সাথে ম্যাপ করা থাকে। |
language | languageCode | নাম পরিবর্তন করা হয়েছে। |
region | regionCode | নাম পরিবর্তন করা হয়েছে। |
প্রতিক্রিয়া ক্ষেত্রের পরিবর্তন
| v3 ফিল্ড | ভি৪ ফিল্ড | নোট |
|---|---|---|
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 আবশ্যক >1)। |
| নতুন | addressComponents.languageCode | নির্দিষ্ট ঠিকানা উপাদানের ভাষা। |
| নতুন | bounds | high / low ব্যবহার করে সুস্পষ্ট সীমা নির্ধারণ করা হয়েছে। |
| নতুন | place | স্থানটির জন্য সম্পদের নাম। |
| নতুন | postalAddress | কাঠামোগত PostalAddress অবজেক্ট। |
জিওকোডিং হাইপারলোকাল ডেটা থেকে গন্তব্যে স্থানান্তরিত করুন
জিওকোডিং এপিআই v3-এর নিম্নলিখিত বৈশিষ্ট্যগুলি জিওকোডিং এপিআই v4-এর SearchDestinations পদ্ধতি দ্বারা প্রতিস্থাপিত হচ্ছে:
- প্রবেশপথ
- নেভিগেশন পয়েন্ট
- ভবনের রূপরেখা
- মাঠ
আপনি যদি উপরের ফিচারগুলোর জন্য জিওকোডিং এপিআই ভি৩ ব্যবহার করে থাকেন, তবে এই ফিচারগুলো পাওয়ার জন্য এর পরিবর্তে SearchDestinations মেথডটি ব্যবহার করতে এই ডকুমেন্টটি আপনাকে সাহায্য করবে। এই ডকুমেন্টটিতে ব্যাখ্যা করা হয়েছে যে SearchDestinations রেসপন্সের কোথায় এই ফিচারগুলো খুঁজে পাওয়া যাবে, এবং জিওকোডিং এপিআই ভি৩ ও জিওকোডিং এপিআই ভি৪-এর SearchDestinations মেথডের মধ্যে এপিআই রেসপন্সে এই ফিচারগুলো কীভাবে উপস্থাপিত হয় তার পার্থক্যগুলো কী।
প্রবেশপথ
কোনো destination সাথে সম্পর্কিত প্রবেশপথগুলো পেতে, destination.entrances ফিল্ডটি ব্যবহার করুন।
উল্লেখ্য যে, একটি entrance ফরম্যাটটি Geocoding API v3-এর এন্ট্রান্স ফরম্যাট থেকে কিছুটা ভিন্ন। destination.entrances এর প্রতিটি এন্ট্রান্সে নিম্নলিখিত ফিল্ডগুলো রয়েছে:
-
displayName- এটি একটি নতুন ঐচ্ছিক ফিল্ড যেখানে প্রবেশপথের জন্য একটি সহজে পঠনযোগ্য নাম থাকবে, যেমন "গেট বি"। -
location- এটিLatLngটাইপের একটি অবস্থান, যা Geocoding API v3-তে ব্যবহৃত ফরম্যাট থেকে ভিন্ন। -
tags- এটি জিওকোডিং এপিআই v3-এর এন্ট্রান্সগুলোরtagsফিল্ডের মতোই। -
place- এটি জিওকোডিং এপিআই v3-এর প্রবেশপথেরbuildingPlaceIdফিল্ডের অনুরূপ। তবে, এই ফিল্ডের প্লেস আইডি যেকোনো ধরনের স্থানের জন্য হতে পারে, এটি কেবল একটি ভবনের জন্যই হতে হবে এমন কোনো বাধ্যবাধকতা নেই।
নেভিগেশন পয়েন্ট
কোনো destination সাথে যুক্ত নেভিগেশন পয়েন্টগুলো পেতে, destination.navigationPoints ফিল্ডটি ব্যবহার করুন।
উল্লেখ্য যে, একটি navigationPoint এর ফরম্যাটটি Geocoding API v3-এর নেভিগেশন পয়েন্ট ফরম্যাট থেকে কিছুটা ভিন্ন। destination.navigationPoints এর প্রতিটি নেভিগেশন পয়েন্টে নিম্নলিখিত ফিল্ডগুলো থাকে:
-
displayName- এটি একটি নতুন ঐচ্ছিক ফিল্ড, যেখানে নেভিগেশন পয়েন্টের জন্য একটি সহজে পঠনযোগ্য নাম থাকবে, যেমন "5th Ave"। -
location- এটিLatLngটাইপের একটি অবস্থান, যা Geocoding API v3-তে ব্যবহৃত ফরম্যাট থেকে ভিন্ন। -
travelModes- এটি Geocoding API v3-এর নেভিগেশন পয়েন্টেরrestrictedTravelModesফিল্ডের অনুরূপ। সম্ভাব্য enum ভ্যালুগুলো একই, একমাত্র পার্থক্য হলো এই ফিল্ডটি এখন সীমাবদ্ধ ভ্রমণ মোডগুলোর পরিবর্তে নেভিগেশন পয়েন্টের জন্য গ্রহণযোগ্য ভ্রমণ মোডগুলোকে নির্দেশ করে। -
usage- এটি একটি নতুন ফিল্ড যেখানে নেভিগেশন পয়েন্ট দ্বারা সমর্থিত ব্যবহারের ক্ষেত্রগুলো থাকে। উল্লেখ্য যে, বেশিরভাগ নেভিগেশন পয়েন্টের ব্যবহারUNKNOWNথাকবে, কিন্তু এর মানে এই নয় যে নেভিগেশন পয়েন্টটির ব্যবহার কোনোভাবে সীমাবদ্ধ।
ভবনের রূপরেখা
কোনো destination সাথে যুক্ত বিল্ডিংয়ের রূপরেখা পেতে, সেই destination বিল্ডিং-প্রতিনিধিত্বকারী placeView অবজেক্টগুলোর 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 ফরম্যাট ব্যবহার করে।
ফলাফলের নির্ভুলতা
জিওকোডিং এপিআই v3-তে, রেসপন্স জিওমেট্রির location_type ফিল্ডটি ফলাফলের নির্ভুলতা নির্দেশ করত এবং কিছু ক্লায়েন্ট এই মানগুলোর ( ROOFTOP , RANGE_INTERPOLATED , GEOMETRIC_CENTER , এবং APPROXIMATE ) উপর ভিত্তি করে ফলাফল র্যাঙ্ক বা ফিল্টার করত। স্ট্যান্ডার্ড জিওকোডিং এপিআই v4 মাইগ্রেশনে, এই ফিল্ডটির নাম পরিবর্তন করে granularity রাখা হয়েছে।
ডেস্টিনেশনস এপিআই (v4 SearchDestinations )-এ কোনো location_type ফিল্ড নেই। এর পরিবর্তে, স্থানিক তথ্য ভিন্নভাবে পরিচালনা করা হয়:
- ম্যানুয়াল ক্লায়েন্ট-সাইড ফিল্টারিংয়ের প্রয়োজন নেই : যেখানে স্ট্যান্ডার্ড জিওকোডিং বিভিন্ন গ্র্যানুলারিটি অনুসারে একাধিক ফলাফল প্রদান করে, সেখানে
SearchDestinationsপদ্ধতিটি যখনই সম্ভব একটি একক, অপ্টিমাইজ করা গন্তব্যে সমাধান করার মাধ্যমে অস্পষ্টতা কমিয়ে আনে। এর ফলে কোন ফলাফলটি সেরা তা নির্ধারণ করার জন্য ক্লায়েন্টদের অবস্থানের ধরন অনুসারে ফিল্টার করার প্রয়োজন হয় না। - কাঠামোর ধরণ এবং প্রদর্শন বহুভুজ দ্বারা উপস্থাপিত স্থানিক তথ্য : স্থানিক জ্যামিতি এবং কাঠামো নির্দেশিত হয়:
-
displayPolygon(সঠিক জ্যামিতির জন্য)। -
placeViewঅবজেক্টের মধ্যে থাকাstructureTypeফিল্ড।
-
- কাঠামোর প্রকার ম্যাপিং :
-
POINT,BUILDINGবাSECTIONএর মতোstructureTypeসাধারণত পূর্বে যাROOFTOPনামে পরিচিত ছিল, তার অনুরূপ। -
GROUNDSনামক একটিstructureTypeসাধারণতGEOMETRIC_CENTERএর সাথে সঙ্গতিপূর্ণ হয়।
-
এই বৈশিষ্ট্যগুলির অনুরোধ করতে একটি ফিল্ড মাস্ক ব্যবহার করুন।
“ফেরত দেওয়ার জন্য ফিল্ড নির্বাচন করুন” অংশে যেমন ব্যাখ্যা করা হয়েছে, SearchDestinations মেথডটির জন্য একটি ফিল্ড মাস্ক প্রয়োজন। সমস্ত ফিল্ড ফেরত পাওয়ার জন্য ফিল্ড মাস্কটি * এ সেট করা যেতে পারে, অথবা আপনি যে নির্দিষ্ট ফিল্ডগুলো পেতে চান সেগুলোতেও এটি সেট করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত এপিআই অনুরোধটি একটি গন্তব্যের প্রবেশপথ, নেভিগেশন পয়েন্ট, ভবনের রূপরেখা এবং প্রাঙ্গণ পাওয়ার জন্য প্রয়োজনীয় সমস্ত ফিল্ড গ্রহণ করতে ফিল্ড মাস্কটি সেট করে:
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
নিরাপত্তা সংক্রান্ত বিবেচনা
জিওকোডিং এপিআই ভি৪ একটি সার্ভার-টু-সার্ভার এপিআই হিসেবে ডিজাইন করা হয়েছে। জাভাস্ক্রিপ্ট ব্যবহারকারীদের জন্য ভি৩ থেকে ভি৪-এ সরাসরি মাইগ্রেশনের কোনো পথ নেই। এপিআই কী ব্যবহার করে ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট থেকে (যেমন, ব্রাউজারে) সরাসরি ভি৪ মেথডগুলো কল করলে আপনার এপিআই কী চুরি এবং অপব্যবহারের উচ্চ ঝুঁকিতে পড়ে।
HTTP রেফারার বিধিনিষেধগুলো কার্যকর হলেও, ওয়েব সার্ভিস এন্ডপয়েন্টগুলোর জন্য তা যথেষ্ট সুরক্ষা নয়, কারণ আক্রমণকারীরা তাদের অনুরোধে Referer হেডার জাল করে খুব সহজেই এগুলোকে পাশ কাটিয়ে যেতে পারে।
সুপারিশকৃত পদ্ধতি
জিওকোডিং এপিআই ভি৪ ব্যবহারের প্রস্তাবিত উপায় হলো আপনার নিজস্ব ব্যাকএন্ড সার্ভার থেকে এটি ব্যবহার করা। আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটি এই মধ্যবর্তী সার্ভারে অনুরোধ পাঠাবে, যা পরবর্তীতে একটি সুরক্ষিত এপিআই কী (উদাহরণস্বরূপ, এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট ম্যানেজারে সংরক্ষিত একটি কী) ব্যবহার করে নিরাপদে গুগল এপিআই-কে কল করে। এটি নিশ্চিত করে যে আপনার এপিআই কী ফ্রন্টএন্ড কোডে কখনোই প্রকাশ পাবে না।
ক্লায়েন্ট-সাইডের প্রয়োজনের জন্য বিকল্প
আপনার যদি ক্লায়েন্ট-সাইডে জিওকোডিংয়ের প্রয়োজন হয়, তাহলে বিদ্যমান ক্লায়েন্ট-সাইড সমাধানগুলোর মধ্যে একটি ব্যবহার করার কথা বিবেচনা করতে পারেন:
- Maps JavaScript API-এর Geocoding Service: Geocoding Service- টি v3 ব্যাকএন্ড ব্যবহার করে চলেছে এবং এটি ব্রাউজার পরিবেশে ব্যবহারের জন্য ডিজাইন করা হয়েছে।
- প্লেসেস UI কিট: ঠিকানা-সম্পর্কিত ইউজার ইন্টারফেস এলিমেন্টের জন্য প্লেসেস UI কিট ব্যবহার করুন, যার মধ্যে প্লেস অটোকমপ্লিট এলিমেন্টগুলোও অন্তর্ভুক্ত রয়েছে।