সংক্ষিপ্ত বিবরণ
জিওকোডিং হলো ঠিকানা (যেমন "1600 Amphitheatre Parkway, Mountain View, CA")-কে ভৌগোলিক স্থানাঙ্কে (যেমন অক্ষাংশ ৩৭.৪২৩০২১ এবং দ্রাঘিমাংশ -১২২.০৮৩৭৩৯) রূপান্তর করার প্রক্রিয়া, যা আপনি মার্কার স্থাপন করতে বা মানচিত্রের অবস্থান নির্ধারণ করতে ব্যবহার করতে পারেন।
রিভার্স জিওকোডিং হলো ভৌগোলিক স্থানাঙ্ককে মানুষের পাঠযোগ্য ঠিকানায় রূপান্তর করার প্রক্রিয়া (দেখুন রিভার্স জিওকোডিং (ঠিকানা অনুসন্ধান) )।
এছাড়াও আপনি কোনো নির্দিষ্ট স্থান আইডির ঠিকানা খুঁজে বের করতে জিওকোডার ব্যবহার করতে পারেন।
Maps JavaScript API ব্যবহারকারীর ইনপুট থেকে গতিশীলভাবে জিওকোডিং এবং রিভার্স জিওকোডিং করার জন্য একটি Geocoder ক্লাস প্রদান করে। এর পরিবর্তে আপনি যদি স্থির, পরিচিত ঠিকানা জিওকোড করতে চান, তাহলে Geocoding ওয়েব পরিষেবাটি দেখুন।
শুরু করুন
Maps JavaScript API-তে Geocoding পরিষেবা ব্যবহার করার আগে, প্রথমে নিশ্চিত করুন যে Google Cloud কনসোলে Geocoding API-টি সক্রিয় করা আছে, এবং এই কাজটি সেই একই প্রজেক্টে করতে হবে যা আপনি Maps JavaScript API-এর জন্য সেট আপ করেছেন।
আপনার সক্রিয় API-গুলির তালিকা দেখতে:
- গুগল ক্লাউড কনসোলে যান।
- 'Select a project' বোতামে ক্লিক করুন, তারপর আপনি Maps JavaScript API-এর জন্য যে প্রজেক্টটি সেট আপ করেছিলেন সেটিই নির্বাচন করুন এবং 'Open'-এ ক্লিক করুন।
- ড্যাশবোর্ডে থাকা API-এর তালিকা থেকে Geocoding API খুঁজুন।
- যদি আপনি তালিকায় API-টি দেখতে পান, তাহলে আপনার কাজ হয়ে গেছে। যদি API-টি তালিকায় না থাকে, তবে এটি সক্রিয় করুন:
- পৃষ্ঠার শীর্ষে, লাইব্রেরি ট্যাবটি প্রদর্শন করতে ‘এপিআই সক্ষম করুন’ (ENABLE API) নির্বাচন করুন। বিকল্পভাবে, বাম দিকের মেনু থেকে ‘লাইব্রেরি’ (Library ) নির্বাচন করুন।
- Geocoding API অনুসন্ধান করুন, তারপর ফলাফলের তালিকা থেকে এটি নির্বাচন করুন।
- ENABLE নির্বাচন করুন। প্রক্রিয়াটি শেষ হলে, ড্যাশবোর্ডের API-এর তালিকায় জিওকোডিং API প্রদর্শিত হবে।
মূল্য নির্ধারণ এবং নীতিমালা
মূল্য নির্ধারণ
জাভাস্ক্রিপ্ট জিওকোডিং পরিষেবার মূল্য নির্ধারণ এবং ব্যবহার নীতি সম্পর্কে জানতে, জিওকোডিং এপিআই-এর ব্যবহার ও বিলিং দেখুন।
নীতিমালা
আপনার জিওকোডিং পরিষেবার ব্যবহার অবশ্যই জিওকোডিং এপিআই-এর নীতিমালা অনুযায়ী হতে হবে।
জিওকোডিং অনুরোধ
জিওকোডিং পরিষেবা অ্যাক্সেস করা একটি অ্যাসিঙ্ক্রোনাস প্রক্রিয়া, যার জন্য একটি বাহ্যিক সার্ভারে কল করার প্রয়োজন হয়। এই কারণে, ` geocode মেথডটি একটি প্রমিজ রিটার্ন করে যা অনুরোধটি সম্পন্ন হলে রিজলভ হয়। একবার রিজলভ হয়ে গেলে, আপনি রেসপন্সটি হ্যান্ডেল করার জন্য .then() বা await ব্যবহার করতে পারেন।
আপনি আপনার কোডের মধ্যে google.maps.Geocoder কনস্ট্রাক্টর অবজেক্ট ব্যবহার করে গুগল ম্যাপস এপিআই জিওকোডিং পরিষেবা অ্যাক্সেস করতে পারেন। Geocoder.geocode() মেথডটি জিওকোডিং পরিষেবাতে একটি অনুরোধ শুরু করে, যেখানে ইনপুট টার্মগুলো সম্বলিত একটি GeocoderRequest অবজেক্ট লিটারেল এবং প্রতিক্রিয়া পাওয়ার পর কার্যকর করার জন্য একটি কলব্যাক মেথড পাস করা হয়।
GeocoderRequest অবজেক্ট লিটারেলটিতে নিম্নলিখিত ফিল্ডগুলো রয়েছে:
{ address: string, location: LatLng, placeId: string, bounds: LatLngBounds, componentRestrictions: GeocoderComponentRestrictions, region: string }
প্রয়োজনীয় প্যারামিটার: আপনাকে নিম্নলিখিত ফিল্ডগুলো থেকে শুধুমাত্র একটি সরবরাহ করতে হবে:
-
address— যে ঠিকানাটি আপনি জিওকোড করতে চান।
অথবা
location— সেইLatLng(বাLatLngLiteral) যার জন্য আপনি নিকটতম, সহজে পাঠযোগ্য ঠিকানা পেতে চান। জিওকোডার একটি বিপরীত জিওকোড সম্পাদন করে। আরও তথ্যের জন্য বিপরীত জিওকোডিং দেখুন।
অথবা
placeId— যে স্থানের জন্য আপনি নিকটতম, সহজে পাঠযোগ্য ঠিকানা পেতে চান, এটি সেই স্থানের আইডি। একটি স্থান আইডির জন্য ঠিকানা পুনরুদ্ধার সম্পর্কে আরও দেখুন।
ঐচ্ছিক প্যারামিটার:
-
bounds— এটি হলো সেইLatLngBoundsযার মধ্যে জিওকোড ফলাফলকে আরও সুস্পষ্টভাবে পক্ষপাতদুষ্ট করা হবে।boundsপ্যারামিটারটি জিওকোডারের ফলাফলকে শুধুমাত্র প্রভাবিত করবে, সম্পূর্ণরূপে সীমাবদ্ধ করবে না। নিচে ভিউপোর্ট বায়াসিং সম্পর্কে আরও তথ্য দেখুন। -
componentRestrictions— ফলাফলকে একটি নির্দিষ্ট এলাকায় সীমাবদ্ধ করতে ব্যবহৃত হয়। কম্পোনেন্ট ফিল্টারিং সম্পর্কে আরও তথ্য নিচে দেখুন। -
region— অঞ্চল কোড, যা একটি দুই-অক্ষরের (সংখ্যাসূচক নয়) ইউনিকোড অঞ্চল সাবট্যাগ হিসাবে নির্দিষ্ট করা হয়। বেশিরভাগ ক্ষেত্রে, এই ট্যাগগুলি সরাসরি পরিচিত ccTLD ("টপ-লেভেল ডোমেইন") দুই-অক্ষরের মানের সাথে ম্যাপ করা হয়।regionপ্যারামিটারটি জিওকোডারের ফলাফলকে শুধুমাত্র প্রভাবিত করবে, সম্পূর্ণরূপে সীমাবদ্ধ করবে না। অঞ্চল কোড বায়াসিং সম্পর্কে আরও তথ্য নিচে দেখুন। -
extraComputations— এই প্যারামিটারের জন্য একমাত্র অনুমোদিত মান হলোADDRESS_DESCRIPTORS। আরও বিস্তারিত জানতে অ্যাড্রেস ডেসক্রিপ্টর দেখুন। -
fulfillOnZeroResults— রেসপন্সে ZERO_RESULT স্ট্যাটাস থাকলে প্রমিসটি ফুলফিল করুন। এটি কাম্য হতে পারে, কারণ জিওকোডিং রেজাল্ট শূন্য হলেও অতিরিক্ত রেসপন্স লেভেল ফিল্ড রিটার্ন হতে পারে। আরও বিস্তারিত জানতে Fulfill on Zero Results দেখুন।
ভূ-কোডিং প্রতিক্রিয়া
জিওকোডিং সার্ভিসের জন্য একটি কলব্যাক মেথড প্রয়োজন, যা জিওকোডারের ফলাফল পাওয়ার পর কার্যকর হবে। এই কলব্যাকে results এবং একটি status কোড ধারণ করার জন্য ক্রমানুসারে দুটি প্যারামিটার পাস করতে হবে।
জিওকোডিং ফলাফল
GeocoderResult অবজেক্টটি একটি একক জিওকোডিং ফলাফলকে উপস্থাপন করে। একটি জিওকোড অনুরোধ একাধিক ফলাফল অবজেক্ট ফেরত দিতে পারে:
results[]: { types[]: string, formatted_address: string, address_components[]: { short_name: string, long_name: string, postcode_localities[]: string, types[]: string }, partial_match: boolean, place_id: string, postcode_localities[]: string, geometry: { location: LatLng, location_type: GeocoderLocationType viewport: LatLngBounds, bounds: LatLngBounds } }
এই ক্ষেত্রগুলো নিচে ব্যাখ্যা করা হলো:
-
types[]হলো একটি অ্যারে যা ফেরত আসা ফলাফলের ঠিকানার ধরন নির্দেশ করে। এই অ্যারেতে শূন্য বা তার বেশি সংখ্যক ট্যাগ থাকে যা ফলাফলে ফেরত আসা ফিচারের ধরন শনাক্ত করে। উদাহরণস্বরূপ, "শিকাগো" এর একটি জিওকোড "লোকালিটি" ফেরত দেয়, যা নির্দেশ করে যে "শিকাগো" একটি শহর, এবং "পলিটিক্যাল" ফেরত দেয়, যা নির্দেশ করে যে এটি একটি রাজনৈতিক সত্তা। ঠিকানার ধরন এবং ঠিকানার উপাদানের ধরন সম্পর্কে আরও তথ্য নিচে দেখুন। -
formatted_addressহলো একটি স্ট্রিং, যাতে এই অবস্থানের পাঠযোগ্য ঠিকানাটি থাকে।অনেক ক্ষেত্রে এই ঠিকানাটি ডাক ঠিকানার সমতুল্য হয়। উল্লেখ্য যে, যুক্তরাজ্যসহ কিছু দেশ লাইসেন্স সংক্রান্ত বিধিনিষেধের কারণে প্রকৃত ডাক ঠিকানা বিতরণের অনুমতি দেয় না।
বিন্যাসকৃত ঠিকানাটি যৌক্তিকভাবে এক বা একাধিক ঠিকানার উপাদান দ্বারা গঠিত। উদাহরণস্বরূপ, "111 8th Avenue, New York, NY" ঠিকানাটি নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত: "111" (রাস্তার নম্বর), "8th Avenue" (পথ), "New York" (শহর) এবং "NY" (মার্কিন যুক্তরাষ্ট্রের রাজ্য)।
প্রোগ্রাম্যাটিকভাবে ফরম্যাট করা ঠিকানা পার্স করবেন না। এর পরিবর্তে, আপনার ঠিকানার স্বতন্ত্র উপাদানগুলো ব্যবহার করা উচিত, যা এপিআই রেসপন্সে ফরম্যাট করা ঠিকানা ফিল্ডের পাশাপাশি অন্তর্ভুক্ত থাকে।
address_components[]হলো একটি অ্যারে, যেখানে এই ঠিকানার জন্য প্রযোজ্য পৃথক উপাদানগুলো থাকে।ঠিকানার প্রতিটি অংশে সাধারণত নিম্নলিখিত ক্ষেত্রগুলি থাকে:
-
types[]হলো একটি অ্যারে যা অ্যাড্রেস কম্পোনেন্টের ধরন নির্দেশ করে। যখন কোনো অ্যাড্রেস কম্পোনেন্টের জন্য কোনো পরিচিত ধরন থাকে না, তখন সেই কম্পোনেন্টের types অ্যারেটি খালি থাকতে পারে। প্রয়োজন অনুযায়ী API নতুন ধরনের মান যোগ করতে পারে। আরও তথ্যের জন্য, Address types এবং address component types দেখুন। -
long_nameহলো জিওকোডার দ্বারা ফেরত প্রাপ্ত ঠিকানার উপাদানের পূর্ণাঙ্গ পাঠ্য বিবরণ বা নাম। -
short_nameহলো ঠিকানার অংশের একটি সংক্ষিপ্ত লিখিত নাম, যদি তা উপলব্ধ থাকে। উদাহরণস্বরূপ, আলাস্কা রাজ্যের ঠিকানার অংশেরlong_nameহতে পারে "Alaska" এবং দুই অক্ষরের ডাক বিভাগের সংক্ষিপ্ত রূপ ব্যবহার করেshort_name"AK"।
address_components[]অ্যারে সম্পর্কে নিম্নলিখিত তথ্যগুলো লক্ষ্য করুন:- ঠিকানার উপাদানগুলোর অ্যারেতে
formatted_addressচেয়ে বেশি উপাদান থাকতে পারে। - অ্যারেটিতে
formatted_addressএ অন্তর্ভুক্ত রাজনৈতিক সত্তাগুলো ছাড়া, ঠিকানা আছে এমন সব রাজনৈতিক সত্তা আবশ্যিকভাবেই অন্তর্ভুক্ত থাকে না। একটি নির্দিষ্ট ঠিকানা আছে এমন সমস্ত রাজনৈতিক সত্তা পুনরুদ্ধার করতে, আপনার রিভার্স জিওকোডিং ব্যবহার করা উচিত এবং অনুরোধের প্যারামিটার হিসাবে ঠিকানাটির অক্ষাংশ/দ্রাঘিমাংশ প্রেরণ করা উচিত। - অনুরোধগুলোর মধ্যে প্রতিক্রিয়ার বিন্যাস একই থাকবে এমন কোনো নিশ্চয়তা নেই। বিশেষ করে, অনুরোধ করা ঠিকানার উপর ভিত্তি করে
address_componentsএর সংখ্যা পরিবর্তিত হয় এবং একই ঠিকানার জন্য সময়ের সাথে সাথে তা পরিবর্তিত হতে পারে। একটি কম্পোনেন্ট অ্যারের মধ্যে তার অবস্থান পরিবর্তন করতে পারে। কম্পোনেন্টটির ধরন পরিবর্তিত হতে পারে। পরবর্তী কোনো প্রতিক্রিয়ায় একটি নির্দিষ্ট কম্পোনেন্ট অনুপস্থিত থাকতে পারে।
ঠিকানার প্রকারভেদ এবং ঠিকানার উপাদানের প্রকারভেদ সম্পর্কে আরও তথ্য নিচে দেখুন।
-
partial_matchনির্দেশ করে যে জিওকোডার মূল অনুরোধের জন্য একটি সঠিক মিল খুঁজে পায়নি, যদিও এটি অনুরোধ করা ঠিকানার একটি অংশের সাথে মিল খুঁজে পেয়েছে। আপনি মূল অনুরোধটিতে কোনো বানান ভুল এবং/অথবা অসম্পূর্ণ ঠিকানা আছে কিনা তা খতিয়ে দেখতে পারেন।আপনার অনুরোধে দেওয়া এলাকার মধ্যে যে রাস্তার ঠিকানাগুলো নেই, সেগুলোর ক্ষেত্রে প্রায়শই আংশিক মিল পাওয়া যায়। একই এলাকার মধ্যে দুই বা ততোধিক ঠিকানা মিলে গেলেও আংশিক মিল পাওয়া যেতে পারে। উদাহরণস্বরূপ, "Hillpar St, Bristol, UK" অনুরোধটি Henry Street এবং Henrietta Street উভয়ের জন্যই আংশিক মিল দেখাবে। মনে রাখবেন, যদি কোনো অনুরোধে ঠিকানার কোনো অংশে বানান ভুল থাকে, তাহলে জিওকোডিং পরিষেবাটি একটি বিকল্প ঠিকানার পরামর্শ দিতে পারে। এইভাবে দেওয়া পরামর্শগুলোকেও আংশিক মিল হিসেবে চিহ্নিত করা হবে।
-
place_idহলো কোনো স্থানের একটি অনন্য শনাক্তকারী, যা অন্যান্য গুগল এপিআই-এর সাথে ব্যবহার করা যায়। উদাহরণস্বরূপ, আপনি গুগল প্লেসেস এপিআই লাইব্রেরির সাথেplace_idব্যবহার করে কোনো স্থানীয় ব্যবসার বিবরণ, যেমন ফোন নম্বর, খোলার সময়, ব্যবহারকারীর পর্যালোচনা এবং আরও অনেক কিছু পেতে পারেন। প্লেস আইডি ওভারভিউ দেখুন। -
postcode_localities[]হলো একটি অ্যারে যা একটি পোস্টাল কোডের অন্তর্ভুক্ত সমস্ত এলাকাকে নির্দেশ করে, এবং এটি শুধুমাত্র তখনই উপস্থিত থাকে যখন ফলাফলটি এমন একটি পোস্টাল কোড হয় যাতে একাধিক এলাকা থাকে। geometryনিম্নলিখিত তথ্য রয়েছে:-
locationজিওকোড করা অক্ষাংশ ও দ্রাঘিমাংশের মান থাকে। উল্লেখ্য যে, আমরা এই অবস্থানটিকে একটিLatLngঅবজেক্ট হিসেবে ফেরত দিই, কোনো ফরম্যাট করা স্ট্রিং হিসেবে নয়। -
location_typeনির্দিষ্ট অবস্থান সম্পর্কে অতিরিক্ত তথ্য সংরক্ষণ করে। নিম্নলিখিত মানগুলি সমর্থিত:-
ROOFTOPনির্দেশ করে যে প্রত্যাবর্তিত ফলাফলটি একটি সুনির্দিষ্ট জিওকোডকে প্রতিফলিত করে। -
RANGE_INTERPOLATEDনির্দেশ করে যে প্রত্যাবর্তিত ফলাফলটি দুটি সুনির্দিষ্ট বিন্দুর (যেমন সংযোগস্থল) মধ্যে ইন্টারপোলেট করা একটি আনুমানিক চিত্র (সাধারণত রাস্তার ক্ষেত্রে)। যখন কোনো রাস্তার ঠিকানার জন্য রুফটপ জিওকোড পাওয়া যায় না, তখন সাধারণত ইন্টারপোলেটেড ফলাফল ফেরত দেওয়া হয়। -
GEOMETRIC_CENTERনির্দেশ করে যে প্রত্যাবর্তিত ফলাফলটি একটি পলিলাইন (উদাহরণস্বরূপ, একটি রাস্তা) বা বহুভুজ (অঞ্চল)-এর জ্যামিতিক কেন্দ্র। -
APPROXIMATEনির্দেশ করে যে প্রত্যাবর্তিত ফলাফলটি আনুমানিক।
-
-
viewportপ্রত্যাবর্তিত ফলাফলের জন্য প্রস্তাবিত ভিউপোর্ট সংরক্ষণ করে। -
bounds(ঐচ্ছিকভাবে ফেরত দেওয়া হয়) সেইLatLngBoundsসংরক্ষণ করে যা ফেরত আসা ফলাফলকে সম্পূর্ণরূপে ধারণ করতে পারে। উল্লেখ্য যে, এই সীমানাগুলো প্রস্তাবিত ভিউপোর্টের সাথে নাও মিলতে পারে। (উদাহরণস্বরূপ, সান ফ্রান্সিসকোর মধ্যে ফারালন দ্বীপপুঞ্জ অন্তর্ভুক্ত, যা প্রযুক্তিগতভাবে শহরটির অংশ হলেও ভিউপোর্টে ফেরত আসা উচিত নয়।)
-
জিওকোডার ব্রাউজারের পছন্দের ভাষা সেটিং, অথবা এপিআই জাভাস্ক্রিপ্ট লোড করার সময় language প্যারামিটার ব্যবহার করে নির্দিষ্ট করা ভাষা ব্যবহার করে ঠিকানাগুলো ফেরত দেয়। (আরও তথ্যের জন্য, লোকলাইজেশন দেখুন। )
ঠিকানার প্রকারভেদ এবং ঠিকানার উপাদানের প্রকারভেদ
রেসপন্সের GeocoderResult- এর মধ্যে types[] অ্যারেটি ঠিকানার ধরন নির্দেশ করে। ঠিকানার ধরনের উদাহরণ হলো রাস্তার ঠিকানা, দেশ বা রাজনৈতিক সত্তা। GeocoderAddressComponent- এর মধ্যে থাকা types অ্যারেটি ঠিকানার প্রতিটি অংশের ধরন নির্দেশ করে। এর উদাহরণ হলো রাস্তার নম্বর বা দেশ।
ঠিকানার একাধিক প্রকার থাকতে পারে। এই প্রকারগুলোকে 'ট্যাগ' হিসেবে বিবেচনা করা যেতে পারে। উদাহরণস্বরূপ, অনেক শহরকে political এবং locality প্রকার দিয়ে ট্যাগ করা হয়।
অ্যাড্রেস টাইপ এবং অ্যাড্রেস কম্পোনেন্ট টাইপ উভয় অ্যারেতেই নিম্নলিখিত টাইপগুলো সমর্থিত এবং ফেরত দেওয়া হয়:
| ঠিকানার ধরণ | বর্ণনা |
|---|---|
street_address | একটি সঠিক রাস্তার ঠিকানা। |
route | একটি নামযুক্ত রুট (যেমন "ইউএস ১০১")। |
intersection | একটি প্রধান সংযোগস্থল, যা সাধারণত দুটি প্রধান সড়কের হয়ে থাকে। |
political | একটি রাজনৈতিক সত্তা। সাধারণত, এই প্রকারটি কোনো বেসামরিক প্রশাসনের একটি সমষ্টিকে বোঝায়। |
country | জাতীয় রাজনৈতিক সত্তা, এবং এটি সাধারণত জিওকোডার দ্বারা প্রত্যাবর্তিত সর্বোচ্চ ক্রমের প্রকার। |
administrative_area_level_1 | দেশ স্তরের নিচের একটি প্রথম-স্তরের বেসামরিক সত্তা। মার্কিন যুক্তরাষ্ট্রের মধ্যে, এই প্রশাসনিক স্তরগুলো হলো রাজ্য। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। বেশিরভাগ ক্ষেত্রে, administrative_area_level_1 সংক্ষিপ্ত নামগুলো ISO 3166-2 উপবিভাগ এবং অন্যান্য বহুল প্রচলিত তালিকার সাথে ঘনিষ্ঠভাবে মিলে যাবে; তবে এটি নিশ্চিত নয়, কারণ আমাদের জিওকোডিং ফলাফল বিভিন্ন ধরনের সংকেত এবং অবস্থান তথ্যের উপর ভিত্তি করে তৈরি হয়। |
administrative_area_level_2 | দেশ পর্যায়ের নিচের একটি দ্বিতীয়-স্তরের বেসামরিক সত্তা। মার্কিন যুক্তরাষ্ট্রের মধ্যে, এই প্রশাসনিক স্তরগুলো হলো কাউন্টি। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
administrative_area_level_3 | দেশ পর্যায়ের নিম্নতর একটি তৃতীয়-স্তরের বেসামরিক সত্তা। এই প্রকারটি একটি ক্ষুদ্র বেসামরিক বিভাগকে নির্দেশ করে। সকল রাষ্ট্রে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
administrative_area_level_4 | দেশ পর্যায়ের নিচে চতুর্থ-স্তরের একটি বেসামরিক সত্তা। এই প্রকারটি একটি ক্ষুদ্র বেসামরিক বিভাগকে নির্দেশ করে। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
administrative_area_level_5 | দেশ পর্যায়ের নিচে পঞ্চম স্তরের একটি বেসামরিক সত্তা। এই প্রকারটি একটি ক্ষুদ্র বেসামরিক বিভাগকে নির্দেশ করে। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
administrative_area_level_6 | দেশ পর্যায়ের নিচে ষষ্ঠ-স্তরের একটি বেসামরিক সত্তা। এই প্রকারটি একটি ক্ষুদ্র বেসামরিক বিভাগকে নির্দেশ করে। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
administrative_area_level_7 | দেশ পর্যায়ের নিচে সপ্তম-স্তরের একটি বেসামরিক সত্তা। এই প্রকারটি একটি ক্ষুদ্র বেসামরিক বিভাগকে নির্দেশ করে। সব দেশে এই প্রশাসনিক স্তরগুলো দেখা যায় না। |
colloquial_area | সত্তাটির একটি বহুল ব্যবহৃত বিকল্প নাম। |
locality | একটি নিগমিত শহর বা নগর রাজনৈতিক সত্তা। |
sublocality | এলাকার নিম্নস্তরের একটি প্রথম-স্তরের বেসামরিক সত্তা। কিছু অবস্থানের জন্য এটি অতিরিক্ত প্রকারগুলোর মধ্যে একটি পেতে পারে: sublocality_level_1 থেকে sublocality_level_5 । প্রতিটি উপ-এলাকা স্তর একটি বেসামরিক সত্তা। বৃহত্তর সংখ্যা একটি ছোট ভৌগোলিক এলাকা নির্দেশ করে। |
neighborhood | একটি নামযুক্ত এলাকা। |
premise | একটি নামযুক্ত স্থান, যা সাধারণত একটি সাধারণ নামে পরিচিত কোনো ভবন বা একাধিক ভবন নিয়ে গঠিত। |
subpremise | প্রাঙ্গণ স্তরের নিচে অবস্থিত একটি ঠিকানাযোগ্য সত্তা, যেমন অ্যাপার্টমেন্ট, ইউনিট বা স্যুইট। |
plus_code | অক্ষাংশ ও দ্রাঘিমাংশ থেকে প্রাপ্ত একটি এনকোডেড অবস্থান নির্দেশক। যেসব স্থানে রাস্তার ঠিকানা নেই (যেমন যেখানে ভবনগুলোর নম্বর দেওয়া নেই বা রাস্তাগুলোর নাম নেই), সেখানে রাস্তার ঠিকানার বিকল্প হিসেবে প্লাস কোড ব্যবহার করা যেতে পারে। বিস্তারিত জানতে https://plus.codes দেখুন। |
postal_code | দেশের অভ্যন্তরে ডাকযোগে চিঠি পাঠানোর ঠিকানা হিসেবে পোস্টাল কোড ব্যবহার করা হয়। |
natural_feature | একটি উল্লেখযোগ্য প্রাকৃতিক বৈশিষ্ট্য। |
airport | একটি বিমানবন্দর। |
park | একটি নামযুক্ত পার্ক। |
point_of_interest | একটি নামযুক্ত দর্শনীয় স্থান। সাধারণত, এই "পিওআই" (POI) গুলো হলো স্থানীয় গুরুত্বপূর্ণ স্থান, যেগুলোকে সহজে অন্য কোনো শ্রেণিতে ফেলা যায় না, যেমন "এম্পায়ার স্টেট বিল্ডিং" বা "আইফেল টাওয়ার"। |
প্রকারের একটি খালি তালিকা নির্দেশ করে যে নির্দিষ্ট ঠিকানা উপাদানটির (উদাহরণস্বরূপ, ফ্রান্সে Lieu-dit) জন্য কোনো পরিচিত প্রকার নেই।
উপরোক্ত বিষয়গুলো ছাড়াও, ঠিকানার উপাদানগুলোতে নিম্নোক্ত প্রকারগুলো অন্তর্ভুক্ত থাকতে পারে।
দ্রষ্টব্য: এই তালিকাটি সম্পূর্ণ নয় এবং এটি পরিবর্তন সাপেক্ষ।
উপরোক্ত বিষয়গুলো ছাড়াও, অ্যাড্রেস কম্পোনেন্টগুলোর মধ্যে নিচে তালিকাভুক্ত প্রকারগুলো অন্তর্ভুক্ত থাকতে পারে।
| ঠিকানা উপাদানের ধরণ | বর্ণনা |
|---|---|
floor | একটি ভবনের ঠিকানার তলা। |
establishment | সাধারণত এমন একটি স্থান যাকে এখনও শ্রেণীবদ্ধ করা হয়নি। |
landmark | নিকটবর্তী কোনো স্থান, যা দিক নির্ণয়ে সহায়তার জন্য নির্দেশক হিসেবে ব্যবহৃত হয়। |
point_of_interest | একটি নামযুক্ত দর্শনীয় স্থান। |
parking | পার্কিং লট বা পার্কিং কাঠামো। |
post_box | একটি নির্দিষ্ট ডাকবাক্স। |
postal_town | কিছু দেশে ডাক ঠিকানার জন্য ব্যবহৃত ভৌগোলিক এলাকার সমষ্টি, যেমন locality ও sublocality । |
room | ভবনের একটি কক্ষের ঠিকানা। |
street_number | সঠিক রাস্তার নম্বর। |
bus_station , train_station এবং transit_station | বাস, ট্রেন বা গণপরিবহন স্টপের অবস্থান। |
স্ট্যাটাস কোড
status কোডটি নিম্নলিখিত মানগুলির মধ্যে যেকোনো একটি প্রদান করতে পারে:
-
"OK"নির্দেশ করে যে কোনো ত্রুটি ঘটেনি; ঠিকানাটি সফলভাবে পার্স করা হয়েছে এবং অন্তত একটি জিওকোড ফেরত এসেছে। -
"ZERO_RESULTS"নির্দেশ করে যে জিওকোডিং সফল হয়েছে কিন্তু কোনো ফলাফল পাওয়া যায়নি। জিওকোডারকে যদি অস্তিত্বহীন কোনোaddressদেওয়া হয়, তবে এমনটা ঘটতে পারে। -
"OVER_QUERY_LIMIT"নির্দেশ করে যে আপনি আপনার কোটা অতিক্রম করেছেন। -
"REQUEST_DENIED"নির্দেশ করে যে আপনার অনুরোধটি প্রত্যাখ্যান করা হয়েছে। ওয়েব পেজটিকে জিওকোডার ব্যবহার করার অনুমতি দেওয়া হয়নি। -
"INVALID_REQUEST"সাধারণত বোঝায় যে কোয়েরিটি (address,componentsবাlatlng) অনুপস্থিত। -
"UNKNOWN_ERROR"নির্দেশ করে যে সার্ভার ত্রুটির কারণে অনুরোধটি প্রক্রিয়া করা যায়নি। আপনি পুনরায় চেষ্টা করলে অনুরোধটি সফল হতে পারে। -
"ERROR"নির্দেশ করে যে অনুরোধটির সময়সীমা শেষ হয়ে গেছে অথবা গুগল সার্ভারের সাথে যোগাযোগ করতে কোনো সমস্যা হয়েছে। আপনি আবার চেষ্টা করলে অনুরোধটি সফল হতে পারে।
জিওকোডিং উদাহরণ
নিম্নলিখিত উদাহরণটি একটি ঠিকানা জিওকোড করা এবং প্রাপ্ত অক্ষাংশ ও দ্রাঘিমাংশের মানগুলিতে একটি মার্কার স্থাপন করা প্রদর্শন করে। জিওকোডিং ফলাফলটি একটি প্রমিজ (promise) ব্যবহার করে পরিচালনা করা হয়। ঐ নির্দিষ্ট স্থানে ঠিকানাটি জিওকোড করতে মানচিত্রের যেকোনো জায়গায় ক্লিক করুন।
টাইপস্ক্রিপ্ট
async function geocode(request: google.maps.GeocoderRequest) { clear(); geocoder .geocode(request) .then((result) => { const { results } = result; innerMap.setCenter(results[0].geometry.location); marker.position = new google.maps.LatLng(results[0].geometry.location); mapElement.append(marker); responseDiv.style.display = 'block'; response.innerText = JSON.stringify(result, null, 2); return results; }) .catch((e) => { alert('Geocode was not successful for the following reason: ' + e); }); }
জাভাস্ক্রিপ্ট
async function geocode(request) { clear(); geocoder .geocode(request) .then((result) => { const { results } = result; innerMap.setCenter(results[0].geometry.location); marker.position = new google.maps.LatLng(results[0].geometry.location); mapElement.append(marker); responseDiv.style.display = 'block'; response.innerText = JSON.stringify(result, null, 2); return results; }) .catch((e) => { alert('Geocode was not successful for the following reason: ' + e); }); }
ভিউপোর্ট বায়াসিং
আপনি জিওকোডিং সার্ভিসকে একটি নির্দিষ্ট ভিউপোর্টের (বাউন্ডিং বক্স হিসাবে প্রকাশিত) মধ্যে থাকা ফলাফলকে অগ্রাধিকার দিতে নির্দেশ দিতে পারেন। এই ভিউপোর্টের সীমানা নির্ধারণ করার জন্য, আপনাকে GeocoderRequest অবজেক্ট লিটারেলের মধ্যে bounds প্যারামিটারটি সেট করতে হবে। মনে রাখবেন যে, এই পক্ষপাতিত্ব শুধুমাত্র সীমানার ভেতরের ফলাফলকেই অগ্রাধিকার দেয় ; যদি এই সীমানার বাইরে আরও প্রাসঙ্গিক ফলাফল থাকে, তবে সেগুলিও অন্তর্ভুক্ত হতে পারে।
উদাহরণস্বরূপ, 'Winnetka'-এর জন্য একটি জিওকোড সাধারণত শিকাগোর এই উপশহরটি ফেরত দেয়:
{ "types":["locality","political"], "formatted_address":"Winnetka, IL, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["locality","political"] },{ "long_name":"Illinois", "short_name":"IL", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location":[ -87.7417070, 42.1083080], "location_type":"APPROXIMATE" }, "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q" }
তবে, লস অ্যাঞ্জেলেসের সান ফার্নান্দো ভ্যালির জন্য একটি বাউন্ডিং বক্স নির্ধারণকারী ' bounds প্যারামিটার নির্দিষ্ট করলে, এই জিওকোডটি সেই অবস্থানে 'উইনেটকা' নামের এলাকাটিকে ফেরত দেয়:
{ "types":["sublocality","political"], "formatted_address":"Winnetka, California, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["sublocality","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_3","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "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"] }], "geometry":{ "location": [34.213171,-118.571022], "location_type":"APPROXIMATE" }, "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ" }
অঞ্চল কোড পক্ষপাত
আপনি region প্যারামিটারটি ব্যবহার করে জিওকোডিং সার্ভিসকে কোনো একটি নির্দিষ্ট অঞ্চলের প্রতি পক্ষপাতদুষ্ট ফলাফল দেখানোর জন্য স্পষ্টভাবে সেট করতে পারেন। এই প্যারামিটারটি একটি রিজিওন কোড গ্রহণ করে, যা একটি দুই-অক্ষরের (সংখ্যাসূচক নয়) ইউনিকোড রিজিওন সাবট্যাগ হিসাবে নির্দিষ্ট করা হয়। এই ট্যাগগুলি সরাসরি পরিচিত ccTLD ("টপ-লেভেল ডোমেইন") দুই-অক্ষরের মানের সাথে ম্যাপ করে, যেমন উদাহরণস্বরূপ "co.uk"-এর মধ্যে "uk"। কিছু ক্ষেত্রে, region ট্যাগটি ISO-3166-1 কোডও সমর্থন করে, যা কখনও কখনও ccTLD মান থেকে ভিন্ন হয় (উদাহরণস্বরূপ "গ্রেট ব্রিটেন"-এর জন্য "GB")।
region প্যারামিটার ব্যবহার করার সময়:
- শুধুমাত্র একটি দেশ বা অঞ্চল নির্দিষ্ট করুন। একাধিক মান উপেক্ষা করা হবে, এবং এর ফলে অনুরোধটি ব্যর্থ হতে পারে।
- শুধুমাত্র দুই-অক্ষরের অঞ্চল সাবট্যাগ (ইউনিকোড CLDR ফরম্যাট) ব্যবহার করুন। অন্য সব ইনপুট দিলে ত্রুটি দেখা দেবে।
- শুধুমাত্র গুগল ম্যাপস প্ল্যাটফর্ম কভারেজ বিবরণে তালিকাভুক্ত দেশ ও অঞ্চলগুলোই সমর্থিত।
মূল গুগল ম্যাপস অ্যাপ্লিকেশন যেসব ডোমেইনে জিওকোডিং পরিষেবা দেয়, তার সবগুলোর জন্যই জিওকোডিং অনুরোধ পাঠানো যেতে পারে। উল্লেখ্য যে, ফলাফলকে প্রাধান্য দেওয়ার ক্ষেত্রে শুধুমাত্র একটি নির্দিষ্ট ডোমেইনের ফলাফলকেই অগ্রাধিকার দেওয়া হয় ; যদি এই ডোমেইনের বাইরে আরও প্রাসঙ্গিক ফলাফল থাকে, তবে সেগুলোও অন্তর্ভুক্ত করা হতে পারে।
উদাহরণস্বরূপ, "টলেডো"-এর জন্য একটি জিওকোড এই ফলাফলটি প্রদান করে, কারণ জিওকোডিং সার্ভিসের ডিফল্ট ডোমেইন মার্কিন যুক্তরাষ্ট্রে সেট করা আছে:
{ "types":["locality","political"], "formatted_address":"Toledo, OH, USA", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Ohio", "short_name":"OH", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw" }
'Toledo'-র জন্য একটি জিওকোড, যেখানে ' region ফিল্ডটি 'es' (স্পেন) হিসেবে সেট করা আছে, সেটি স্প্যানিশ শহরটিকেই ফেরত দেবে:
{ "types":["locality","political"], "formatted_address":"Toledo, España", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Toledo", "short_name":"TO", "types":["administrative_area_level_2","political"] },{ "long_name":"Castilla-La Mancha", "short_name":"CM", "types":["administrative_area_level_1","political"] },{ "long_name":"España", "short_name":"ES", "types":["country","political"] }], "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y" }
উপাদান ফিল্টারিং
আপনি একটি কম্পোনেন্ট ফিল্টার ব্যবহার করে জিওকোডিং সার্ভিসকে একটি নির্দিষ্ট এলাকার মধ্যে সীমাবদ্ধ ঠিকানার ফলাফল ফেরত দেওয়ার জন্য সেট করতে পারেন। componentRestrictions প্যারামিটারে ফিল্টারটি নির্দিষ্ট করুন। ফিল্টার ভ্যালুগুলো অন্যান্য জিওকোডিং অনুরোধের মতোই বানান সংশোধন এবং আংশিক মিলানোর পদ্ধতি সমর্থন করে।
জিওকোডার শুধুমাত্র সেই ফলাফলগুলোই ফেরত দেয় যা এর সমস্ত কম্পোনেন্ট ফিল্টারের সাথে মেলে। অর্থাৎ, এটি ফিল্টার স্পেসিফিকেশনগুলোকে AND হিসেবে মূল্যায়ন করে, OR হিসেবে নয়।
একটি কম্পোনেন্ট ফিল্টার নিম্নলিখিত এক বা একাধিক আইটেম নিয়ে গঠিত:
-
routeএকটি রুটের দীর্ঘ বা সংক্ষিপ্ত নামের সাথে মেলে। -
localityএলাকা এবং উপ-এলাকার প্রকারভেদের সাথে মেলে। -
administrativeAreaপ্রশাসনিক এলাকার সকল স্তরের সাথে মিলে যায়। -
postalCodeপোস্টাল কোড এবং পোস্টাল কোড প্রিফিক্সগুলোর মধ্যে মিল খুঁজে বের করে। -
countryএকটি দেশের নাম অথবা দুই অক্ষরের ISO 3166-1 কান্ট্রি কোডের সাথে মেলে। দ্রষ্টব্য: API-টি দেশ নির্ধারণের জন্য ISO স্ট্যান্ডার্ড অনুসরণ করে, এবং সংশ্লিষ্ট দেশের ISO কোড ব্যবহার করলে ফিল্টারিং সবচেয়ে ভালোভাবে কাজ করে।
নিম্নলিখিত উদাহরণটি componentRestrictions প্যারামিটার ব্যবহার করে country এবং postalCode দ্বারা ফিল্টার করার পদ্ধতি প্রদর্শন করে:
async function codeAddress(request: google.maps.GeocoderRequest) { clear(); geocoder.geocode({ componentRestrictions: { country: 'AU', postalCode: '2000' } }) .then((result) => { const { results } = result; innerMap.setCenter(results[0].geometry.location); let marker = new google.maps.marker.AdvancedMarkerElement({ map: innerMap, position: results[0].geometry.location }); }) .catch((e) => { alert('Geocode was not successful for the following reason: ' + e); }); };
শূন্য ফলাফলে পূরণ করুন
রিভার্স জিওকোডিং-এর ক্ষেত্রে, ডিফল্টরূপে status=ZERO_RESULTS এ প্রমিসটি ভেঙে যায়। তবে, এই ক্ষেত্রে plus_code এবং address_descriptor এর মতো অতিরিক্ত fulfillOnZeroResults fulfillOnZeroResults জন্য true প্রদান করা হয়, তাহলে প্রমিসটি ভাঙে না এবং এই অতিরিক্ত ফিল্ডগুলো উপস্থিত থাকলে প্রমিস থেকে সেগুলো অ্যাক্সেস করা যায়।
অ্যান্টার্কটিকার অক্ষাংশ/দ্রাঘিমাংশের ক্ষেত্রে এই আচরণের একটি উদাহরণ নিচে দেওয়া হলো। যদিও কোনো রিভার্স জিওকোডিং ফলাফল নেই, তবুও আমরা fulfillOnZeroResults=true সেট করলে প্রমিসের মধ্যে প্লাস কোডটি প্রিন্ট করতে পারি।
function addressDescriptorReverseGeocoding() { var latlng = new google.maps.LatLng(-75.290330, 38.653861); geocoder .geocode({ 'location': latlng, 'fulfillOnZeroResults': true, }) .then((response) => { console.log(response.plus_code); }) .catch((error) => { window.alert(`Error: ${error}`); }); }
ঠিকানা বর্ণনাকারী
ঠিকানার বর্ণনাকারীতে এমন অতিরিক্ত তথ্য অন্তর্ভুক্ত থাকে যা বিভিন্ন ল্যান্ডমার্ক ও এলাকার সাহায্যে কোনো অবস্থান বর্ণনা করতে সাহায্য করে। এই ফিচারটি সম্পর্কে জানতে ঠিকানার বর্ণনাকারীর ডেমোটি দেখুন।
extraComputations প্যারামিটার ব্যবহারের মাধ্যমে অ্যাড্রেস ডেসক্রিপ্টর সক্রিয় করা যায়। আপনার রেসপন্সে অ্যাড্রেস ডেসক্রিপ্টর পেতে, একটি জিওকোডিং রিকোয়েস্ট , রিভার্স জিওকোডিং রিকোয়েস্ট , বা প্লেসেস জিওকোডিং রিকোয়েস্টে extra_computations=ADDRESS_DESCRIPTORS অন্তর্ভুক্ত করুন।
স্থান ভূ-কোডিং এর উদাহরণ
নিম্নলিখিত কোয়েরিটিতে দিল্লির একটি স্থানের ঠিকানা রয়েছে।
function addressDescriptorPlaceIdLookup() { geocoder.geocode({ geocoder.geocode({ 'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q', 'extraComputations': ['ADDRESS_DESCRIPTORS'] }, function(results, status) { if (status == 'OK') { console.log(results[0].address_descriptor); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
বিপরীত জিওকোডিং-এর উদাহরণ
নিম্নলিখিত কোয়েরিটিতে দিল্লির একটি অবস্থানের অক্ষাংশ/দ্রাঘিমাংশের মান রয়েছে।
function addressDescriptorReverseGeocoding() { var latlng = new google.maps.LatLng(28.640964,77.235875); geocoder .geocode({ 'location': latlng, 'extraComputations': ["ADDRESS_DESCRIPTORS"], }) .then((response) => { console.log(response.address_descriptor); }) .catch((error) => { window.alert(`Error`); }); }
ঠিকানা বর্ণনাকারীর উদাহরণ
address_descriptor একটি উদাহরণ নিচে দেওয়া হলো।
{ "address_descriptor" : { "areas" : [ { "containment" : "OUTSKIRTS", "display_name" : { "language_code" : "en", "text" : "Turkman Gate" }, "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs" }, { "containment" : "OUTSKIRTS", "display_name" : { "language_code" : "en", "text" : "Chandni Chowk" }, "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI" }, { "containment" : "NEAR", "display_name" : { "language_code" : "en", "text" : "Katar Ganj" }, "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY" } ], "landmarks" : [ { "display_name" : { "language_code" : "en", "text" : "Delite Cinema" }, "straight_line_distance_meters" : 29.9306755065918, "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM", "travel_distance_meters" : 418.7794799804688, "spatial_relationship" : "ACROSS_THE_ROAD", "types" : [ "establishment", "movie_theater", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "YES Bank" }, "straight_line_distance_meters" : 66.83731079101562, "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ", "travel_distance_meters" : 489.0340270996094, "spatial_relationship" : "DOWN_THE_ROAD", "types" : [ "bank", "establishment", "finance", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "UCO Bank" }, "straight_line_distance_meters" : 25.38849639892578, "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM", "travel_distance_meters" : 403.2246398925781, "spatial_relationship" : "ACROSS_THE_ROAD", "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "Delhi By Cycle Meeting Point" }, "straight_line_distance_meters" : 44.02867126464844, "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM", "travel_distance_meters" : 97.41281890869141, "spatial_relationship" : "AROUND_THE_CORNER", "types" : [ "establishment", "point_of_interest", "tourist_attraction", "travel_agency" ] }, { "display_name" : { "language_code" : "en", "text" : "Axis Bank Branch" }, "straight_line_distance_meters" : 102.3495178222656, "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4", "travel_distance_meters" : 330.8566284179688, "spatial_relationship" : "DOWN_THE_ROAD", "types" : [ "bank", "establishment", "finance", "point_of_interest" ] } ] } }
প্রতিটি address_descriptor অবজেক্টে দুটি অ্যারে থাকে: landmarks এবং areas । landmarks অ্যারেটিতে অনুরোধ করা স্থানাঙ্কের নৈকট্য, ল্যান্ডমার্কটির ব্যাপকতা এবং এর দৃশ্যমানতা বিবেচনা করে প্রাসঙ্গিকতার ক্রমানুসারে সাজানো সর্বোচ্চ ৫টি ফলাফল থাকে। প্রতিটি ল্যান্ডমার্ক ফলাফলে নিম্নলিখিত মানগুলি থাকে:
-
place_idহলো ল্যান্ডমার্ক ফলাফলের স্থান আইডি। স্থান আইডির সংক্ষিপ্ত বিবরণ দেখুন। -
display_nameহলো ল্যান্ডমার্কটির প্রদর্শিত নাম এবং এতেlanguage_codeওtextথাকে। -
straight_line_distance_metersহলো ইনপুট স্থানাঙ্ক এবং ল্যান্ডমার্কের ফলাফলের মধ্যবর্তী বিন্দু থেকে বিন্দুর দূরত্ব, যা মিটারে পরিমাপ করা হয়। -
travel_distance_metersহলো ইনপুট স্থানাঙ্ক এবং ল্যান্ডমার্কের ফলাফলের মধ্যে সড়ক নেটওয়ার্ক ব্যবহার করে (রাস্তার বিধিনিষেধ উপেক্ষা করে) অতিক্রান্ত দূরত্ব, যা মিটারে পরিমাপ করা হয়। -
spatial_relationshipহলো ইনপুট স্থানাঙ্ক এবং ল্যান্ডমার্ক ফলাফলের মধ্যে আনুমানিক সম্পর্ক: - যখন নিম্নলিখিতগুলির কোনোটিই প্রযোজ্য হয় না, তখন
"NEAR"হলো ডিফল্ট সম্পর্ক। -
"WITHIN"যখন ইনপুট স্থানাঙ্কটি ল্যান্ডমার্কের সাথে যুক্ত কাঠামোর সীমার মধ্যে থাকে। - ইনপুট স্থানাঙ্কটি ল্যান্ডমার্ক বা ল্যান্ডমার্কের প্রবেশ বিন্দুর ঠিক সংলগ্ন হলে
"BESIDE"হয়। -
"ACROSS_THE_ROAD"যখন ইনপুট স্থানাঙ্কটি রুটের অন্য পাশে অবস্থিত ল্যান্ডমার্কের ঠিক বিপরীতে থাকে। -
"DOWN_THE_ROAD"যখন ইনপুট স্থানাঙ্কটি ল্যান্ডমার্কের মতো একই পথ বরাবর থাকে, কিন্তু"BESIDES"বা"ACROSS_THE_ROAD"নয়। -
"AROUND_THE_CORNER"যখন ইনপুট স্থানাঙ্কটি ল্যান্ডমার্ক হিসাবে একটি লম্ব পথ বরাবর থাকে (একটি মাত্র বাঁকের মধ্যে সীমাবদ্ধ)। -
"BEHIND"যখন ইনপুট স্থানাঙ্কটি ল্যান্ডমার্কের স্থানিকভাবে কাছাকাছি, কিন্তু এর অ্যাক্সেস পয়েন্ট থেকে দূরে থাকে। -
typesহল ল্যান্ডমার্কের স্থানের প্রকারভেদ ।
areas অবজেক্টটিতে সর্বোচ্চ ৩টি রেসপন্স থাকে এবং এটি নিজেকে এমন স্থানগুলিতে সীমাবদ্ধ রাখে যা ছোট অঞ্চল, যেমন পাড়া, উপ-এলাকা এবং বড় কমপ্লেক্সের প্রতিনিধিত্ব করে। যে এলাকাগুলিতে অনুরোধ করা স্থানাঙ্কটি থাকে, সেগুলি প্রথমে তালিকাভুক্ত করা হয় এবং ছোট থেকে বড় ক্রমে সাজানো হয়। প্রতিটি areas রেজাল্টে নিম্নলিখিত মানগুলি থাকে:
-
place_idহলো areas ফলাফলের স্থান আইডি। স্থান আইডির সংক্ষিপ্ত বিবরণ দেখুন। -
display_nameহলো এলাকার প্রদর্শিত নাম এবং এতেlanguage_codeওtextথাকে। -
containmentহলো ইনপুট স্থানাঙ্ক এবং ক্ষেত্রফলের ফলাফলের মধ্যে আনুমানিক ধারণ সম্পর্ক: - যখন নিম্নলিখিতগুলির কোনোটিই প্রযোজ্য হয় না, তখন
"NEAR"হলো ডিফল্ট সম্পর্ক। - ইনপুট স্থানাঙ্কটি এলাকার কেন্দ্রের কাছাকাছি হলে
"WITHIN"। -
"OUTSKIRTS"যখন ইনপুট স্থানাঙ্কটি এলাকার প্রান্তের কাছাকাছি হয়।
ঠিকানা বর্ণনাকারী কভারেজ
ভারতের জন্য অ্যাড্রেস ডেসক্রিপ্টরগুলো GA-তে উপলব্ধ। ভারতে অ্যাড্রেস ডেসক্রিপ্টর ব্যবহারে কোনো অতিরিক্ত খরচ হয় না এবং এর ব্যবহার বিদ্যমান Geocoding (India) Essentials SKU- এর আওতায় পড়ে।
প্রতিক্রিয়া
এই ফিচারটি সকল অঞ্চলে উপলব্ধ। এটি ভারতের জন্য GA পর্যায়ে এবং অন্যান্য সকল অঞ্চলের জন্য প্রি-GA পরীক্ষামূলক লঞ্চ পর্যায়ে রয়েছে। আমরা আপনার মতামত পেলে কৃতজ্ঞ থাকব।
- শুধুমাত্র ভারত অঞ্চল সম্পর্কিত সমস্যার জন্য সাপোর্ট টিমের সাথে যোগাযোগ করুন।
- পরীক্ষামূলক রিলিজটি সম্পর্কে মতামত জানাতে address-descriptors-feedback@google.com এই ঠিকানায় আমাদের ইমেল করুন।
- আরও তথ্যের জন্য ঠিকানা বর্ণনাকারীর আওতা বিবরণ দেখুন।
বিপরীত ভূ-কোডিং (ঠিকানা অনুসন্ধান)
জিওকোডিং বলতে সাধারণত মানুষের পাঠযোগ্য কোনো ঠিকানাকে মানচিত্রের কোনো অবস্থানে রূপান্তর করাকে বোঝায়। এর বিপরীত প্রক্রিয়া, অর্থাৎ মানচিত্রের কোনো অবস্থানকে মানুষের পাঠযোগ্য ঠিকানায় রূপান্তর করাকে রিভার্স জিওকোডিং বলা হয়।
লিখিত address দেওয়ার পরিবর্তে, location প্যারামিটারে কমা দিয়ে আলাদা করা একটি অক্ষাংশ/দ্রাঘিমাংশের জোড়া দিন।
নিম্নলিখিত উদাহরণটি একটি অক্ষাংশ/দ্রাঘিমাংশের মানকে জিওকোড করে এবং মানচিত্রটিকে সেই অবস্থানে কেন্দ্র করে, যার ফলে ফরম্যাট করা ঠিকানা সহ একটি তথ্য উইন্ডো প্রদর্শিত হয়। অবস্থানটি জিওকোড করতে মানচিত্রের যেকোনো জায়গায় ক্লিক করুন অথবা আপনার নিজের স্থানাঙ্ক লিখুন।
টাইপস্ক্রিপ্ট
let marker; async function initMap() { // Request the needed libraries. const [{ Map, InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary( 'maps' ) as Promise<google.maps.MapsLibrary>, google.maps.importLibrary( 'geocoding' ) as Promise<google.maps.GeocodingLibrary>, google.maps.importLibrary( 'marker' ) as Promise<google.maps.MarkerLibrary>, ]); // Get the gmp-map element. const mapElement = document.querySelector( 'gmp-map' ) as google.maps.MapElement; // Get the inner map. const innerMap = mapElement.innerMap; // Get the latlng input box. const latLngQuery = document.getElementById('latlng') as HTMLInputElement; // Get the submit button. const submitButton = document.getElementById('submit') as HTMLElement; // Set the cursor to crosshair. innerMap.setOptions({ draggableCursor: 'crosshair', zoom: 13, mapTypeControl: false, }); // Create a marker for re-use. marker = new AdvancedMarkerElement({ map: innerMap, }); marker.anchorTop = "40px"; const geocoder = new Geocoder(); const infowindow = new InfoWindow(); // Add a click event listener to the submit button. submitButton.addEventListener('click', () => { geocodeLatLng(geocoder, innerMap, infowindow); }); // Add a click event listener to the map. innerMap.addListener('click', (event) => { latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`; geocodeLatLng(geocoder, innerMap, infowindow); }); // Make an initial request upon loading. geocodeLatLng(geocoder, innerMap, infowindow); } async function geocodeLatLng( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const input = (document.getElementById('latlng') as HTMLInputElement).value; const latlngStr = input.split(',', 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { marker.position = latlng; map.setCenter(latlng); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert('No results found'); } }) .catch((e) => window.alert('Geocoder failed due to: ' + e)); } initMap();
জাভাস্ক্রিপ্ট
let marker; async function initMap() { // Request the needed libraries. const [{ Map, InfoWindow }, { Geocoder }, { AdvancedMarkerElement }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('geocoding'), google.maps.importLibrary('marker'), ]); // Get the gmp-map element. const mapElement = document.querySelector('gmp-map'); // Get the inner map. const innerMap = mapElement.innerMap; // Get the latlng input box. const latLngQuery = document.getElementById('latlng'); // Get the submit button. const submitButton = document.getElementById('submit'); // Set the cursor to crosshair. innerMap.setOptions({ draggableCursor: 'crosshair', zoom: 13, mapTypeControl: false, }); // Create a marker for re-use. marker = new AdvancedMarkerElement({ map: innerMap, }); marker.anchorTop = "40px"; const geocoder = new Geocoder(); const infowindow = new InfoWindow(); // Add a click event listener to the submit button. submitButton.addEventListener('click', () => { geocodeLatLng(geocoder, innerMap, infowindow); }); // Add a click event listener to the map. innerMap.addListener('click', (event) => { latLngQuery.value = `${event.latLng.lat()}, ${event.latLng.lng()}`; geocodeLatLng(geocoder, innerMap, infowindow); }); // Make an initial request upon loading. geocodeLatLng(geocoder, innerMap, infowindow); } async function geocodeLatLng(geocoder, map, infowindow) { const input = document.getElementById('latlng').value; const latlngStr = input.split(',', 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { marker.position = latlng; map.setCenter(latlng); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert('No results found'); } }) .catch((e) => window.alert('Geocoder failed due to: ' + e)); } initMap();
সিএসএস
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ gmp-map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; font-family: Roboto, sans-serif; } #floating-panel { background-color: #fff; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; margin: 10px; padding: 10px; font-family: Roboto, sans-serif; font-size: 1rem; } #latlng { width: 100%; font-family: Roboto, sans-serif; font-size: 1rem; margin-bottom: 4px; } #submit { font-size: 1rem; }
এইচটিএমএল
<html>
<head>
<title>Reverse Geocoding</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly" });</script>
</head>
<body>
<gmp-map center="0.714224, -73.961452" zoom="8" map-id="DEMO_MAP_ID">
<div id="floating-panel" slot="control-block-start-inline-start">
<p>
Click the map to reverse geocode, or add your own
coordinates.
</p>
<input
id="latlng"
type="text"
value="40.714224, -73.961452" /><br />
<input id="submit" type="button" value="Reverse Geocode" />
</div>
</gmp-map>
</body>
</html>নমুনা চেষ্টা করুন
লক্ষ্য করুন যে পূর্ববর্তী উদাহরণে আমরা results[0] নির্বাচন করে প্রথম ফলাফলটি দেখিয়েছিলাম। রিভার্স জিওকোডার প্রায়শই একাধিক ফলাফল ফেরত দেয়। জিওকোডেড ঠিকানা শুধুমাত্র ডাক ঠিকানা নয়, বরং ভৌগোলিকভাবে কোনো স্থানের নাম দেওয়ার যেকোনো উপায়। উদাহরণস্বরূপ, শিকাগো শহরের কোনো বিন্দুকে জিওকোড করার সময়, জিওকোডেড বিন্দুটিকে রাস্তার ঠিকানা, শহর (শিকাগো), রাজ্য (ইলিনয়) বা দেশ (মার্কিন যুক্তরাষ্ট্র) হিসাবে চিহ্নিত করা যেতে পারে। জিওকোডারের কাছে এগুলি সবই ঠিকানা। রিভার্স জিওকোডার এই সমস্ত ফলাফলই ফেরত দেয়।
রিভার্স জিওকোডার রাজনৈতিক সত্তা (দেশ, প্রদেশ, শহর ও এলাকা), রাস্তার ঠিকানা এবং পোস্টাল কোড শনাক্ত করে।
উপরের কোয়েরিটি যে ধরনের ঠিকানার তালিকা ফেরত দিতে পারে, তার একটি উদাহরণ নিচে দেওয়া হলো:
results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA" results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA" results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA" results[3].formatted_address: "Brooklyn, NY, USA" results[4].formatted_address: "New York, NY, USA" results[5].formatted_address: "Brooklyn, NY 11211, USA" results[6].formatted_address: "Kings County, NY, USA" results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA" results[8].formatted_address: "New York Metropolitan Area, USA" results[9].formatted_address: "New York, USA"
ঠিকানাগুলো সবচেয়ে বেশি মিল থেকে কম মিলের ক্রমানুসারে ফেরত দেওয়া হয়। সাধারণত, সবচেয়ে সুনির্দিষ্ট ঠিকানাটিই সবচেয়ে বেশি প্রাধান্য পায়, যেমনটা এই ক্ষেত্রে হয়েছে। উল্লেখ্য যে, আমরা সবচেয়ে সুনির্দিষ্ট রাস্তার ঠিকানা থেকে শুরু করে পাড়া, শহর, কাউন্টি, রাজ্য ইত্যাদির মতো কম সুনির্দিষ্ট রাজনৈতিক সত্তা পর্যন্ত বিভিন্ন ধরনের ঠিকানা ফেরত দিই। আপনি যদি আরও সাধারণ কোনো ঠিকানা মেলাতে চান, তাহলে results[].types ফিল্ডটি দেখতে পারেন।
দ্রষ্টব্য: রিভার্স জিওকোডিং কোনো নিখুঁত বিজ্ঞান নয়। জিওকোডার একটি নির্দিষ্ট সীমার মধ্যে নিকটতম ঠিকানাযোগ্য অবস্থান খুঁজে বের করার চেষ্টা করবে।
স্থান আইডির জন্য ঠিকানা পুনরুদ্ধার করা
একটি নির্দিষ্ট প্লেস আইডির ঠিকানা খুঁজে পেতে placeId সরবরাহ করুন। প্লেস আইডি হলো একটি অনন্য শনাক্তকারী যা অন্যান্য গুগল এপিআই-এর সাথে ব্যবহার করা যায়। উদাহরণস্বরূপ, একটি স্ন্যাপ করা পয়েন্টের ঠিকানা পেতে আপনি রোডস এপিআই দ্বারা প্রাপ্ত placeId সরবরাহ করতে পারেন। প্লেস আইডি সম্পর্কে আরও তথ্যের জন্য, প্লেস আইডি ওভারভিউ দেখুন।
আপনি যখন একটি placeId প্রদান করেন, তখন অনুরোধটিতে নিম্নলিখিত ফিল্ডগুলির কোনোটি থাকতে পারবে না:
-
address -
latLng -
location -
componentRestrictions
নিম্নলিখিত উদাহরণটি একটি স্থানের আইডি গ্রহণ করে, সংশ্লিষ্ট ঠিকানাটি খুঁজে বের করে এবং মানচিত্রটিকে সেই অবস্থানে কেন্দ্র করে। এটি প্রাসঙ্গিক স্থানটির বিন্যাসিত ঠিকানা প্রদর্শনকারী একটি তথ্য উইন্ডোও খুলে দেয়:
টাইপস্ক্রিপ্ট
// Initialize the map. async function initMap(): Promise<void> { await Promise.all([ google.maps.importLibrary("maps"), google.maps.importLibrary("geocoding"), google.maps.importLibrary("marker"), ]); const mapElement = document.querySelector("gmp-map") as google.maps.MapElement; const innerMap = mapElement.innerMap; const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodePlaceId(geocoder, innerMap, infowindow); } ); } // This function is called when the user clicks the UI button. function geocodePlaceId( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const placeId = (document.getElementById("place-id") as HTMLInputElement) .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.marker.AdvancedMarkerElement({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } initMap();
জাভাস্ক্রিপ্ট
// Initialize the map. async function initMap() { await Promise.all([ google.maps.importLibrary("maps"), google.maps.importLibrary("geocoding"), google.maps.importLibrary("marker"), ]); const mapElement = document.querySelector("gmp-map"); const innerMap = mapElement.innerMap; const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodePlaceId(geocoder, innerMap, infowindow); }); } // This function is called when the user clicks the UI button. function geocodePlaceId(geocoder, map, infowindow) { const placeId = document.getElementById("place-id") .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.marker.AdvancedMarkerElement({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } initMap();