ভৌগলিক অবস্থান অনুরোধ এবং প্রতিক্রিয়া

ভূ-অবস্থান অনুরোধ

ভৌগলিক অবস্থানের অনুরোধগুলি POST ব্যবহার করে নিম্নলিখিত URL এ পাঠানো হয়:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

আপনার অনুরোধে আপনাকে অবশ্যই একটি কী নির্দিষ্ট করতে হবে, একটি key প্যারামিটারের মান হিসাবে অন্তর্ভুক্ত করা হয়েছে। একটি key হল আপনার অ্যাপ্লিকেশনের API কী। এই কী কোটা ব্যবস্থাপনার উদ্দেশ্যে আপনার আবেদনকে চিহ্নিত করে। কিভাবে একটি চাবি পেতে শিখুন.

শরীরের অনুরোধ

অনুরোধের অংশ অবশ্যই JSON হিসাবে ফর্ম্যাট করা উচিত। যদি অনুরোধের অংশটি অন্তর্ভুক্ত না করা হয়, তাহলে অনুরোধের অবস্থানের IP ঠিকানার উপর ভিত্তি করে ফলাফলগুলি ফেরত দেওয়া হয়। নিম্নলিখিত ক্ষেত্রগুলি সমর্থিত, এবং সমস্ত ক্ষেত্র ঐচ্ছিক, যদি না অন্যথায় বলা হয়:

মাঠ JSON প্রকার বর্ণনা নোট
homeMobileCountryCode number ( uint32 ) ডিভাইসের হোম নেটওয়ার্কের জন্য মোবাইল কান্ট্রি কোড (MCC)। radioType gsm (ডিফল্ট), wcdma , lte এবং nr এর জন্য সমর্থিত ; cdma এর জন্য ব্যবহার করা হয় না।
বৈধ পরিসীমা: 0-999।
homeMobileNetworkCode number ( uint32 ) ডিভাইসের হোম নেটওয়ার্কের জন্য মোবাইল নেটওয়ার্ক কোড। এটি GSM, WCDMA, LTE এবং NR-এর জন্য MNC।
CDMA সিস্টেম আইডি (SID) ব্যবহার করে
MNC এর জন্য বৈধ পরিসীমা: 0-999।
SID-এর জন্য বৈধ পরিসর: 0–32767।
radioType string মোবাইল রেডিও প্রকার। সমর্থিত মানগুলি হল gsm , cdma , wcdma , lte এবং nr যদিও এই ক্ষেত্রটি ঐচ্ছিক, এটি সর্বদা অন্তর্ভুক্ত করা উচিত যদি রেডিও প্রকারটি ক্লায়েন্ট দ্বারা পরিচিত হয়।
যদি ক্ষেত্রটি বাদ দেওয়া হয়, জিওলোকেশন এপিআই ডিফল্ট gsm তে, যার ফলে অনুমান করা রেডিও টাইপটি ভুল হলে অবৈধ বা শূন্য ফলাফল হবে
carrier string বাহকের নাম।
considerIp boolean ওয়াইফাই এবং সেল টাওয়ার সিগন্যাল অনুপস্থিত, খালি বা ডিভাইসের অবস্থান অনুমান করার জন্য যথেষ্ট না হলে IP ভূ-অবস্থানে ফিরে যেতে হবে কিনা তা নির্দিষ্ট করে৷ ডিফল্ট থেকে true । পিছিয়ে পড়া রোধ করতে considerIp কে false সেট করুন।
cellTowers array সেল টাওয়ার অবজেক্টের একটি অ্যারে। নীচে সেল টাওয়ার অবজেক্ট বিভাগ দেখুন।
wifiAccessPoints array ওয়াইফাই অ্যাক্সেস পয়েন্ট অবজেক্টের একটি অ্যারে। নীচের ওয়াইফাই অ্যাক্সেস পয়েন্ট অবজেক্ট বিভাগ দেখুন।

একটি উদাহরণ Geolocation API অনুরোধের বডি নীচে দেখানো হয়েছে।

{
  "homeMobileCountryCode": 310,
  "homeMobileNetworkCode": 410,
  "radioType": "gsm",
  "carrier": "Vodafone",
  "considerIp": true,
  "cellTowers": [
    // See the Cell Tower Objects section below.
  ],
  "wifiAccessPoints": [
    // See the WiFi Access Point Objects section below.
  ]
}

