জিওকোড একটি ঠিকানা, জিওকোড একটি ঠিকানা, জিওকোড একটি ঠিকানা, জিওকোড একটি ঠিকানা

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA) ডেভেলপাররা

জিওকোডিং একটি ঠিকানাকে মানচিত্রের একটি অবস্থানে অনুবাদ করে। যখন আপনি একটি ঠিকানা জিওকোড করেন, তখন প্রতিক্রিয়াটিতে থাকে:

  • অবস্থানের স্থান আইডি
  • অবস্থানের অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক
  • অবস্থানের প্লাস কোড
  • সম্প্রসারিত ঠিকানার বিবরণ

জিওকোড অনুরোধ

একটি জিওকোড অনুরোধ হল একটি HTTP GET অনুরোধ। আপনি ঠিকানাটিকে একটি অসংগঠিত স্ট্রিং হিসাবে নির্দিষ্ট করতে পারেন:

https://geocode.googleapis.com/v4beta/geocode/address/ADDRESS_STRING

অথবা কোয়েরি প্যারামিটার দ্বারা উপস্থাপিত ঠিকানা উপাদানগুলির একটি কাঠামোগত সেট হিসাবে:

https://geocode.googleapis.com/v4beta/geocode/address?STRUCTURED_ADDRESS

HTML ফর্ম্যাটে ক্যাপচার করা ঠিকানা উপাদানগুলি প্রক্রিয়া করার সময় আপনি সাধারণত স্ট্রাকচার্ড ফর্ম্যাট ব্যবহার করেন।

GET অনুরোধের অংশ হিসেবে অন্যান্য সমস্ত প্যারামিটার URL প্যারামিটার হিসেবে অথবা API কী এবং ফিল্ড মাস্কের মতো প্যারামিটারের জন্য হেডারে পাস করুন।

একটি অসংগঠিত ঠিকানা স্ট্রিং পাস করুন

একটি আনস্ট্রাকচার্ড অ্যাড্রেস হল একটি অ্যাড্রেস যা স্ট্রিং বা প্লাস কোড হিসেবে ফর্ম্যাট করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি "1600 অ্যাম্ফিথিয়েটার পার্কওয়ে, মাউন্টেন ভিউ, সিএ" নামক URL এনকোডেড অ্যাড্রেস স্ট্রিংটি পাস করে:

https://geocode.googleapis.com/v4beta/geocode/address/1600+Amphitheatre+Parkway,+Mountain+View,+CA?key=API_KEY

লক্ষ্য করুন যে URL-এ "+" অক্ষরটি একটি স্পেসে রূপান্তরিত হয়েছে।

আপনি একটি curl কমান্ড ব্যবহার করেও অনুরোধটি করতে পারেন:

curl -H "X-Goog-Api-Key: API_KEY" \
"https://geocode.googleapis.com/v4beta/geocode/address/1600+Amphitheatre+Parkway,+Mountain+View,+CA"

ঠিকানাগুলিতে অনেক ধরণের বিশেষ অক্ষর থাকতে পারে। উদাহরণস্বরূপ, "7/1 King St, Concord West"-এর মতো একটি "/"। URL "/" কে %2F হিসাবে এনকোড করে:

https://geocode.googleapis.com/v4beta/geocode/address/7%2F1+King+St,+Concord+West
?key=API_KEY

আরেকটি সাধারণ উদাহরণ হল "#" অক্ষর, যেমন "9500 W Bryn Mawr Ave #650, Rosemont"। URL "#" কে %2FE হিসাবে এনকোড করে:

https://geocode.googleapis.com/v4beta/geocode/address/9500+W+Bryn+Mawr+Ave+%23650,+Rosemont?key=API_KEY

পরবর্তী উদাহরণে, আপনি একটি আনস্ট্রাকচার্ড অ্যাড্রেস স্ট্রিংকে প্লাস কোড 849VCWC8+R4 হিসেবে উল্লেখ করবেন। নিশ্চিত করুন যে আপনি "+" অক্ষরটিকে %2B হিসেবে URL-এনকোড করেছেন:

https://geocode.googleapis.com/v4beta/geocode/address/849VCWC8%2BR4?key=API_KEY

