You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ur/3-transport/lessons/4-geofences/README.md

41 KiB

جیو فینسز

اس سبق کا خاکہ

خاکہ نیتیا نرسمہن کی طرف سے۔ بڑی تصویر دیکھنے کے لیے تصویر پر کلک کریں۔

یہ ویڈیو جیو فینسز اور Azure Maps میں ان کے استعمال کا جائزہ پیش کرتی ہے، جو اس سبق میں شامل موضوعات ہیں:

Azure Maps کے ساتھ جیو فینسنگ - Microsoft Developer IoT شو سے

🎥 ویڈیو دیکھنے کے لیے اوپر دی گئی تصویر پر کلک کریں

لیکچر سے پہلے کا کوئز

لیکچر سے پہلے کا کوئز

تعارف

پچھلے تین اسباق میں، آپ نے IoT کا استعمال کرتے ہوئے اپنے فارم سے پروسیسنگ ہب تک پیداوار لے جانے والے ٹرکوں کا پتہ لگایا۔ آپ نے GPS ڈیٹا حاصل کیا، اسے کلاؤڈ میں محفوظ کیا، اور نقشے پر دکھایا۔ سپلائی چین کی کارکردگی کو بڑھانے کا اگلا قدم یہ ہے کہ جب ٹرک پروسیسنگ ہب کے قریب پہنچنے والا ہو تو آپ کو الرٹ ملے، تاکہ سامان اتارنے کے لیے عملہ فورک لفٹس اور دیگر آلات کے ساتھ تیار ہو۔ اس طرح وہ جلدی سے سامان اتار سکتے ہیں، اور آپ ٹرک اور ڈرائیور کے انتظار کے وقت کے اخراجات سے بچ سکتے ہیں۔

اس سبق میں آپ جیو فینسز کے بارے میں سیکھیں گے - جغرافیائی حدود جیسے کہ پروسیسنگ ہب کے 2 کلومیٹر کے دائرے میں ایک علاقہ، اور GPS کوآرڈینیٹس کے اندر یا باہر ہونے کی جانچ کرنے کا طریقہ، تاکہ آپ دیکھ سکیں کہ آیا آپ کا GPS سینسر کسی علاقے میں پہنچا ہے یا اسے چھوڑ دیا ہے۔

اس سبق میں ہم درج ذیل موضوعات کا احاطہ کریں گے:

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

اگر ضروری ہو تو اپنے پروجیکٹ کو صاف کرنے کے گائیڈ سے ہدایات حاصل کریں۔

جیو فینسز کیا ہیں

جیو فینس ایک حقیقی دنیا کے جغرافیائی علاقے کے لیے ایک ورچوئل حد ہے۔ جیو فینسز دائرے کی شکل میں ہو سکتے ہیں، جو ایک نقطہ اور رداس سے متعین کیے جاتے ہیں (مثال کے طور پر کسی عمارت کے ارد گرد 100 میٹر چوڑا دائرہ)، یا ایک پولیگون کی شکل میں، جیسے اسکول زون، شہر کی حدود، یا یونیورسٹی یا دفتر کیمپس۔

جیو فینس کی کچھ مثالیں، Microsoft کمپنی اسٹور کے ارد گرد ایک دائرہ اور Microsoft ویسٹ کیمپس کے ارد گرد ایک پولیگون

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

جیو فینسز کے اندر یا باہر گاڑی کے ہونے کی معلومات حاصل کرنے کی کئی وجوہات ہو سکتی ہیں:

  • سامان اتارنے کی تیاری - سائٹ پر گاڑی کے پہنچنے کی اطلاع ملنے سے عملہ گاڑی کو جلدی سے اتارنے کے لیے تیار ہو سکتا ہے، جس سے گاڑی کے انتظار کا وقت کم ہو جاتا ہے۔ اس سے ڈرائیور کو دن میں زیادہ ڈلیوریز کرنے کا موقع ملتا ہے۔
  • ٹیکس کی تعمیل - کچھ ممالک، جیسے نیوزی لینڈ، عوامی سڑکوں پر ڈیزل گاڑیوں کے وزن کی بنیاد پر روڈ ٹیکس وصول کرتے ہیں۔ جیو فینسز کا استعمال آپ کو عوامی سڑکوں پر چلائی گئی میلوں کو نجی سڑکوں جیسے فارم یا لاگنگ ایریاز پر چلائی گئی میلوں سے الگ کرنے کی اجازت دیتا ہے۔
  • چوری کی نگرانی - اگر گاڑی کو کسی خاص علاقے میں رہنا چاہیے، جیسے فارم پر، اور وہ جیو فینس چھوڑ دیتی ہے، تو یہ چوری ہو سکتی ہے۔
  • مقام کی تعمیل - کام کی جگہ، فارم یا فیکٹری کے کچھ حصے کچھ گاڑیوں کے لیے ممنوع ہو سکتے ہیں، جیسے مصنوعی کھاد اور کیڑے مار ادویات لے جانے والی گاڑیوں کو نامیاتی پیداوار والے کھیتوں سے دور رکھنا۔ اگر جیو فینس میں داخل ہوا جائے، تو گاڑی تعمیل سے باہر ہے اور ڈرائیور کو مطلع کیا جا سکتا ہے۔