সেল টাওয়ার বস্তু

অনুরোধের বডির cellTowers অ্যারেতে শূন্য বা তার বেশি সেল টাওয়ার অবজেক্ট রয়েছে।

মাঠ JSON প্রকার বর্ণনা নোট
cellId number ( uint32 ) ঘরের অনন্য শনাক্তকারী। radioType gsm (ডিফল্ট), cdma , wcdma এবং lte এর জন্য প্রয়োজনীয় ; nr জন্য প্রত্যাখ্যাত
নীচের গণনা করা সেলআইডি বিভাগটি দেখুন, যা প্রতিটি রেডিও প্রকারের জন্য বৈধ মান রেঞ্জগুলিও তালিকাভুক্ত করে৷
newRadioCellId number ( uint64 ) NR (5G) সেলের অনন্য শনাক্তকারী। radioType nr এর জন্য প্রয়োজনীয় ; অন্যান্য ধরনের জন্য প্রত্যাখ্যাত
নীচের গণনা করা newRadioCellId বিভাগটি দেখুন, যা ক্ষেত্রের জন্য বৈধ মানের পরিসরও তালিকাভুক্ত করে।
locationAreaCode number ( uint32 ) GSM এবং WCDMA নেটওয়ার্কের জন্য লোকেশন এরিয়া কোড (LAC)।
CDMA নেটওয়ার্কের জন্য নেটওয়ার্ক আইডি (NID)।
LTE এবং NR নেটওয়ার্কের জন্য ট্র্যাকিং এরিয়া কোড (TAC)।
radioType gsm (ডিফল্ট) এবং cdma জন্য প্রয়োজনীয় , অন্যান্য মানের জন্য ঐচ্ছিক।
gsm , cdma , wcdma এবং lte সহ বৈধ পরিসীমা: 0–65535।
nr সহ বৈধ পরিসীমা : 0–16777215৷
mobileCountryCode number ( uint32 ) সেল টাওয়ারের মোবাইল কান্ট্রি কোড (MCC)। radioType gsm (ডিফল্ট), wcdma , lte এবং nr এর জন্য প্রয়োজনীয় ; cdma এর জন্য ব্যবহার করা হয় না।
বৈধ পরিসীমা: 0-999।
mobileNetworkCode number ( uint32 ) সেল টাওয়ারের মোবাইল নেটওয়ার্ক কোড। এটি GSM, WCDMA, LTE এবং NR-এর জন্য MNC।
সিডিএমএ সিস্টেম আইডি (এসআইডি) ব্যবহার করে।
প্রয়োজন।
MNC এর জন্য বৈধ পরিসীমা: 0-999।
SID-এর জন্য বৈধ পরিসর: 0–32767।

নিম্নলিখিত ঐচ্ছিক ক্ষেত্রগুলি ব্যবহার করা হয় না, তবে মান উপলব্ধ থাকলে অন্তর্ভুক্ত করা যেতে পারে।

মাঠ JSON প্রকার বর্ণনা নোট
age number ( uint32 ) এই সেল প্রাথমিক হওয়ার পর থেকে মিলিসেকেন্ডের সংখ্যা৷ বয়স 0 হলে, cellId বা newRadioCellId একটি বর্তমান পরিমাপের প্রতিনিধিত্ব করে।
signalStrength number ( double ) রেডিও সংকেত শক্তি dBm পরিমাপ.
timingAdvance number ( double ) সময় অগ্রিম মান.

cellId গণনা করা হচ্ছে