একটি কাঠামোগত ঠিকানা দিন

address ক্যোয়ারী প্যারামিটার ব্যবহার করে একটি স্ট্রাকচার্ড ঠিকানা নির্দিষ্ট করুন, যেমন PostalAddressPostalAddress অবজেক্ট আপনাকে অনুরোধের কিছু বা সমস্ত ঠিকানা উপাদানকে পৃথক ক্যোয়ারী প্যারামিটার হিসাবে নির্দিষ্ট করতে দেয়।

উদাহরণস্বরূপ, ঠিকানার শুধুমাত্র জিপ কোড উল্লেখ করতে আপনি PostalAddress.postalCode ব্যবহার করেন:

https://geocode.googleapis.com/v4beta/geocode/address?address.postalCode=01062&key=API_KEY

একাধিক ঠিকানা উপাদান নির্দিষ্ট করতে, যেমন HTML ফর্মে ধারণ করা ঠিকানা উপাদানগুলির জন্য, একাধিক কোয়েরি প্যারামিটার ব্যবহার করুন:

https://geocode.googleapis.com/v4beta/geocode/address?address.addressLines=1600+Amphithreater+Pkwy&address.locality=Mountain+View&address.administrativeArea=CA&key=API_KEY

অনুরোধ করতে OAuth ব্যবহার করুন

জিওকোডিং API v4 প্রমাণীকরণের জন্য OAuth 2.0 সমর্থন করে। জিওকোডিং API-এর সাথে OAuth ব্যবহার করার জন্য, OAuth টোকেনটিকে সঠিক স্কোপ বরাদ্দ করতে হবে। জিওকোডিং API ফরোয়ার্ড জিওকোডিংয়ের সাথে ব্যবহারের জন্য নিম্নলিখিত স্কোপগুলিকে সমর্থন করে:

  • https://www.googleapis.com/auth/maps-platform.geocode — সকল জিওকোডিং API এন্ডপয়েন্টের সাথে ব্যবহার করুন।
  • https://www.googleapis.com/auth/maps-platform.geocode.address — ফরোয়ার্ড জিওকোডিংয়ের জন্য শুধুমাত্র GeocodeAddress সাথে ব্যবহার করুন।

এছাড়াও, আপনি সমস্ত জিওকোডিং এপিআই এন্ডপয়েন্টের জন্য সাধারণ https://www.googleapis.com/auth/cloud-platform স্কোপ ব্যবহার করতে পারেন। এই স্কোপটি ডেভেলপমেন্টের সময় কার্যকর, কিন্তু উৎপাদনের সময় নয়, কারণ এটি একটি সাধারণ স্কোপ যা সমস্ত এন্ডপয়েন্টে অ্যাক্সেসের অনুমতি দেয়।

আরও তথ্য এবং উদাহরণের জন্য, OAuth ব্যবহার দেখুন।

জিওকোড প্রতিক্রিয়া

জিওকোডিং একটি GeocodeAddressResponse অবজেক্ট প্রদান করে যাতে GeocodeResult অবজেক্টের results অ্যারে থাকে। প্রতিটি GeocodeResult অবজেক্ট একটি একক স্থানকে প্রতিনিধিত্ব করে।

সম্পূর্ণ JSON অবজেক্টটি এই আকারে রয়েছে:

{
  "results": [
    {
      "place": "//places.googleapis.com/places/ChIJF4Yf2Ry7j4AR__1AkytDyAE",
      "placeId": "ChIJF4Yf2Ry7j4AR__1AkytDyAE",
      "location": {
        "latitude": 37.422010799999995,
        "longitude": -122.08474779999999
      },
      "granularity": "ROOFTOP",
      "viewport": {
        "low": {
          "latitude": 37.420656719708511,
          "longitude": -122.08547523029148
        },
        "high": {
          "latitude": 37.4233546802915,
          "longitude": -122.0827772697085
        }
      },
      "formattedAddress": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "postalAddress": {
        "regionCode": "US",
        "languageCode": "en",
        "postalCode": "94043",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1600 Amphitheatre Pkwy"
        ]
      },
      "addressComponents": [
        {
          "longText": "1600",
          "shortText": "1600",
          "types": [
            "street_number"
          ]
        },
        {
          "longText": "Amphitheatre Parkway",
          "shortText": "Amphitheatre Pkwy",
          "types": [
            "route"
          ],
          "languageCode": "en"
        },
        ...
      ],
      "types": [
        "street_address"
      ],
      "plusCode": {
        "globalCode": "849VCWC8+R4",
        "compoundCode": "CWC8+R4 Mountain View, CA, USA"
      }
    }
  ]
}

