মঙ্গোডিবি জিওস্পেশিয়াল বৈশিষ্ট্যগুলি কীভাবে প্রয়োগ করবেন

Mangodibi Ji Ospesiyala Baisistyaguli Kibhabe Prayoga Karabena



MongoDB-এর ভূ-স্থানিক বৈশিষ্ট্য একটি ডাটাবেসে ভৌগলিক তথ্য সংরক্ষণ করার একটি সহজ উপায় প্রদান করে। মূলত, আমরা GeoJSON অবজেক্ট হিসাবে MongoDB-তে ভূ-স্থানিক ডেটা সংরক্ষণ করতে পারি। GeoJSON হল একটি বিনামূল্যের এবং ওপেন সোর্স ফর্ম্যাট যা সাধারণ ভৌগলিক ডেটা সহ JavaScript অবজেক্ট নোটেশনের উপর নির্ভর করে। এই কার্যকারিতা এমন অ্যাপগুলির জন্য গুরুত্বপূর্ণ যেগুলির জন্য অবস্থানের উপর ভিত্তি করে পরিষেবার প্রয়োজন যেমন ম্যাপিং প্রক্রিয়া, অবস্থান অনুসন্ধানের উপর ভিত্তি করে এবং অন্যান্য। এই নিবন্ধটি উদাহরণ বাস্তবায়নের সাথে ভূ-স্থানিক বৈশিষ্ট্য কভার করে।

ভূ-স্থানিক বৈশিষ্ট্যের জন্য সংগ্রহে নথি যোগ করা

MongoDB Geospatial বৈশিষ্ট্যের কার্যকারিতা প্রদর্শন করতে, আমাদের নির্দিষ্ট সংগ্রহের জন্য নথির প্রয়োজন। আমরা নিম্নলিখিত হিসাবে দেখানো 'এলাকা' সংগ্রহে কয়েকটি নথি সন্নিবেশ করি:

db.area.insertMany( [
{
নাম: 'চিলড্রেন পার্ক' ,
অবস্থান: { প্রকার: 'বিন্দু' , স্থানাঙ্ক: [ - 60.97 , 30.77 ] },
বিভাগ: 'বাগান'
},
{
নাম: 'ছাত্র এলাকা' ,
অবস্থান: { প্রকার: 'বিন্দু' , স্থানাঙ্ক: [ - 60.9928 , 30.7193 ] },
বিভাগ: 'বাগান'
},
{
নাম: 'ফুটবল খেলার মাঠ' ,
অবস্থান: { প্রকার: 'বিন্দু' , স্থানাঙ্ক: [ - 60.9375 , 30.8303 ] },
বিভাগ: 'স্টেডিয়াম'
}
])

আমাদের কাছে এমন নথি রয়েছে যাতে স্থানের ডেটা যেমন স্থানাঙ্ক রয়েছে৷ উপরন্তু, আমরা ভূ-স্থানিক প্রশ্নের কর্মক্ষমতা অপ্টিমাইজ করার জন্য মাঠে একটি ভূ-স্থানিক সূচক তৈরি করি।









উদাহরণ 1: $geoIntersects ক্যোয়ারী অপারেটর ব্যবহার করা

প্রথমত, আমাদের কাছে ভূ-স্থানিক বৈশিষ্ট্যের $geoIntersects অপারেটর রয়েছে যা প্রদত্ত বস্তুর সাথে ছেদ করে। $geoIntersects অপারেটরের নিম্নলিখিত বাস্তবায়ন বিবেচনা করুন:



db.area.find({ অবস্থান: { $geoIntersects: { $geometry: { প্রকার: 'বিন্দু' ,

স্থানাঙ্ক: [ - 60.97 , 30.77 ] } } } })