NR (5G) এর পূর্বের রেডিও প্রকারগুলি 32-বিট cellId ক্ষেত্র ব্যবহার করে জিওলোকেশন API এ নেটওয়ার্ক সেল আইডি পাস করার জন্য।

  • জিএসএম (2জি) নেটওয়ার্কগুলি 16-বিট সেল আইডি (সিআইডি) ব্যবহার করে। বৈধ পরিসীমা: 0-65535।
  • CDMA (2G) নেটওয়ার্ক 16-বিট বেস স্টেশন আইডি (BID) ব্যবহার করে। বৈধ পরিসীমা: 0-65535।
  • WCDMA (3G) নেটওয়ার্কগুলি UTRAN/GERAN সেল আইডেন্টিটি (UC-ID) ব্যবহার করে, যা একটি 28-বিট পূর্ণসংখ্যা মান যা 12-বিট রেডিও নেটওয়ার্ক কন্ট্রোলার আইডেন্টিফায়ার (RNC-ID) এবং 16-বিট সেল আইডি (CID) কে সংযুক্ত করে।
    সূত্র: rnc_id << 16 | cid
    বৈধ পরিসীমা: 0–268435455।
    দ্রষ্টব্য: WCDMA নেটওয়ার্কে শুধুমাত্র 16-বিট সেল আইডি মান উল্লেখ করলে ফলাফল ভুল বা শূন্য হয়।
  • এলটিই (4জি) নেটওয়ার্কগুলি ই-ইউট্রান সেল আইডেন্টিটি (ইসিআই) ব্যবহার করে, যা একটি 28-বিট পূর্ণসংখ্যা মান যা 20-বিট ই-ইউট্রান নোড বি আইডেন্টিফায়ার (ইএনবিআইডি) এবং 8-বিট সেল আইডি (সিআইডি) কে সংযুক্ত করে।
    সূত্র: enb_id << 8 | cid
    বৈধ পরিসীমা: 0–268435455।
    দ্রষ্টব্য: LTE নেটওয়ার্কে শুধুমাত্র 8-বিট সেল আইডি মান উল্লেখ করলে ফলাফল ভুল বা শূন্য হয়।

API অনুরোধে এই সীমার বাইরে মান স্থাপন করলে অনির্ধারিত আচরণ হতে পারে। এপিআই, Google-এর বিবেচনার ভিত্তিতে, সংখ্যাটিকে ছেঁটে ফেলতে পারে যাতে এটি নথিভুক্ত পরিসরে ফিট করে, radioType এ একটি সংশোধন অনুমান করতে পারে, বা প্রতিক্রিয়াতে কোনও সূচক ছাড়াই একটি NOT_FOUND ফলাফল ফেরত দিতে পারে৷

LTE সেল টাওয়ার অবজেক্টের একটি উদাহরণ নিচে দেওয়া হল।

{
  "cellTowers": [
    {
      "cellId": 170402199,
      "locationAreaCode": 35632,
      "mobileCountryCode": 310,
      "mobileNetworkCode": 410,
      "age": 0,
      "signalStrength": -60,
      "timingAdvance": 15
    }
  ]
}

newRadioCellId গণনা করা হচ্ছে

নতুন নেটওয়ার্ক, যাদের সেল আইডি 32 বিটের বেশি তারা 64-বিট newRadioCellId ফিল্ড ব্যবহার করে নেটওয়ার্ক সেল আইডি জিওলোকেশন API-এ পাস করার জন্য।

  • NR (5G) নেটওয়ার্কগুলি 36-বিট নিউ রেডিও সেল আইডেন্টিটি (NCI) ব্যবহার করে।
    বৈধ পরিসীমা: 0–68719476735।

NR সেল টাওয়ার অবজেক্টের একটি উদাহরণ নিচে দেওয়া হল।

{
  "cellTowers": [
    {
      "newRadioCellId": 68719476735,
      "mobileCountryCode": 310,
      "mobileNetworkCode": 410,
      "age": 0,
      "signalStrength": -60,
    }
  ]
}

ওয়াইফাই অ্যাক্সেস পয়েন্ট অবজেক্ট

অনুরোধের বডির wifiAccessPoints অ্যারেতে অবশ্যই দুই বা তার বেশি WiFi অ্যাক্সেস পয়েন্ট অবজেক্ট থাকতে হবে যা শারীরিকভাবে স্বতন্ত্র অ্যাক্সেস পয়েন্ট ডিভাইসগুলিকে উপস্থাপন করে৷ macAddress প্রয়োজন; অন্য সব ক্ষেত্র ঐচ্ছিক.