کیا آپ جیو فینسز کے دیگر استعمالات کے بارے میں سوچ سکتے ہیں؟

Azure Maps، جو آپ نے پچھلے سبق میں GPS ڈیٹا کو ظاہر کرنے کے لیے استعمال کیا تھا، آپ کو جیو فینسز کی تعریف کرنے اور پھر یہ جانچنے کی اجازت دیتا ہے کہ آیا کوئی نقطہ جیو فینس کے اندر یا باہر ہے۔

جیو فینس کی تعریف

جیو فینسز کو GeoJSON کا استعمال کرتے ہوئے متعین کیا جاتا ہے، بالکل اسی طرح جیسے پچھلے سبق میں نقشے پر پوائنٹس شامل کیے گئے تھے۔ اس صورت میں، FeatureCollection میں Point کی بجائے، یہ FeatureCollection میں ایک Polygon ہوتا ہے۔

{
   "type": "FeatureCollection",
   "features": [
     {
       "type": "Feature",
       "geometry": {
         "type": "Polygon",
         "coordinates": [
           [
             [
               -122.13393688201903,
               47.63829579223815
             ],
             [
               -122.13389128446579,
               47.63782047131512
             ],
             [
               -122.13240802288054,
               47.63783312249837
             ],
             [
               -122.13238388299942,
               47.63829037035086
             ],
             [
               -122.13393688201903,
               47.63829579223815
             ]
           ]
         ]
       },
       "properties": {
         "geometryId": "1"
       }
     }
   ]
}

پولیگون پر ہر نقطہ ایک طول بلد اور عرض بلد کے جوڑے کے طور پر ایک صف میں متعین کیا جاتا ہے، اور یہ پوائنٹس ایک صف میں ہوتے ہیں جو coordinates کے طور پر سیٹ کیے جاتے ہیں۔ پچھلے سبق میں Point کے لیے، coordinates ایک صف تھی جس میں 2 اقدار تھیں، عرض بلد اور طول بلد۔ Polygon کے لیے، یہ صفوں کی ایک صف ہے جس میں 2 اقدار ہیں، طول بلد اور عرض بلد۔

💁 یاد رکھیں، GeoJSON پوائنٹس کے لیے longitude, latitude استعمال کرتا ہے، نہ کہ latitude, longitude

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

ایک مستطیل کے ساتھ کوآرڈینیٹس

اوپر دی گئی تصویر میں، ایک مستطیل ہے۔ پولیگون کوآرڈینیٹس اوپر بائیں طرف 47,-122 سے شروع ہوتے ہیں، پھر دائیں طرف 47,-121، پھر نیچے 46,-121، پھر دائیں طرف 46,-122، پھر شروع کے نقطے پر واپس اوپر 47,-122۔ یہ پولیگون کو 5 پوائنٹس دیتا ہے - اوپر بائیں، اوپر دائیں، نیچے دائیں، نیچے بائیں، پھر اوپر بائیں تاکہ اسے بند کیا جا سکے۔

اپنے گھر یا اسکول کے ارد گرد ایک GeoJSON پولیگون بنانے کی کوشش کریں۔ GeoJSON.io جیسے ٹول کا استعمال کریں۔

کام - جیو فینس کی تعریف

Azure Maps میں جیو فینس استعمال کرنے کے لیے، پہلے اسے آپ کے Azure Maps اکاؤنٹ میں اپ لوڈ کرنا ہوگا۔ ایک بار اپ لوڈ ہونے کے بعد، آپ کو ایک منفرد ID ملے گا جسے آپ جیو فینس کے خلاف نقطہ جانچنے کے لیے استعمال کر سکتے ہیں۔ Azure Maps میں جیو فینسز اپ لوڈ کرنے کے لیے، آپ کو Maps ویب API استعمال کرنا ہوگا۔ آپ curl نامی ٹول کا استعمال کرتے ہوئے Azure Maps ویب API کو کال کر سکتے ہیں۔