উদাহরণে, আমরা 'অনুসন্ধান' অপারেশন সহ 'এরিয়া' সংগ্রহকে কল করি। Find() পদ্ধতিতে, আমরা ভূ-স্থানিক বৈশিষ্ট্যের $geoIntersects ক্যোয়ারী অপারেটরের কাছে 'অবস্থান' ফিল্ড সেটগুলি পাস করি। এটি জ্যামিতি ক্ষেত্রে সংরক্ষিত জ্যামিতির সাথে নির্দিষ্ট বিন্দু ছেদ করে কিনা তা পরীক্ষা করতে ব্যবহৃত হয়।





তারপর, $geoIntesects অপারেটর $geometry অপারেটর নেয় যেখানে টাইপ ক্ষেত্রটি 'পয়েন্ট' মান দিয়ে সেট করা হয় এবং স্থানাঙ্ক ক্ষেত্রটি 'স্থানাঙ্ক' মান দিয়ে দেওয়া হয়। এখানে, ভূ-স্থানিক তুলনার জন্য $জ্যামিতি সংজ্ঞায়িত করা হয়েছে।

নিম্নলিখিত আউটপুটটি যেখানে প্রত্যাশিত নথিটি পুনরুদ্ধার করা হয় এবং যেখানে জ্যামিতি ক্ষেত্রে একটি জ্যামিতিক বস্তু রয়েছে যা নির্দিষ্ট বিন্দুর সাথে ছেদ করে:



উদাহরণ 2: $near কোয়েরি অপারেটর ব্যবহার করা

$near অপারেটর হল একটি ভূ-স্থানিক বৈশিষ্ট্য যা একটি নির্দিষ্ট স্থানের ভৌগলিকভাবে কাছাকাছি থাকা নথিগুলি সনাক্ত করতে ভূ-স্থানীয় প্রশ্নগুলি করতে ব্যবহৃত হয়। এটি নির্দিষ্ট স্থানে তাদের নৈকট্য অনুযায়ী সাজানো নথিগুলি পুনরুদ্ধার করে। এখানে, আমরা $near অপারেটরের বাস্তবায়ন প্রদান করি:

db.area.find(
{
অবস্থান:
{ $ কাছাকাছি:
{
$geometry: { প্রকার: 'বিন্দু' , স্থানাঙ্ক: [ - ৬০.৯৬৬৭ , 30.78 ] },
$মিন দূরত্ব: 1000 ,
$maxDistance: 5000
}
}
}
)

উদাহরণে, আমরা 'অনুসন্ধান' অপারেশনের ভিতরে 'এলাকা' সংগ্রহের 'অবস্থান' ক্ষেত্রটি সংজ্ঞায়িত করি। তারপর, আমরা সেই 'অবস্থান' ক্ষেত্রে ভূ-স্থানিক বৈশিষ্ট্যের $near ক্যোয়ারী অপারেটর সেট করি। $near অপারেটর প্রদত্ত স্থানাঙ্ক বিন্দু দিয়ে কাছাকাছি বিন্দুর জন্য অনুসন্ধান করে। এরপরে, আমরা $near অপারেটরে $minDistance এবং $maxDistance প্যারামিটার ব্যবহার করি যা নির্দিষ্ট মান দিয়ে প্রদত্ত বিন্দু থেকে নির্দিষ্ট দূরত্বের সীমার মধ্যে নথিগুলি পুনরুদ্ধার করার জন্য প্রদান করা হয়।

নথিটি আউটপুটে পুনরুদ্ধার করা হয় যা একটি ভূ-স্থানীয় 'এলাকা' সংগ্রহে নির্দিষ্ট অবস্থান বা আগ্রহের পয়েন্টের কাছাকাছি:

উদাহরণ 3: $nearsphere ক্যোয়ারী অপারেটর ব্যবহার করা

বিকল্পভাবে, আমাদের কাছে $nearsphere অপারেটর রয়েছে যা $near অপারেটরের অনুরূপ, কিন্তু $nearSphere দূরত্ব গণনা করার সময় পৃথিবীর গোলাকার আকৃতি বিবেচনা করে।