মাঠ JSON প্রকার বর্ণনা নোট
macAddress string ওয়াইফাই নোডের MAC ঠিকানা। এটিকে সাধারণত একটি BSS, BSSID বা MAC ঠিকানা বলা হয়। প্রয়োজন। কোলন-বিচ্ছিন্ন ( : ) হেক্সাডেসিমেল স্ট্রিং।
শুধুমাত্র সার্বজনীন-প্রশাসিত MAC ঠিকানাগুলি API এর মাধ্যমে অবস্থিত হতে পারে। অন্যান্য MAC ঠিকানাগুলি নিঃশব্দে বাদ দেওয়া হয় এবং একটি API অনুরোধ কার্যকরভাবে খালি হয়ে যেতে পারে। বিস্তারিত জানার জন্য, অকেজো ওয়াইফাই অ্যাক্সেস পয়েন্ট ড্রপিং দেখুন।
signalStrength number ( double ) বর্তমান সংকেত শক্তি dBm এ পরিমাপ করা হয়। ওয়াইফাই অ্যাক্সেস পয়েন্টগুলির জন্য, dBm মানগুলি সাধারণত -35 বা কম এবং -128 থেকে -10 dBm পর্যন্ত হয়৷ বিয়োগ চিহ্ন অন্তর্ভুক্ত করতে ভুলবেন না।
age number ( uint32 ) এই অ্যাক্সেস পয়েন্ট শনাক্ত করার পর থেকে মিলিসেকেন্ডের সংখ্যা।
channel number ( uint32 ) যে চ্যানেলের মাধ্যমে ক্লায়েন্ট অ্যাক্সেস পয়েন্টের সাথে যোগাযোগ করছে।
signalToNoiseRatio number ( double ) বর্তমান সংকেত থেকে শব্দ অনুপাত dB তে পরিমাপ করা হয়।

একটি উদাহরণ ওয়াইফাই অ্যাক্সেস পয়েন্ট অবজেক্ট নীচে দেখানো হয়েছে.

{
  "macAddress": "f0:d5:bf:fd:12:ae",
  "signalStrength": -43,
  "signalToNoiseRatio": 0,
  "channel": 11,
  "age": 0
}

নমুনা অনুরোধ

আপনি যদি নমুনা ডেটা সহ জিওলোকেশন API ব্যবহার করে দেখতে চান তবে নিম্নলিখিত JSONটিকে একটি ফাইলে সংরক্ষণ করুন:

{
  "considerIp": "false",
  "wifiAccessPoints": [
    {
      "macAddress": "3c:37:86:5d:75:d4",
      "signalStrength": -35,
      "signalToNoiseRatio": 0
    },
    {
      "macAddress": "30:86:2d:c4:29:d0",
      "signalStrength": -35,
      "signalToNoiseRatio": 0
    }
  ]
}

তারপর আপনি কমান্ড লাইন থেকে আপনার অনুরোধ করতে cURL ব্যবহার করতে পারেন:

$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

পূর্ববর্তী MAC ঠিকানাগুলির প্রতিক্রিয়া এইরকম দেখায়:

{
  "location": {
    "lat": 37.4241173,
    "lng": -122.0915717
  },
  "accuracy": 20
}

অব্যবহৃত ওয়াইফাই অ্যাক্সেস পয়েন্ট বাদ দেওয়া

স্থানীয়ভাবে প্রশাসিত macAddress es সহ WiFi অ্যাক্সেস পয়েন্ট অবজেক্টগুলিকে সরিয়ে দেওয়া জিওলোকেশন API কলগুলির সাফল্যের হারকে উন্নত করতে পারে যা ইনপুট হিসাবে WiFi ব্যবহার করে৷ যদি, ফিল্টার করার পরে, এটি নির্ধারণ করা যায় যে একটি জিওলোকেশন API কল সফল হবে না, তবে দুর্বল সংকেত সহ পুরানো লোকেশন সিগন্যাল বা ওয়াইফাই AP ব্যবহার করার মতো প্রশমনগুলি ব্যবহার করা যেতে পারে। এই পদ্ধতিটি একটি অবস্থান অনুমানের জন্য আপনার আবেদনের প্রয়োজনীয়তা এবং এর নির্ভুলতা এবং প্রত্যাহার প্রয়োজনীয়তার মধ্যে একটি ট্রেডঅফ। নিম্নলিখিত ফিল্টারিং কৌশলগুলি প্রদর্শন করে যে কীভাবে ইনপুটগুলি ফিল্টার করতে হয়, তবে অ্যাপ্লিকেশন প্রকৌশলী হিসাবে আপনি আবেদন করতে বেছে নিতে পারেন এমন প্রশমনগুলি দেখায় না।

