MongoDB Geospatial خصوصیات کو کیسے نافذ کریں۔

Mongodb Geospatial Khswsyat Kw Kys Nafdh Kry



MongoDB کی جغرافیائی خصوصیت جغرافیائی ڈیٹا کو ڈیٹا بیس میں ذخیرہ کرنے کا ایک سیدھا سا طریقہ فراہم کرتی ہے۔ بنیادی طور پر، ہم جیو اسپیشل ڈیٹا کو MongoDB میں GeoJSON آبجیکٹ کے طور پر اسٹور کر سکتے ہیں۔ GeoJSON ایک مفت اور اوپن سورس فارمیٹ ہے جو سادہ جغرافیائی ڈیٹا کے ساتھ JavaScript آبجیکٹ نوٹیشن پر منحصر ہے۔ یہ فعالیت ان ایپس کے لیے اہم ہے جنہیں مقام کی بنیاد پر خدمات کی ضرورت ہوتی ہے جیسے نقشہ سازی کا عمل، مقام کی تلاش کی بنیاد پر، اور دیگر۔ یہ مضمون مثال کے نفاذ کے ساتھ جغرافیائی خصوصیت کا احاطہ کرتا ہے۔

جغرافیائی خصوصیات کے مجموعے میں دستاویزات شامل کرنا

MongoDB Geospatial خصوصیت کی فعالیت کو ظاہر کرنے کے لیے، ہمیں مخصوص مجموعہ کے لیے دستاویزات کی ضرورت ہے۔ ہم 'علاقہ' مجموعہ میں چند دستاویزات داخل کرتے ہیں جیسا کہ درج ذیل میں دکھایا گیا ہے:

db.area.insertMany( [
{
نام: 'چلڈرن پارک' ,
مقام: { قسم: 'نقطہ' ، نقاط: [ - 60.97 , 30.77 ] }،
قسم: 'باغ'

{
نام: 'طلبہ کا علاقہ' ,
مقام: { قسم: 'نقطہ' ، نقاط: [ - 60.9928 , 30.7193 ] }،
قسم: 'باغ'

{
نام: 'فٹ بال گراؤنڈ' ,
مقام: { قسم: 'نقطہ' ، نقاط: [ - 60.9375 , 30.8303 ] }،
قسم: 'اسٹیڈیم'
}
])

ہمارے پاس ایسی دستاویزات ہیں جن میں مقام کا ڈیٹا ہوتا ہے جیسے کوآرڈینیٹ۔ مزید برآں، ہم جغرافیائی استفسارات کی کارکردگی کو بہتر بنانے کے لیے میدان میں ایک جغرافیائی اشاریہ بناتے ہیں۔









مثال 1: $geoIntersects Query آپریٹر کا استعمال

سب سے پہلے، ہمارے پاس جغرافیائی خصوصیت کا $geoIntersects آپریٹر ہے جو فراہم کردہ آبجیکٹ کو آپس میں جوڑتا ہے۔ $geoIntersects آپریٹر کے درج ذیل نفاذ پر غور کریں:



db.area.find({ مقام: { $geoIntersects: { $geometry: { قسم: 'نقطہ' ,

نقاط: [ - 60.97 , 30.77 ] } } })

مثال میں، ہم 'فائنڈ' آپریشن کے ساتھ 'علاقہ' مجموعہ کہتے ہیں۔ find() طریقہ کے لیے، ہم جغرافیائی خصوصیت کے $geoIntersects استفسار آپریٹر کو 'مقام' فیلڈ سیٹ بھیجتے ہیں۔ اس کا استعمال یہ چیک کرنے کے لیے کیا جاتا ہے کہ آیا مخصوص نقطہ جیومیٹری کے ساتھ جوڑتا ہے جو جیومیٹری فیلڈ میں محفوظ ہے۔





پھر، $geoIntesects آپریٹر $geometry آپریٹر لیتا ہے جہاں ٹائپ فیلڈ کو 'پوائنٹ' ویلیو کے ساتھ سیٹ کیا جاتا ہے اور کوآرڈینیٹ فیلڈ کو 'کوآرڈینیٹس' ویلیو کے ساتھ دیا جاتا ہے۔ یہاں، $geometry کی وضاحت جغرافیائی موازنہ کے لیے کی گئی ہے۔

مندرجہ ذیل آؤٹ پٹ وہ جگہ ہے جہاں متوقع دستاویز کو بازیافت کیا جاتا ہے اور جہاں جیومیٹری فیلڈ میں ایک جیومیٹرک آبجیکٹ ہوتا ہے جو مخصوص پوائنٹ کے ساتھ کاٹتا ہے:



مثال 2: $near Query آپریٹر کا استعمال

$near آپریٹر ایک جغرافیائی خصوصیت بھی ہے جو جغرافیائی استفسارات کرنے کے لیے استعمال ہوتی ہے تاکہ ان دستاویزات کی شناخت کی جا سکے جو جغرافیائی طور پر کسی دی گئی جگہ کے قریب ہیں۔ یہ ان دستاویزات کو بازیافت کرتا ہے جو مخصوص جگہ سے ان کی قربت کے مطابق ترتیب دیئے گئے ہیں۔ یہاں، ہم $near آپریٹر کا نفاذ فراہم کرتے ہیں:

db.area.find(
{
مقام:
{ $قریب :
{
$geometry: { قسم: 'نقطہ' , نقاط: [ - 60.9667 , 30.78 ] }،
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

مثال میں، ہم 'فائنڈ' آپریشن کے اندر 'علاقہ' مجموعہ کے 'مقام' فیلڈ کی وضاحت کرتے ہیں۔ اس کے بعد، ہم نے جغرافیائی خصوصیت کے $near سوال آپریٹر کو اس 'مقام' فیلڈ میں سیٹ کیا۔ $near آپریٹر دیے گئے کوآرڈینیٹ پوائنٹ کے ساتھ قریب کے پوائنٹ کو تلاش کرتا ہے۔ اس کے بعد، ہم $minDistance اور $maxDistance پیرامیٹرز کو $near آپریٹر میں استعمال کرتے ہیں جو کہ مخصوص اقدار کے ساتھ دستاویزات کو دیے گئے نقطہ سے مخصوص فاصلے کی حد میں بازیافت کرنے کے لیے فراہم کیے جاتے ہیں۔

دستاویز کو اس آؤٹ پٹ میں بازیافت کیا جاتا ہے جو مخصوص مقامات یا جغرافیائی 'علاقے' کے مجموعہ میں دلچسپی کے مقامات کے قریب ہے:

مثال 3: $nearsphere Query آپریٹر کا استعمال

متبادل طور پر، ہمارے پاس $nearsphere آپریٹر ہے جو $near آپریٹر سے ملتا جلتا ہے، لیکن $nearSphere فاصلے کا حساب لگاتے وقت زمین کی کروی شکل کو مدنظر رکھتا ہے۔

db.area.find(
{
مقام: {
$nearSphere: {
$geometry: {
قسم: 'نقطہ' ,
نقاط: [ - 60.9667 , 30.78 ]

$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

مثال میں، ہم جغرافیائی استفسار کا $nearsphere آپریٹر استعمال کرتے ہیں۔ $nearspehere آپریٹر یہاں اس دستاویز کو تلاش کرتا ہے جس کے قریب ترین پوائنٹس ان پوائنٹس کے قریب ہیں جو استفسار میں بیان کیے گئے ہیں، اور پوائنٹس کوآرڈینیٹ فیلڈ ارے پر سیٹ کیے گئے ہیں۔

اس کے بعد، ہم $minDistance اور $maxDistance پیرامیٹرز قائم کرکے نتائج کو بہتر بناتے ہیں۔ $minDistance پیرامیٹر اس بات کو یقینی بناتا ہے کہ واپس کی گئی دستاویزات مخصوص پوائنٹ سے کم از کم 1000 میٹر دور ہیں، جبکہ $maxDistance پیرامیٹر نتائج کو ان مقامات تک محدود کرتا ہے جو 5000 میٹر سے زیادہ دور نہیں ہیں۔

دستاویز آؤٹ پٹ میں دیے گئے نقاط کے ساتھ نقطہ سے ایک مخصوص میٹر کے اندر ایک مقام کے ساتھ ظاہر ہوتا ہے:

مثال 4: $geoWithin Query آپریٹر کا استعمال

اس کے بعد، ہمارے پاس MongoDB میں $geoWithin آپریٹر ہے جو کہ جغرافیائی استفسارات کے لیے استعمال کیا جاتا ہے تاکہ وہ دستاویزات تلاش کی جا سکیں جو مکمل طور پر ایک مخصوص شکل میں ہیں جیسے کہ دائرے میں۔ آئیے $geoWithin استفسار کا مندرجہ ذیل مظاہرہ کریں:

db.area.find({ مقام:

{ $geoWithin:

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

مثال کے طور پر، ہم $geoWithin آپریٹر کا استعمال کرتے ہیں تاکہ 2D اسفیئر پر ایک مخصوص سرکلر ایریا کے اندر 'علاقہ' جمع کرنے کی دستاویزات تلاش کریں۔ اس کے لیے، ہم $centerSphere آپریٹر کو $geoWithin آپریٹر کے اندر بتاتے ہیں جو دو دلائل کو مرکزی نقطہ کے طور پر لیتا ہے، جو ممکنہ طور پر یہاں کوآرڈینیٹ پوائنٹ کی نمائندگی کرتا ہے، اور دائرے کا رداس جو میلوں میں فاصلے کی قدر کی نمائندگی کرتا ہے۔

نتیجہ خیز دستاویز کو درج ذیل میں بازیافت کیا گیا ہے جو ایک جغرافیائی نقطہ کی نمائندگی کرتا ہے جو دائرے کے اندر آتا ہے جس کی وضاحت دیئے گئے مرکز نقطہ اور تقریبا 3 میل کے رداس سے ہوتی ہے:

مثال 5: $geoNear Query آپریٹر کا استعمال

مزید یہ کہ، $geoNear آپریٹر بھی ایک جغرافیائی آپریٹر ہے جو جمع پائپ لائن کے لیے استعمال ہوتا ہے۔ یہ ایک جغرافیائی استفسار کرتا ہے اور ان دستاویزات کو واپس کرتا ہے جو ان کی قربت کے لحاظ سے ایک مخصوص مقام پر ترتیب دی جاتی ہیں۔ یہاں، ہم نے $geoNear آپریٹر دیا ہے جسے ایگریگیشن پائپ لائن کے اندر کہا جاتا ہے۔

db.area.aggregate([
{
$geoNear: {
قریب: { قسم: 'نقطہ' ، نقاط: [ - 60.99279 , 30.719296 ] }،
فاصلہ کا میدان: 'dist.calculated' ,
زیادہ سے زیادہ فاصلہ: 2 ,
سوال: { زمرہ: 'باغ'
Locs شامل کریں: 'dist.location' ,
spherical : سچا ۔
}
}
])

مثال میں، ہم MongoDB کے مجموعی طریقہ کو کہتے ہیں اور اس کے اندر $geoNear آپریٹر کی وضاحت کرتے ہیں۔ استفسار کے رویے کی وضاحت کرنے کے لیے $geoNear آپریٹر کو کئی پیرامیٹرز کے ساتھ سیٹ کیا گیا ہے۔ سب سے پہلے، ہم 'قریب' پیرامیٹر سیٹ کرتے ہیں جو تلاش کے لیے ایک حوالہ نقطہ کے طور پر 'کوآرڈینیٹس' کی اقدار فراہم کرتا ہے۔

پھر، ہم فراہم کردہ فیلڈ کو نتیجہ کے میدان کے طور پر بیان کرنے کے لیے 'distanceField' پیرامیٹر کا استعمال کرتے ہیں۔ یہ سیٹ نتیجہ کا فیلڈ ہر دستاویز اور حوالہ نقطہ کے درمیان فاصلے کو محفوظ کرتا ہے۔ اگلا، ہم '2″ کی قدر کے ساتھ 'maxDistance' پیرامیٹر کی وضاحت کرتے ہیں جو میٹر میں زیادہ سے زیادہ فاصلے کی نمائندگی کرتا ہے۔

اس کے بعد، ہمارے پاس 'استفسار' پیرامیٹر ہے جو دستاویزات کو 'زمرہ' فیلڈ کے ذریعہ فلٹر کرتا ہے اور صرف ان دستاویزات پر غور کرتا ہے جہاں 'زمرہ' 'پارکس' ہے۔ اس کے بعد ہم مقام کی معلومات رکھنے کے لیے 'includeLocs' پیرامیٹر کو کال کرتے ہیں۔ ہم آخر میں 'حقیقی' قدر کے ساتھ 'کروی' پیرامیٹر کی وضاحت کرتے ہیں جو 2D کروی کوآرڈینیٹ سسٹم کا استعمال کرتے ہوئے فاصلوں کا حساب لگاتا ہے۔

مجموعی پائپ لائن آؤٹ پٹ میں دستاویز کی نمائندگی کرتی ہے جو اس کے مطابق پیرامیٹر کے خلاف معلومات کو ظاہر کرتی ہے۔ درج ذیل 'dist.calculated' فیلڈ ریفرنس پوائنٹ سے ہر دستاویز کا فاصلہ دکھاتا ہے:

نتیجہ

ہمیں معلوم ہوا کہ MongoDB کی جغرافیائی صلاحیتیں محل وقوع پر مبنی معلومات کو موثر طریقے سے ہینڈل کرنے اور استفسار کرنے میں ہماری مدد کرتی ہیں۔ ہم نے مثال کے پروگرام کے ساتھ اس کے مختلف آپریٹرز کا استعمال کرتے ہوئے جغرافیائی خصوصیت کے نفاذ کو سیکھا۔ ہمارے پاس اور بھی بہت ساری خصوصیات اور طریقے ہیں جو ایپلی کیشنز کی ایک وسیع رینج کے لیے بھی فائدہ مند ہیں۔