🎓 Curl ایک کمانڈ لائن ٹول ہے جو ویب اینڈ پوائنٹس کے خلاف درخواستیں کرنے کے لیے استعمال ہوتا ہے۔

  1. اگر آپ Linux، macOS، یا Windows 10 کے حالیہ ورژن استعمال کر رہے ہیں، تو آپ کے پاس شاید curl پہلے سے انسٹال ہوگا۔ اپنے ٹرمینل یا کمانڈ لائن سے درج ذیل چلائیں:

    curl --version
    

    اگر آپ کو curl کے لیے ورژن کی معلومات نظر نہیں آتی، تو آپ کو اسے curl ڈاؤنلوڈز پیج سے انسٹال کرنا ہوگا۔

    💁 اگر آپ Postman کے ماہر ہیں، تو آپ اسے استعمال کر سکتے ہیں اگر آپ چاہیں۔

  2. ایک GeoJSON فائل بنائیں جس میں پولیگون ہو۔ آپ اسے اپنے GPS سینسر کے ساتھ جانچنے جا رہے ہیں، لہذا اپنے موجودہ مقام کے ارد گرد ایک پولیگون بنائیں۔ آپ یا تو اوپر دیے گئے GeoJSON مثال کو دستی طور پر ایڈٹ کرکے ایک بنا سکتے ہیں، یا GeoJSON.io جیسے ٹول کا استعمال کر سکتے ہیں۔

    GeoJSON کو ایک FeatureCollection پر مشتمل ہونا چاہیے، جس میں ایک Feature ہو جس کا geometry قسم Polygon ہو۔

    آپ کو ضرور ایک properties عنصر بھی شامل کرنا ہوگا جو geometry عنصر کے برابر سطح پر ہو، اور اس میں ایک geometryId شامل ہونا چاہیے:

    "properties": {
        "geometryId": "1"
    }
    

    اگر آپ GeoJSON.io استعمال کرتے ہیں، تو آپ کو یہ آئٹم خالی properties عنصر میں دستی طور پر شامل کرنا ہوگا، یا تو JSON فائل ڈاؤنلوڈ کرنے کے بعد، یا ایپ میں JSON ایڈیٹر میں۔

    یہ geometryId اس فائل میں منفرد ہونا چاہیے۔ آپ ایک ہی GeoJSON فائل میں متعدد Features کے طور پر متعدد جیو فینسز اپ لوڈ کر سکتے ہیں، جب تک کہ ہر ایک کا مختلف geometryId ہو۔ پولیگونز کا ایک ہی geometryId ہو سکتا ہے اگر وہ مختلف وقت پر مختلف فائل سے اپ لوڈ کیے گئے ہوں۔

  3. اس فائل کو geofence.json کے طور پر محفوظ کریں، اور اپنے ٹرمینل یا کنسول میں جہاں یہ محفوظ ہے وہاں جائیں۔

  4. درج ذیل curl کمانڈ چلائیں تاکہ GeoFence بنایا جا سکے:

    curl --request POST 'https://atlas.microsoft.com/mapData/upload?api-version=1.0&dataFormat=geojson&subscription-key=<subscription_key>' \
         --header 'Content-Type: application/json' \
         --include \
         --data @geofence.json
    

    URL میں <subscription_key> کو اپنے Azure Maps اکاؤنٹ کے API کلید سے تبدیل کریں۔

    URL کو https://atlas.microsoft.com/mapData/upload API کے ذریعے نقشہ ڈیٹا اپ لوڈ کرنے کے لیے استعمال کیا جاتا ہے۔ کال میں api-version پیرامیٹر شامل ہوتا ہے تاکہ یہ وضاحت کی جا سکے کہ Azure Maps API کا کون سا ورژن استعمال کرنا ہے، یہ API کو وقت کے ساتھ تبدیل کرنے کی اجازت دیتا ہے لیکن پچھلے ورژنز کے ساتھ مطابقت برقرار رکھتا ہے۔ اپ لوڈ کیا جانے والا ڈیٹا فارمیٹ geojson کے طور پر سیٹ کیا جاتا ہے۔

    یہ POST درخواست کو اپ لوڈ API پر چلائے گا اور جواب کے ہیڈرز کی فہرست واپس کرے گا جس میں ایک ہیڈر location شامل ہوگا۔

    content-type: application/json
    location: https://us.atlas.microsoft.com/mapData/operations/1560ced6-3a80-46f2-84b2-5b1531820eab?api-version=1.0
    x-ms-azuremaps-region: West US 2
    x-content-type-options: nosniff
    strict-transport-security: max-age=31536000; includeSubDomains
    x-cache: CONFIG_NOCACHE
    date: Sat, 22 May 2021 21:34:57 GMT
    content-length: 0
    

    🎓 جب کسی ویب اینڈ پوائنٹ کو کال کرتے ہیں، تو آپ کال میں پیرامیٹرز پاس کر سکتے ہیں، ? کے بعد کلیدی قدر کے جوڑوں کو key=value کے طور پر شامل کرکے، اور کلیدی قدر کے جوڑوں کو & کے ذریعے الگ کرکے۔

  5. Azure Maps فوری طور پر اس پر عمل نہیں کرتا، لہذا آپ کو یہ چیک کرنے کی ضرورت ہوگی کہ اپ لوڈ درخواست مکمل ہوئی ہے یا نہیں، location ہیڈر میں دیے گئے URL کا استعمال کرتے ہوئے۔ اس مقام پر GET درخواست کریں تاکہ اسٹیٹس دیکھ سکیں۔ آپ کو اپنے Azure Maps اکاؤنٹ کے API کلید کو location URL کے آخر میں شامل کرنا ہوگا، &subscription-key=<subscription_key> شامل کرکے، <subscription_key> کو اپنے Azure Maps اکاؤنٹ کے API کلید سے تبدیل کریں۔ درج ذیل کمانڈ چلائیں:

    curl --request GET '<location>&subscription-key=<subscription_key>'
    

    <location> کو location ہیڈر کی قدر سے تبدیل کریں، اور <subscription_key> کو اپنے Azure Maps اکاؤنٹ کے API کلید سے تبدیل کریں۔

  6. جواب میں status کی قدر چیک کریں۔ اگر یہ Succeeded نہیں ہے، تو ایک منٹ انتظار کریں اور دوبارہ کوشش کریں۔

  7. ایک بار جب اسٹیٹس Succeeded واپس آ جائے، جواب سے resourceLocation دیکھیں۔ یہ GeoJSON آبجیکٹ کے منفرد ID (جسے UDID کہا جاتا ہے) کی تفصیلات پر مشتمل ہے۔ UDID وہ قدر ہے جو metadata/ کے بعد آتی ہے، اور api-version کو شامل نہیں کرتی۔ مثال کے طور پر، اگر resourceLocation تھا:

    {
      "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0"
    }
    

    تو UDID ہوگا 7c3776eb-da87-4c52-ae83-caadf980323a۔

    اس UDID کی ایک کاپی رکھیں کیونکہ آپ کو جیو فینس کی جانچ کے لیے اس کی ضرورت ہوگی۔