প্রয়োজনীয় পরামিতি

  • address — যে রাস্তার ঠিকানা বা প্লাস কোডটি আপনি জিওকোড করতে চান। সংশ্লিষ্ট দেশের জাতীয় ডাক পরিষেবা দ্বারা ব্যবহৃত ফর্ম্যাট অনুসারে ঠিকানাগুলি নির্দিষ্ট করুন। ব্যবসার নাম এবং ইউনিট, স্যুট বা মেঝে নম্বরের মতো অতিরিক্ত ঠিকানা উপাদানগুলি এড়ানো উচিত। রাস্তার ঠিকানা উপাদানগুলিকে %20 এ URL-এনকোড করা স্পেস দ্বারা সীমাবদ্ধ করা উচিত। উদাহরণস্বরূপ, "24 সাসেক্স ড্রাইভ ওটাওয়া অন" ঠিকানাটি এইভাবে পাস করুন:
    24%20Sussex%20Drive%20Ottawa%20ON
    নীচে দেখানো প্লাস কোডগুলি ফর্ম্যাট করুন। প্লাস চিহ্নগুলি %2B তে URL-এনকোড করা হয়েছে এবং স্পেসগুলি %20 তে URL-এনকোড করা হয়েছে:
    • একটি গ্লোবাল কোড হল ৪ অক্ষরের এরিয়া কোড এবং ৬ অক্ষর বা তার বেশি লম্বা স্থানীয় কোড। উদাহরণস্বরূপ, "849VCWC8+R9" 849VCWC8%2BR9 হিসাবে এনকোড করুন।
    • একটি যৌগিক কোড হল ৬ অক্ষর বা তার বেশি লম্বা স্থানীয় কোড যার একটি স্পষ্ট অবস্থান থাকে। উদাহরণস্বরূপ, "CWC8+R9 Mountain View, CA, USA" CWC8%2BR9%20Mountain%20View%20CA%20USA হিসাবে এনকোড করুন।