db.area.find(
{
অবস্থান: {
$nearSphere: {
$জ্যামিতি: {
প্রকার: 'বিন্দু' ,
স্থানাঙ্ক: [ - ৬০.৯৬৬৭ , 30.78 ]
},
$মিন দূরত্ব: 1000 ,
$maxDistance: 5000
}
}
}
)

উদাহরণে, আমরা জিওস্পেশিয়াল কোয়েরির $nearsphere অপারেটর ব্যবহার করি। $nearspehere অপারেটর এখানে নথির জন্য অনুসন্ধান করে যার নিকটতম পয়েন্টগুলি কোয়েরিতে নির্দিষ্ট করা পয়েন্টগুলির কাছাকাছি এবং পয়েন্টগুলি স্থানাঙ্ক ক্ষেত্র অ্যারেতে সেট করা হয়েছে।

এর পরে, আমরা $minDistance এবং $maxDistance প্যারামিটার স্থাপন করে ফলাফলগুলি পরিমার্জন করি। $minDistance প্যারামিটার নিশ্চিত করে যে প্রত্যাবর্তিত নথিগুলি নির্দিষ্ট বিন্দু থেকে কমপক্ষে 1000 মিটার দূরে রয়েছে, যখন $maxDistance প্যারামিটার ফলাফলগুলিকে 5000 মিটারের বেশি দূরে নয় এমন অবস্থানগুলিতে সীমাবদ্ধ করে৷

নথিটি প্রদত্ত স্থানাঙ্ক সহ বিন্দু থেকে একটি নির্দিষ্ট মিটারের মধ্যে অবস্থান সহ আউটপুটে প্রদর্শিত হয়:

উদাহরণ 4: $geoWithin ক্যোয়ারী অপারেটর ব্যবহার করা

এরপরে, আমাদের কাছে MongoDB-এ $geoWithin অপারেটর রয়েছে যা একটি নির্দিষ্ট আকৃতির যেমন একটি বৃত্তের মধ্যে সম্পূর্ণরূপে থাকা নথিগুলি খুঁজে পেতে ভূ-স্থানিক প্রশ্নের জন্য ব্যবহৃত হয়। আসুন $geoWithin ক্যোয়ারীটির নিম্নলিখিত প্রদর্শন করা যাক:

db.area.find({ অবস্থান:

{ $geoWithin:

{ $centerSphere: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

উদাহরণে, আমরা $geoWithin অপারেটর ব্যবহার করি একটি 2D গোলকের একটি নির্দিষ্ট বৃত্তাকার এলাকার মধ্যে 'এরিয়া' সংগ্রহের নথি খুঁজে পেতে। এর জন্য, আমরা $geoWithin অপারেটরের ভিতরে $centerSphere অপারেটরকে নির্দিষ্ট করি যা দুটি আর্গুমেন্টকে কেন্দ্রিক বিন্দু হিসেবে নেয়, যা সম্ভবত এখানে স্থানাঙ্ক বিন্দুকে প্রতিনিধিত্ব করে এবং বৃত্তের ব্যাসার্ধ যা মাইলে দূরত্বের মানকে উপস্থাপন করে।

ফলস্বরূপ নথিটি নিম্নলিখিতটিতে পুনরুদ্ধার করা হয়েছে যা একটি ভূ-স্থানিক বিন্দুকে প্রতিনিধিত্ব করে যা বৃত্তের মধ্যে পড়ে যা প্রদত্ত কেন্দ্র বিন্দু এবং প্রায় 3 মাইল ব্যাসার্ধ দ্বারা সংজ্ঞায়িত করা হয়:

উদাহরণ 5: $geoNear ক্যোয়ারী অপারেটর ব্যবহার করা

অধিকন্তু, $geoNear অপারেটরও একটি ভূ-স্থানিক অপারেটর যা একত্রিত পাইপলাইনের জন্য ব্যবহৃত হয়। এটি একটি ভূ-স্থানিক ক্যোয়ারী সঞ্চালন করে এবং একটি নির্দিষ্ট বিন্দুতে তাদের নৈকট্য অনুসারে সাজানো নথিগুলিকে ফেরত দেয়৷ এখানে, আমরা $geoNear অপারেটর দিয়েছি যাকে অ্যাগ্রিগেশন পাইপলাইনের ভিতরে বলা হয়।

db.area.aggregate([
{
$geoNear: {
কাছাকাছি: { প্রকার: 'বিন্দু' , স্থানাঙ্ক: [ - 60.99279 , 30.719296 ] },
দূরত্বের ক্ষেত্র: 'dist.calculated' ,
সর্বোচ্চ দূরত্ব: 2 ,
প্রশ্ন: {শ্রেণী: 'বাগান' },
Locs অন্তর্ভুক্ত: 'dist.location' ,
গোলাকার: সত্য
}
}
])

উদাহরণে, আমরা MongoDB-এর সামগ্রিক পদ্ধতিকে কল করি এবং এর ভিতরে $geoNear অপারেটরকে সংজ্ঞায়িত করি। ক্যোয়ারী আচরণ নির্দিষ্ট করার জন্য $geoNear অপারেটরটি বেশ কয়েকটি পরামিতি সহ সেট করা হয়েছে। প্রথমে, আমরা 'নিকট' প্যারামিটার সেট করি যা অনুসন্ধানের জন্য একটি রেফারেন্স পয়েন্ট হিসাবে 'স্থানাঙ্ক' মান প্রদান করে।

তারপর, আমরা ফলাফল ক্ষেত্র হিসাবে প্রদত্ত ক্ষেত্রটি নির্দিষ্ট করতে 'দূরত্বক্ষেত্র' পরামিতি ব্যবহার করি। এই সেট ফলাফল ক্ষেত্র প্রতিটি নথি এবং রেফারেন্স পয়েন্টের মধ্যে দূরত্ব সংরক্ষণ করে। এর পরে, আমরা '2″ এর মান সহ 'maxDistance' প্যারামিটারটি সংজ্ঞায়িত করি যা মিটারে সর্বাধিক দূরত্ব উপস্থাপন করে।

এর পরে, আমাদের কাছে 'কোয়ারী' প্যারামিটার রয়েছে যা 'বিভাগ' ক্ষেত্র দ্বারা নথিগুলিকে ফিল্টার করে এবং শুধুমাত্র সেই নথিগুলিকে বিবেচনা করে যেখানে 'বিভাগ' 'পার্কস'। তারপরে আমরা অবস্থানের তথ্য ধারণ করার জন্য 'includeLocs' প্যারামিটারকে কল করি। আমরা অবশেষে 'সত্য' মান সহ 'গোলাকার' পরামিতি নির্দিষ্ট করি যা একটি 2D গোলাকার স্থানাঙ্ক সিস্টেম ব্যবহার করে দূরত্ব গণনা করে।

একত্রীকরণ পাইপলাইন আউটপুটে নথির প্রতিনিধিত্ব করে যা সেই অনুযায়ী প্যারামিটারের বিরুদ্ধে তথ্য প্রদর্শন করে। নিম্নলিখিত 'dist.calculated' ক্ষেত্রটি রেফারেন্স পয়েন্ট থেকে প্রতিটি নথির দূরত্ব প্রদর্শন করে:

উপসংহার

আমরা জানতে পেরেছি যে MongoDB-এর ভূ-স্থানিক ক্ষমতা আমাদের দক্ষতার সাথে অবস্থান-ভিত্তিক তথ্য পরিচালনা করতে এবং অনুসন্ধান করতে সাহায্য করে। আমরা উদাহরণ প্রোগ্রাম সহ বিভিন্ন অপারেটর ব্যবহার করে ভূ-স্থানিক বৈশিষ্ট্যের বাস্তবায়ন শিখেছি। আমাদের আরও অনেক কার্যকারিতা এবং পদ্ধতি রয়েছে যা বিস্তৃত অ্যাপ্লিকেশনের জন্যও উপকারী।