جیو فینس کے خلاف پوائنٹس کی جانچ

ایک بار پولیگون Azure Maps میں اپ لوڈ ہو جانے کے بعد، آپ ایک نقطہ جانچ سکتے ہیں تاکہ یہ دیکھ سکیں کہ آیا یہ جیو فینس کے اندر ہے یا باہر۔ آپ یہ جیو فینس کے UDID، اور جانچنے کے لیے نقطے کے عرض بلد اور طول بلد کو پاس کرکے ویب API درخواست کے ذریعے کرتے ہیں۔

جب آپ یہ درخواست کرتے ہیں، تو آپ ایک قدر جسے searchBuffer کہا جاتا ہے بھی پاس کر سکتے ہیں۔ یہ Maps API کو بتاتا ہے کہ نتائج واپس کرتے وقت کتنی درستگی رکھنی ہے۔ اس کی وجہ یہ ہے کہ GPS مکمل طور پر درست نہیں ہے، اور کبھی کبھی مقامات میٹرز یا اس سے زیادہ کے فرق کے ساتھ ہو سکتے ہیں۔ سرچ بفر کا ڈیفالٹ 50m ہے، لیکن آپ 0m سے 500m تک کی اقدار سیٹ کر سکتے ہیں۔

جب API کال سے نتائج واپس کیے جاتے ہیں، تو نتائج کے حصوں میں سے ایک distance ہوتا ہے، جو جیو فینس کے کنارے کے قریب ترین نقطے تک ماپا جاتا ہے، مثبت قدر اگر نقطہ جیو فینس کے باہر ہو، منفی اگر یہ اندر ہو۔ اگر یہ فاصلہ سرچ بفر سے کم ہے، تو اصل فاصلہ میٹرز میں واپس کیا جاتا ہے، ورنہ قدر 999 یا -999 ہوتی ہے۔ 999 کا مطلب ہے کہ نقطہ جیو فینس سے سرچ بفر سے زیادہ باہر ہے، -999 کا مطلب ہے کہ یہ جیو فینس سے سرچ بفر سے زیادہ اندر ہے۔

جیو فینس کے ارد گرد 50m سرچ بفر

اوپر دی گئی تصویر میں، جیو فینس کے ارد گرد 50m سرچ بفر ہے۔

  • جیو فینس کے مرکز میں ایک نقطہ، سرچ بفر کے اندر، -999 کا فاصلہ رکھتا ہے۔
  • سرچ بفر سے کافی باہر ایک نقطہ 999 کا فاصلہ رکھتا ہے۔
  • جیو فینس کے اندر اور سرچ بفر کے اندر ایک نقطہ، جیو فینس سے 6m دور، 6m کا فاصلہ رکھتا ہے۔
  • جیو فینس کے باہر اور سرچ بفر کے اندر ایک نقطہ، جیو فینس سے 39m دور، 39m کا فاصلہ رکھتا ہے۔

جیو فینس کے کنارے تک فاصلے کو جاننا ضروری ہے، اور گاڑی کے مقام کی بنیاد پر فیصلے کرتے وقت دیگر معلومات جیسے دیگر GPS ریڈنگز، رفتار اور سڑک کے ڈیٹا کے ساتھ اسے یکجا کرنا۔

مثال کے طور پر، تصور کریں کہ GPS ریڈنگز ایک گاڑی کو دکھاتی ہیں جو ایک سڑک پر چل رہی ہے جو جیو فینس کے ساتھ چلتی ہے۔ اگر ایک GPS قدر غلط ہے اور گاڑی کو جیو فینس کے اندر رکھتی ہے، حالانکہ وہاں گاڑیوں کی رسائی نہیں ہے، تو اسے نظر انداز کیا جا سکتا ہے۔