ঐচ্ছিক পরামিতি

  • অবস্থান পক্ষপাত

    অনুসন্ধানের জন্য একটি এলাকাকে Viewport হিসেবে নির্দিষ্ট করে। এই অবস্থানটি একটি পক্ষপাত হিসেবে কাজ করে যার অর্থ নির্দিষ্ট অবস্থানের আশেপাশের ফলাফলগুলি ফেরত পাঠানো যেতে পারে, যার মধ্যে এলাকার কাছাকাছি কিন্তু বাইরের ফলাফলও অন্তর্ভুক্ত।

    অঞ্চলটিকে একটি আয়তক্ষেত্রাকার ভিউপোর্ট হিসেবে উল্লেখ করুন। একটি আয়তক্ষেত্র হল একটি অক্ষাংশ-দ্রাঘিমাংশ ভিউপোর্ট, যা দুটি তির্যক বিপরীত নিম্ন এবং উচ্চ বিন্দু হিসাবে প্রতিনিধিত্ব করে। নিম্ন বিন্দুটি আয়তক্ষেত্রের দক্ষিণ-পশ্চিম কোণ চিহ্নিত করে এবং উচ্চ বিন্দুটি আয়তক্ষেত্রের উত্তর-পূর্ব কোণকে প্রতিনিধিত্ব করে।

    একটি ভিউপোর্টকে একটি বদ্ধ অঞ্চল হিসেবে বিবেচনা করা হয়, যার অর্থ এটি তার সীমানা অন্তর্ভুক্ত করে। অক্ষাংশ সীমানা -৯০ থেকে ৯০ ডিগ্রির মধ্যে হতে হবে এবং দ্রাঘিমাংশ সীমানা -১৮০ থেকে ১৮০ ডিগ্রির মধ্যে হতে হবে:

    • যদি low = high হয়, তাহলে ভিউপোর্টটি সেই একক বিন্দু দিয়ে গঠিত।
    • যদি low.longitude > high.longitude হয়, তাহলে দ্রাঘিমাংশ পরিসর উল্টানো হয় (ভিউপোর্টটি 180 ডিগ্রি দ্রাঘিমাংশ রেখা অতিক্রম করে)।
    • যদি low.longitude = -180 degrees এবং high.longitude = 180 degrees হয়, তাহলে ভিউপোর্টে সমস্ত দ্রাঘিমাংশ অন্তর্ভুক্ত থাকবে।
    • যদি low.longitude = ১৮০ ডিগ্রি এবং high.longitude = -১৮০ ডিগ্রি হয়, তাহলে দ্রাঘিমাংশ পরিসর খালি থাকবে।
    • যদি low.latitude > high.latitude হয়, তাহলে অক্ষাংশ পরিসর খালি থাকবে।

    নিম্ন এবং উচ্চ উভয়ই পূরণ করতে হবে, এবং উপস্থাপিত বাক্সটি খালি রাখা যাবে না। খালি ভিউপোর্টের ফলে একটি ত্রুটি দেখা দেয়।

    উদাহরণস্বরূপ, এই কোয়েরি স্ট্রিংটি এমন একটি ভিউপোর্ট সংজ্ঞায়িত করে যা নিউ ইয়র্ক সিটিকে সম্পূর্ণরূপে ঘিরে রাখে:

    ?locationBias.rectangle.low.latitude=40.477398&locationBias.rectangle.low.longitude=-74.259087&locationBias.rectangle.high.latitude=40.91618&locationBias.rectangle.high.longitude=-73.70018
  • ভাষা কোড

    যে ভাষায় ফলাফল দেখাতে হবে।

    • সমর্থিত ভাষার তালিকা দেখুন। গুগল প্রায়শই সমর্থিত ভাষাগুলি আপডেট করে, তাই এই তালিকাটি সম্পূর্ণ নাও হতে পারে।
    • যদি languageCode সরবরাহ করা না থাকে, তাহলে API ডিফল্টভাবে en তে সেট করা হবে। যদি আপনি একটি অবৈধ ভাষা কোড উল্লেখ করেন, তাহলে API একটি INVALID_ARGUMENT ত্রুটি প্রদান করবে।
    • API এমন একটি রাস্তার ঠিকানা প্রদানের জন্য যথাসাধ্য চেষ্টা করে যা ব্যবহারকারী এবং স্থানীয় উভয়ের জন্যই পঠনযোগ্য। এই লক্ষ্য অর্জনের জন্য, এটি স্থানীয় ভাষায় রাস্তার ঠিকানাগুলি ফেরত দেয়, প্রয়োজনে ব্যবহারকারীর দ্বারা পঠনযোগ্য স্ক্রিপ্টে লিপ্যন্তরিত করে, পছন্দের ভাষা পর্যবেক্ষণ করে। অন্যান্য সমস্ত ঠিকানা পছন্দের ভাষায় ফেরত দেওয়া হয়। ঠিকানার উপাদানগুলি একই ভাষায় ফেরত দেওয়া হয়, যা প্রথম উপাদান থেকে নির্বাচিত হয়।
    • যদি পছন্দের ভাষায় কোনও নাম পাওয়া না যায়, তাহলে API সবচেয়ে কাছের মিল ব্যবহার করে।
    • API কোন ফলাফলগুলি ফেরত দিতে বেছে নেয় এবং কোন ক্রমে সেগুলি ফেরত দেওয়া হয় তার উপর পছন্দের ভাষার প্রভাব খুব কম থাকে। জিওকোডার ভাষার উপর নির্ভর করে সংক্ষিপ্ত রূপগুলিকে ভিন্নভাবে ব্যাখ্যা করে, যেমন রাস্তার ধরণের সংক্ষিপ্ত রূপ, অথবা প্রতিশব্দ যা এক ভাষায় বৈধ হতে পারে কিন্তু অন্য ভাষায় নয়।
  • অঞ্চল কোড

    অঞ্চল কোডটি দুই-অক্ষরের CLDR কোড মান। কোনও ডিফল্ট মান নেই। বেশিরভাগ CLDR কোড ISO 3166-1 কোডের অনুরূপ।

    কোনও ঠিকানা জিওকোডিং করার সময়, জিওডকোডিং ফরোয়ার্ড করার সময় , এই প্যারামিটারটি নির্দিষ্ট অঞ্চলে পরিষেবা থেকে ফলাফলকে প্রভাবিত করতে পারে, কিন্তু সম্পূর্ণরূপে সীমাবদ্ধ করতে পারে না। কোনও অবস্থান বা স্থানের জিওকোডিং করার সময়, জিওকোডিং বিপরীত করার সময় বা স্থান জিওকোডিং করার সময় , এই প্যারামিটারটি ঠিকানাটি ফর্ম্যাট করতে ব্যবহার করা যেতে পারে। সমস্ত ক্ষেত্রে, এই প্যারামিটার প্রযোজ্য আইনের উপর ভিত্তি করে ফলাফলকে প্রভাবিত করতে পারে।