স্থানীয়ভাবে পরিচালিত MAC ঠিকানাগুলি API-এর জন্য উপযোগী অবস্থান সংকেত নয় এবং নীরবে অনুরোধ থেকে বাদ দেওয়া হয়। আপনি macAddress এর সবচেয়ে উল্লেখযোগ্য বাইটের দ্বিতীয় সর্বনিম্ন-গুরুত্বপূর্ণ বিটটি 0 , যেমন 1 বিট 02:00:00:00:00:00 মধ্যে 2 দ্বারা প্রতিনিধিত্ব করে। সম্প্রচারিত MAC ঠিকানা ( FF:FF:FF:FF:FF:FF ) হল একটি MAC ঠিকানার উদাহরণ যা এই ফিল্টার দ্বারা কার্যকরভাবে বাদ দেওয়া হবে৷

00:00:5E:00:00:00 এবং 00:00:5E:FF:FF:FF এর মধ্যে MAC ঠিকানাগুলির পরিসর IANA-এর জন্য সংরক্ষিত এবং প্রায়শই নেটওয়ার্ক পরিচালনা এবং মাল্টিকাস্ট ফাংশনের জন্য ব্যবহৃত হয় যা অবস্থান সংকেত হিসাবে তাদের ব্যবহার বাদ দেয় . এপিআই-তে ইনপুট থেকে আপনার এই MAC ঠিকানাগুলিও সরিয়ে দেওয়া উচিত।

উদাহরণস্বরূপ, জিওলোকেশনের জন্য ব্যবহারযোগ্য MAC ঠিকানাগুলি macs নামের macAddress স্ট্রিংগুলির একটি অ্যারে থেকে সংগ্রহ করা যেতে পারে:

জাভা
String[] macs = {"12:34:56:78:9a:bc", "1c:34:56:78:9a:bc", "00:00:5e:00:00:01"};
ArrayList<String> _macs = new ArrayList<>(Arrays.asList(macs));
_macs.removeIf(m -> !(0 == (2 & Integer.parseInt(m.substring(1, 2), 16))
                      && !m.substring(0, 8).toUpperCase().equals("00:00:5E")));
    
পাইথন
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01']
macs = [m for m in macs if (0 == (2 & int(m[1], 16)) and m[:8].upper() != '00:00:5E')]
    
জাভাস্ক্রিপ্ট
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01'];
macs = macs.filter(m => 0 === (2 & Number.parseInt(m[1], 16))
                           && m.substr(0, 8).toUpperCase() !== '00:00:5E');
    

এই ফিল্টারটি ব্যবহার করলে শুধুমাত্র 1c:34:56:78:9a:bc তালিকায় অবশিষ্ট থাকে। যেহেতু এই তালিকায় 2টিরও কম ওয়াইফাই MAC ঠিকানা রয়েছে, তাই অনুরোধটি সফল হবে না এবং একটি HTTP 404 ( notFound ) প্রতিক্রিয়া ফেরত দেওয়া হবে৷

ভূ-অবস্থান প্রতিক্রিয়া

একটি সফল ভূ-অবস্থান অনুরোধ একটি অবস্থান এবং ব্যাসার্ধ সংজ্ঞায়িত করে একটি JSON-ফরম্যাটেড প্রতিক্রিয়া প্রদান করে।

  • location : ব্যবহারকারীর আনুমানিক অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক, ডিগ্রীতে। একটি lat এবং একটি lng সাবফিল্ড রয়েছে৷
  • accuracy : আনুমানিক অবস্থানের নির্ভুলতা, মিটারে। এটি প্রদত্ত location চারপাশে একটি বৃত্তের ব্যাসার্ধকে উপস্থাপন করে।
{
  "location": {
    "lat": 37.421875199999995,
    "lng": -122.0851173
  },
  "accuracy": 120
}