GPS ٹریل جو Microsoft کیمپس کے ساتھ 520 پر گاڑی کو دکھاتا ہے، سڑک کے ساتھ GPS ریڈنگز کے ساتھ، سوائے ایک کے جو کیمپس پر ہے، جیو فینس کے اندر مندرجہ بالا تصویر میں، مائیکروسافٹ کیمپس کے ایک حصے پر ایک جیو فینس دکھایا گیا ہے۔ سرخ لائن ایک ٹرک کو 520 کے ساتھ چلتے ہوئے دکھاتی ہے، اور دائرے GPS ریڈنگز کو ظاہر کرتے ہیں۔ ان میں سے زیادہ تر درست ہیں اور 520 کے ساتھ ہیں، لیکن ایک غلط ریڈنگ جیو فینس کے اندر ہے۔ یہ ریڈنگ درست نہیں ہو سکتی - 520 سے کیمپس پر اچانک مڑنے اور پھر واپس 520 پر جانے کے لیے کوئی سڑکیں نہیں ہیں۔ جیو فینس کو چیک کرنے والا کوڈ نتائج پر عمل کرنے سے پہلے پچھلی ریڈنگز کو مدنظر رکھنا ہوگا۔

آپ کو کون سے اضافی ڈیٹا کی ضرورت ہوگی تاکہ یہ چیک کیا جا سکے کہ آیا GPS ریڈنگ کو درست سمجھا جا سکتا ہے؟

کام - جیو فینس کے خلاف پوائنٹس کی جانچ کریں

  1. ویب API کوئری کے لیے URL بنانے سے شروع کریں۔ فارمیٹ یہ ہے:

    https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=<subscription-key>&udid=<UDID>&lat=<lat>&lon=<lon>
    

    <subscription_key> کو اپنے Azure Maps اکاؤنٹ کے API key سے تبدیل کریں۔

    <UDID> کو پچھلے کام سے جیو فینس کے UDID سے تبدیل کریں۔

    <lat> اور <lon> کو اس latitude اور longitude سے تبدیل کریں جسے آپ جانچنا چاہتے ہیں۔

    یہ URL https://atlas.microsoft.com/spatial/geofence/json API کا استعمال کرتا ہے تاکہ GeoJSON کے ذریعے ڈیفائن کیے گئے جیو فینس کو کوئری کیا جا سکے۔ یہ 1.0 API ورژن کو ٹارگٹ کرتا ہے۔ deviceId پیرامیٹر ضروری ہے اور یہ اس ڈیوائس کا نام ہونا چاہیے جس سے latitude اور longitude آیا ہے۔

    ڈیفالٹ سرچ بفر 50m ہے، اور آپ اسے ایک اضافی پیرامیٹر searchBuffer=<distance> پاس کر کے تبدیل کر سکتے ہیں، <distance> کو میٹرز میں سرچ بفر فاصلے پر سیٹ کریں، 0 سے 500 تک۔

  2. curl کا استعمال کرتے ہوئے اس URL پر GET درخواست کریں:

    curl --request GET '<URL>'
    

    💁 اگر آپ کو BadRequest کا رسپانس کوڈ ملتا ہے، جس میں یہ ایرر ہوتا ہے:

    Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.
    

    تو آپ کے GeoJSON میں properties سیکشن geometryId کے ساتھ غائب ہے۔ آپ کو اپنے GeoJSON کو درست کرنا ہوگا، پھر اوپر دیے گئے مراحل کو دوبارہ اپلوڈ کرنے اور نیا UDID حاصل کرنے کے لیے دہرائیں۔

  3. رسپانس میں geometries کی ایک فہرست ہوگی، ہر پولیگون کے لیے جو GeoJSON میں ڈیفائن کیا گیا ہے تاکہ جیو فینس بنایا جا سکے۔ ہر geometry میں دلچسپی کے 3 فیلڈز ہوں گے: distance, nearestLat اور nearestLon۔

    {
        "geometries": [
            {
                "deviceId": "gps-sensor",
                "udId": "7c3776eb-da87-4c52-ae83-caadf980323a",
                "geometryId": "1",
                "distance": 999.0,
                "nearestLat": 47.645875,
                "nearestLon": -122.142713
            }
        ],
        "expiredGeofenceGeometryId": [],
        "invalidPeriodGeofenceGeometryId": []
    }
    
    • nearestLat اور nearestLon جیو فینس کے کنارے پر ایک پوائنٹ کے latitude اور longitude ہیں جو جانچے جانے والے مقام کے قریب ترین ہیں۔

    • distance جانچے جانے والے مقام سے جیو فینس کے کنارے کے قریب ترین پوائنٹ تک کا فاصلہ ہے۔ منفی نمبر جیو فینس کے اندر، مثبت باہر۔ یہ ویلیو 50 (ڈیفالٹ سرچ بفر) سے کم ہوگی، یا 999۔

  4. جیو فینس کے اندر اور باہر کے مقامات کے ساتھ اس عمل کو کئی بار دہرائیں۔