অবস্থান পক্ষপাত

জিওকোডিং পরিষেবাকে একটি নির্দিষ্ট ভিউপোর্টের (একটি বাউন্ডিং বক্স হিসাবে প্রকাশ করা) মধ্যে ফলাফল পছন্দ করার নির্দেশ দিতে locationBias প্যারামিটার ব্যবহার করুন। locationBias প্যারামিটার এই বাউন্ডিং বক্সের দক্ষিণ-পশ্চিম এবং উত্তর-পূর্ব কোণগুলির অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক নির্ধারণ করে।

উদাহরণস্বরূপ, "ওয়াশিংটন" ঠিকানার জন্য একটি জিওকোড অনুরোধ ওয়াশিংটন, ডিসি এবং মার্কিন যুক্তরাষ্ট্রের ওয়াশিংটন রাজ্যের জন্য ফলাফল ফেরত দিতে পারে:

https://geocode.googleapis.com/v4beta/geocode/address/Washington?key=API_KEY

উত্তরটি এই আকারে:

{
  "results": [
    {
      "place": "//places.googleapis.com/places/ChIJW-T2Wt7Gt4kRKl2I1CJFUsI",
      "placeId": "ChIJW-T2Wt7Gt4kRKl2I1CJFUsI",
      "location": {
        "latitude": 38.9071923,
        "longitude": -77.0368707
      },
      "granularity": "APPROXIMATE",
      "viewport": {
        "low": {
          "latitude": 38.7916449,
          "longitude": -77.119759
        },
        "high": {
          "latitude": 38.9958641,
          "longitude": -76.909393
        }
      },
      "bounds": {
        "low": {
          "latitude": 38.7916449,
          "longitude": -77.119759
        },
        "high": {
          "latitude": 38.9958641,
          "longitude": -76.909393
        }
      },
      "formattedAddress": "Washington, DC, USA",
      "addressComponents": [
        {
          "longText": "Washington",
          "shortText": "Washington",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        ...
      ],
      "types": [
        "locality",
        "political"
      ]
    },
    {
      "place": "//places.googleapis.com/places/ChIJ-bDD5__lhVQRuvNfbGh4QpQ",
      "placeId": "ChIJ-bDD5__lhVQRuvNfbGh4QpQ",
      "location": {
        "latitude": 47.7510741,
        "longitude": -120.7401386
      },
      "granularity": "APPROXIMATE",
      "viewport": {
        "low": {
          "latitude": 45.543541,
          "longitude": -124.84897389999999
        },
        "high": {
          "latitude": 49.0024945,
          "longitude": -116.91607109999998
        }
      },
      "bounds": {
        "low": {
          "latitude": 45.543541,
          "longitude": -124.84897389999999
        },
        "high": {
          "latitude": 49.0024442,
          "longitude": -116.91607109999998
        }
      },
      "formattedAddress": "Washington, USA",
      "addressComponents": [
        {
          "longText": "Washington",
          "shortText": "WA",
          "types": [
            "administrative_area_level_1",
            "political"
          ],
          "languageCode": "en"
        },
      ...
      ],
      "types": [
        "administrative_area_level_1",
        "political"
      ]
    }
  ]
}

তবে, মার্কিন যুক্তরাষ্ট্রের উত্তর-পূর্ব অংশের চারপাশে একটি বাউন্ডিং বক্স সংজ্ঞায়িত করে একটি locationBias প্যারামিটার যোগ করার ফলে এই জিওকোডটি কেবল ওয়াশিংটন, ডিসি শহরকে ফিরিয়ে দেয়:

https://geocode.googleapis.com/v4beta/geocode/address/Washington?locationBias.rectangle.low.latitude=36.47&locationBias.rectangle.low.longitude=-84.72&locationBias.rectangle.high.latitude=43.39&locationBias.rectangle.high.longitude=-65.90&key=API_KEY

অঞ্চল পক্ষপাত

একটি জিওকোডিং অনুরোধে, আপনি regionCode প্যারামিটার ব্যবহার করে জিওকোডিং পরিষেবাকে একটি নির্দিষ্ট অঞ্চলে পক্ষপাতদুষ্ট ফলাফল ফেরত দেওয়ার নির্দেশ দিতে পারেন। এই প্যারামিটারটি অঞ্চল পক্ষপাত নির্দিষ্ট করে একটি দুই-অক্ষরের CLDR কোড মান নেয়। বেশিরভাগ CLDR কোড ISO 3166-1 কোডের অনুরূপ।

regionCode এর জন্য কোন ডিফল্ট মান নেই। উদাহরণস্বরূপ, "Toledo" এর জন্য একটি জিওকোড মার্কিন যুক্তরাষ্ট্র এবং স্পেনের জন্য ফলাফল প্রদান করে:

https://geocode.googleapis.com/v4beta/geocode/address/Toledo?key=API_KEY

প্রতিক্রিয়া:

{
  "results": [
    {
      "place": "//places.googleapis.com/places/ChIJeU4e_C2HO4gRRcM6RZ_IPHw",
      "placeId": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw",
      "location": {
        "latitude": 41.652805199999996,
        "longitude": -83.5378674
      },
      "granularity": "APPROXIMATE",
      "viewport": {
        "low": {
          "latitude": 41.579513,
          "longitude": -83.6944089
        },
        "high": {
          "latitude": 41.733036,
          "longitude": -83.4493851
        }
      },
      "bounds": {
        "low": {
          "latitude": 41.579513,
          "longitude": -83.6944089
        },
        "high": {
          "latitude": 41.733036,
          "longitude": -83.4493851
        }
      },
      "formattedAddress": "Toledo, OH, USA",
      "addressComponents": [
        {
          "longText": "Toledo",
          "shortText": "Toledo",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        ...
      ],
      "types": [
        "locality",
        "political"
      ]
    },
    {
      "place": "//places.googleapis.com/places/ChIJkwyrlqwLag0RiQIn2fdIshM",
      "placeId": "ChIJkwyrlqwLag0RiQIn2fdIshM",
      "location": {
        "latitude": 39.8628296,
        "longitude": -4.0273067
      },
      "granularity": "APPROXIMATE",
      "viewport": {
        "low": {
          "latitude": 39.8116682,
          "longitude": -4.179933
        },
        "high": {
          "latitude": 39.9251319,
          "longitude": -3.8148935
        }
      },
      "bounds": {
        "low": {
          "latitude": 39.8116682,
          "longitude": -4.179933
        },
        "high": {
          "latitude": 39.9251319,
          "longitude": -3.8148935
        }
      },
      "formattedAddress": "Toledo, España",
      "addressComponents": [
        {
          "longText": "Toledo",
          "shortText": "Toledo",
          "types": [
            "administrative_area_level_4",
            "political"
          ],
          "languageCode": "es"
        },
        ...
      ],
      "types": [
        "administrative_area_level_4",
        "political"
      ]
    },
    ...
  ]
}

"টলেডো" এর জন্য একটি জিওকোডিং অনুরোধ regionCode=es (স্পেন) সহ, শুধুমাত্র স্পেন থেকে ফলাফল প্রদান করে:

https://geocode.googleapis.com/v4beta/geocode/address/Toledo?regionCode=es&key=API_KEY