سرور لیس کوڈ سے جیو فینس کا استعمال کریں

آپ اب اپنے Functions ایپ میں ایک نیا ٹرگر شامل کر سکتے ہیں تاکہ IoT Hub GPS ایونٹ ڈیٹا کو جیو فینس کے خلاف جانچ سکیں۔

کنزیومر گروپس

جیسا کہ آپ نے پچھلے اسباق میں یاد کیا ہوگا، IoT Hub آپ کو ان ایونٹس کو دوبارہ چلانے کی اجازت دے گا جو ہب نے وصول کیے ہیں لیکن پروسیس نہیں کیے گئے۔ لیکن اگر متعدد ٹرگرز کنیکٹ ہو جائیں تو کیا ہوگا؟ یہ کیسے جان سکے گا کہ کس نے کون سے ایونٹس پروسیس کیے ہیں؟

جواب یہ ہے کہ یہ نہیں جان سکتا! اس کے بجائے آپ ایونٹس کو پڑھنے کے لیے متعدد الگ الگ کنیکشنز ڈیفائن کر سکتے ہیں، اور ہر ایک ان ریڈ میسجز کے دوبارہ چلانے کا انتظام کر سکتا ہے۔ انہیں کنزیومر گروپس کہا جاتا ہے۔ جب آپ اینڈ پوائنٹ سے کنیکٹ کرتے ہیں، تو آپ یہ اسپیسفائی کر سکتے ہیں کہ آپ کس کنزیومر گروپ سے کنیکٹ کرنا چاہتے ہیں۔ آپ کی ایپلیکیشن کے ہر کمپوننٹ ایک مختلف کنزیومر گروپ سے کنیکٹ کرے گا۔

ایک IoT Hub جس میں 3 کنزیومر گروپس ایک ہی میسجز کو 3 مختلف فنکشنز ایپس میں تقسیم کر رہے ہیں

نظریہ میں، ہر کنزیومر گروپ سے 5 ایپلیکیشنز تک کنیکٹ ہو سکتی ہیں، اور وہ سب میسجز وصول کریں گی جب وہ آئیں گے۔ بہترین عمل یہ ہے کہ ہر کنزیومر گروپ تک صرف ایک ایپلیکیشن کو رسائی دی جائے تاکہ ڈپلیکیٹ میسجز پروسیسنگ سے بچا جا سکے، اور یہ یقینی بنایا جا سکے کہ جب دوبارہ شروع کیا جائے تو تمام قطار میں موجود میسجز درست طریقے سے پروسیس ہوں۔ مثال کے طور پر، اگر آپ نے اپنی Functions ایپ کو لوکل طور پر لانچ کیا اور اسے کلاؤڈ میں بھی چلایا، تو وہ دونوں میسجز پروسیس کریں گے، جس سے اسٹوریج اکاؤنٹ میں ڈپلیکیٹ blobs محفوظ ہوں گے۔

اگر آپ IoT Hub ٹرگر کے لیے function.json فائل کا جائزہ لیں جو آپ نے ایک پہلے سبق میں بنایا تھا، تو آپ ایونٹ ہب ٹرگر بائنڈنگ سیکشن میں کنزیومر گروپ دیکھیں گے:

"consumerGroup": "$Default"

جب آپ IoT Hub بناتے ہیں، تو آپ کو ڈیفالٹ $Default کنزیومر گروپ پہلے سے بنایا ہوا ملتا ہے۔ اگر آپ ایک اضافی ٹرگر شامل کرنا چاہتے ہیں، تو آپ اسے ایک نئے کنزیومر گروپ کا استعمال کرتے ہوئے شامل کر سکتے ہیں۔

💁 اس سبق میں، آپ جیو فینس کو چیک کرنے کے لیے ایک مختلف فنکشن استعمال کریں گے بجائے اس کے جو GPS ڈیٹا کو اسٹور کرنے کے لیے استعمال ہوتا ہے۔ یہ کنزیومر گروپس کا استعمال دکھانے اور کوڈ کو الگ کرنے کے لیے ہے تاکہ اسے پڑھنا اور سمجھنا آسان ہو۔ پروڈکشن ایپلیکیشن میں آپ اسے کئی طریقوں سے آرکیٹیکٹ کر سکتے ہیں - دونوں کو ایک فنکشن پر رکھنا، اسٹوریج اکاؤنٹ پر ٹرگر کا استعمال کرتے ہوئے جیو فینس کو چیک کرنے کے لیے فنکشن چلانا، یا متعدد فنکشنز کا استعمال۔ کوئی 'صحیح طریقہ' نہیں ہے، یہ آپ کی ایپلیکیشن اور آپ کی ضروریات پر منحصر ہے۔

کام - ایک نیا کنزیومر گروپ بنائیں

  1. اپنے IoT Hub کے لیے geofence نامی ایک نیا کنزیومر گروپ بنانے کے لیے درج ذیل کمانڈ چلائیں:

    az iot hub consumer-group create --name geofence \
                                     --hub-name <hub_name>
    

    <hub_name> کو اپنے IoT Hub کے نام سے تبدیل کریں۔

  2. اگر آپ IoT Hub کے تمام کنزیومر گروپس دیکھنا چاہتے ہیں، تو درج ذیل کمانڈ چلائیں:

    az iot hub consumer-group list --output table \
                                   --hub-name <hub_name>
    

    <hub_name> کو اپنے IoT Hub کے نام سے تبدیل کریں۔ یہ تمام کنزیومر گروپس کی فہرست دے گا۔

    Name      ResourceGroup
    --------  ---------------
    $Default  gps-sensor
    geofence  gps-sensor
    

💁 جب آپ نے ایک پہلے سبق میں IoT Hub ایونٹ مانیٹر چلایا تھا، تو یہ $Default کنزیومر گروپ سے کنیکٹ ہوا تھا۔ یہی وجہ تھی کہ آپ ایونٹ مانیٹر اور ایونٹ ٹرگر کو نہیں چلا سکتے تھے۔ اگر آپ دونوں کو چلانا چاہتے ہیں، تو آپ اپنی تمام Functions ایپس کے لیے دوسرے کنزیومر گروپس استعمال کر سکتے ہیں، اور $Default کو ایونٹ مانیٹر کے لیے رکھ سکتے ہیں۔

کام - ایک نیا IoT Hub ٹرگر بنائیں

  1. اپنے gps-trigger فنکشن ایپ میں ایک نیا IoT Hub ایونٹ ٹرگر شامل کریں جو آپ نے ایک پہلے سبق میں بنایا تھا۔ اس فنکشن کو geofence-trigger کہیں۔

    ⚠️ آپ پروجیکٹ 2، سبق 5 سے IoT Hub ایونٹ ٹرگر بنانے کی ہدایات کا حوالہ دے سکتے ہیں اگر ضرورت ہو۔

  2. function.json فائل میں IoT Hub کنیکشن اسٹرنگ کو کنفیگر کریں۔ local.settings.json تمام ٹرگرز کے درمیان شیئر کی جاتی ہے جو فنکشن ایپ میں ہیں۔

  3. function.json فائل میں consumerGroup کی ویلیو کو نئے geofence کنزیومر گروپ کا حوالہ دینے کے لیے اپ ڈیٹ کریں:

    "consumerGroup": "geofence"
    
  4. آپ کو اس ٹرگر میں اپنے Azure Maps اکاؤنٹ کے سبسکرپشن key کا استعمال کرنا ہوگا، لہذا local.settings.json فائل میں MAPS_KEY کے نام سے ایک نیا اندراج شامل کریں۔

  5. Functions ایپ کو چلائیں تاکہ یہ یقینی بنایا جا سکے کہ یہ کنیکٹ ہو رہی ہے اور میسجز پروسیس کر رہی ہے۔ پہلے سبق سے iot-hub-trigger بھی چلائے گا اور blobs کو اسٹوریج میں اپلوڈ کرے گا۔

    اسٹوریج میں ڈپلیکیٹ GPS ریڈنگز سے بچنے کے لیے، آپ کلاؤڈ میں چل رہی Functions ایپ کو روک سکتے ہیں۔ ایسا کرنے کے لیے درج ذیل کمانڈ استعمال کریں:

    az functionapp stop --resource-group gps-sensor \
                        --name <functions_app_name>
    

    <functions_app_name> کو اپنے Functions ایپ کے نام سے تبدیل کریں۔

    آپ اسے بعد میں درج ذیل کمانڈ کے ساتھ دوبارہ شروع کر سکتے ہیں:

    az functionapp start --resource-group gps-sensor \
                        --name <functions_app_name>
    

    <functions_app_name> کو اپنے Functions ایپ کے نام سے تبدیل کریں۔

کام - ٹرگر سے جیو فینس کی جانچ کریں

اس سبق کے شروع میں آپ نے curl کا استعمال کرتے ہوئے جیو فینس کو کوئری کیا تاکہ یہ دیکھا جا سکے کہ ایک پوائنٹ اندر یا باہر واقع ہے۔ آپ اپنے ٹرگر کے اندر سے اسی طرح کی ویب درخواست کر سکتے ہیں۔

  1. جیو فینس کو کوئری کرنے کے لیے، آپ کو اس کا UDID چاہیے۔ local.settings.json فائل میں GEOFENCE_UDID کے نام سے ایک نیا اندراج شامل کریں۔

  2. نئے geofence-trigger ٹرگر سے __init__.py فائل کھولیں۔

  3. فائل کے اوپر درج ذیل امپورٹ شامل کریں:

    import json
    import os
    import requests
    

    requests پیکیج آپ کو ویب API کالز کرنے کی اجازت دیتا ہے۔ Azure Maps کا Python SDK نہیں ہے، آپ کو Python کوڈ سے اسے استعمال کرنے کے لیے ویب API کالز کرنی ہوں گی۔

  4. main میتھڈ کے آغاز میں درج ذیل 2 لائنز شامل کریں تاکہ Maps سبسکرپشن key حاصل کی جا سکے:

    maps_key = os.environ['MAPS_KEY']
    geofence_udid = os.environ['GEOFENCE_UDID']    
    
  5. for event in events لوپ کے اندر، درج ذیل شامل کریں تاکہ ہر ایونٹ سے latitude اور longitude حاصل کیا جا سکے:

    event_body = json.loads(event.get_body().decode('utf-8'))
    lat = event_body['gps']['lat']
    lon = event_body['gps']['lon']
    

    یہ کوڈ ایونٹ باڈی سے JSON کو ایک ڈکشنری میں تبدیل کرتا ہے، پھر gps فیلڈ سے lat اور lon نکالتا ہے۔

  6. requests کا استعمال کرتے وقت، curl کے ساتھ ایک لمبا URL بنانے کے بجائے، آپ صرف URL حصہ استعمال کر سکتے ہیں اور پیرامیٹرز کو ایک ڈکشنری کے طور پر پاس کر سکتے ہیں۔ درج ذیل کوڈ شامل کریں تاکہ کال کرنے کے لیے URL کو ڈیفائن کریں اور پیرامیٹرز کو کنفیگر کریں:

    url = 'https://atlas.microsoft.com/spatial/geofence/json'
    
    params = {
        'api-version': 1.0,
        'deviceId': 'gps-sensor',
        'subscription-key': maps_key,
        'udid' : geofence_udid,
        'lat' : lat,
        'lon' : lon
    }
    

    params ڈکشنری میں آئٹمز وہ key ویلیو پیرز سے میل کھائیں گے جو آپ نے ویب API کو curl کے ذریعے کال کرتے وقت استعمال کیے تھے۔

  7. ویب API کو کال کرنے کے لیے درج ذیل لائنز کوڈ شامل کریں:

    response = requests.get(url, params=params)
    response_body = json.loads(response.text)
    

    یہ URL کو پیرامیٹرز کے ساتھ کال کرتا ہے، اور ایک رسپانس آبجیکٹ واپس حاصل کرتا ہے۔

  8. اس کے نیچے درج ذیل کوڈ شامل کریں:

    distance = response_body['geometries'][0]['distance']
    
    if distance == 999:
        logging.info('Point is outside geofence')
    elif distance > 0:
        logging.info(f'Point is just outside geofence by a distance of {distance}m')
    elif distance == -999:
        logging.info(f'Point is inside geofence')
    else:
        logging.info(f'Point is just inside geofence by a distance of {distance}m')
    

    یہ کوڈ ایک geometry فرض کرتا ہے، اور اس سنگل geometry سے distance نکالتا ہے۔ پھر یہ distance کی بنیاد پر مختلف میسجز لاگ کرتا ہے۔

  9. اس کوڈ کو چلائیں۔ آپ لاگنگ آؤٹ پٹ میں دیکھیں گے کہ GPS کوآرڈینیٹس جیو فینس کے اندر ہیں یا باہر، 50m کے اندر ہونے پر distance کے ساتھ۔ اس کوڈ کو مختلف جیو فینسز کے ساتھ آزمائیں جو آپ کے GPS سینسر کے مقام پر مبنی ہوں، سینسر کو منتقل کرنے کی کوشش کریں (مثال کے طور پر موبائل فون سے WiFi کے ذریعے جڑا ہوا، یا ورچوئل IoT ڈیوائس پر مختلف کوآرڈینیٹس کے ساتھ) تاکہ یہ تبدیلی دیکھ سکیں۔

  10. جب آپ تیار ہوں، اس کوڈ کو کلاؤڈ میں اپنی Functions ایپ پر ڈپلائی کریں۔ نئی ایپلیکیشن سیٹنگز کو ڈپلائی کرنا نہ بھولیں۔

    ⚠️ آپ پروجیکٹ 2، سبق 5 سے ایپلیکیشن سیٹنگز اپلوڈ کرنے کی ہدایات کا حوالہ دے سکتے ہیں اگر ضرورت ہو۔

    ⚠️ آپ پروجیکٹ 2، سبق 5 سے اپنی Functions ایپ کو کلاؤڈ پر ڈپلائی کرنے کی ہدایات کا حوالہ دے سکتے ہیں اگر ضرورت ہو۔

💁 آپ اس کوڈ کو code/functions فولڈر میں تلاش کر سکتے ہیں۔


🚀 چیلنج

اس سبق میں آپ نے ایک GeoJSON فائل کے ساتھ ایک پولیگون کا استعمال کرتے ہوئے ایک جیو فینس شامل کیا۔ آپ ایک ہی وقت میں متعدد پولیگونز اپلوڈ کر سکتے ہیں، جب تک کہ ان کے geometryId ویلیوز properties سیکشن میں مختلف ہوں۔

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

پوسٹ-لیکچر کوئز

پوسٹ-لیکچر کوئز

جائزہ اور خود مطالعہ

اسائنمنٹ

Twilio کا استعمال کرتے ہوئے نوٹیفیکیشنز بھیجیں


ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