2D টাইলস ওভারভিউ

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

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

  • গুগলের কার্টোগ্রাফিক স্টাইলিং সহ ভেক্টর টপোগ্রাফিক ডেটার উপর ভিত্তি করে রোডম্যাপ ইমেজ টাইলস।

  • স্যাটেলাইট এবং আকাশযান উভয় ক্যামেরার মাধ্যমে অর্থোফটোগ্রাফি ধারণ করা হয়, যা পৃথিবীর উপর থেকে নিচের (নাদির) চিত্র সরবরাহ করে।

  • হিলশেড কন্টুর মানচিত্র।

২ডি ম্যাপ টাইলগুলো সবই জিওরেফারেন্সড এবং একে অপরের সাথে সারিবদ্ধ। ভিউপোর্টের ভৌগোলিক বিস্তৃতি এবং জুম লেভেলের উপর ভিত্তি করে এগুলো নির্বাচন করা হয়। জুম লেভেলের পরিসর শূন্য (পুরো বিশ্বকে দেখার জন্য) থেকে ২২ (রাস্তা ও ব্লক দেখার জন্য) পর্যন্ত।

মানচিত্রের থিম

আপনি নিম্নলিখিত মানচিত্র থিমগুলির জন্য মানচিত্র টাইলস পেতে পারেন।

মানচিত্র থিম বর্ণনা
রোডম্যাপ রাস্তা, ভবন, দর্শনীয় স্থান এবং রাজনৈতিক সীমানা
স্যাটেলাইট মহাকাশ থেকে তোলা আলোকচিত্র
ভূখণ্ড একটি সমোচ্চ রেখাচিত্র যা গাছপালার মতো প্রাকৃতিক বৈশিষ্ট্য দেখায়

ম্যাপ টাইলস এপিআই (Map Tiles API) থেকে ম্যাপ টাইলস অনুরোধ করতে, আপনাকে প্রথমে একটি সেশন টোকেনের জন্য অনুরোধ করতে হবে। সেশন টোকেনটি আপনার ম্যাপ এবং ভিউপোর্টের বর্তমান অবস্থা ট্র্যাক করে। আপনার সেশন টোকেন সেট আপ করার সময়, আপনাকে অবশ্যই mapType ভ্যালুটি আপনার পছন্দের ম্যাপ থিমের সাথে মিলিয়ে সেট করতে হবে। এরপর, ম্যাপ টাইলস এপিআই-তে করা আপনার প্রতিটি অনুরোধে সেশন টোকেনটি অন্তর্ভুক্ত করতে হবে।

ভিউপোর্ট তথ্যের অনুরোধ

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

উদাহরণস্বরূপ, বেশিরভাগ শহরের ২২ জুম লেভেলের ছবি থাকলেও সমুদ্রের ছবি পাওয়া যায় না, কারণ তাতে কেবল বৈশিষ্ট্যহীন নীল বর্গক্ষেত্রই দেখা যাবে।

ভিউপোর্ট অনুরোধটি নিম্নলিখিত ফর্ম্যাটের একটি HTTPS GET অনুরোধ।

curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN&key=YOUR_API_KEY&zoom=zoom&north=north&south=south&east=east&west=west"

অনুরোধটিতে নিম্নলিখিত ক্ষেত্রগুলি রয়েছে:

zoom
ভিউপোর্টের জুম স্তর।
north , south , east , west
ভিউপোর্টের সবচেয়ে উত্তর, দক্ষিণ, পূর্ব এবং পশ্চিম বিন্দু, যা ডিগ্রিতে প্রকাশ করা হয়। উত্তর এবং দক্ষিণ অবশ্যই (-90,90) সীমার মধ্যে থাকতে হবে, পূর্ব এবং পশ্চিম অবশ্যই (-180, 180) সীমার মধ্যে থাকতে হবে। অ্যান্টিমেরিডিয়ান অতিক্রমকারী সীমানা প্রকাশ করার জন্য, পশ্চিম ধনাত্মক (উদাহরণস্বরূপ, 170) এবং পূর্ব ঋণাত্মক (উদাহরণস্বরূপ, -170) হতে পারে। সমস্ত প্যারামিটার আবশ্যক।

ভিউপোর্ট তথ্যের প্রতিক্রিয়া

ভিউপোর্ট রেসপন্স আপনাকে জানায় কোন কোন এলাকায় ছবি রয়েছে এবং কোন কোন জুম লেভেলে। একটি ভিউপোর্ট ইনফরমেশন রেসপন্সের গঠন নিম্নরূপ।

{
  "copyright": "Map data ©2023",
  "maxZoomRects": [
    {
      "maxZoom": 19,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 9,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 14,
      "north": 84.375,
      "south": -84.375,
      "east": 180,
      "west": -180
    }, ...
  ]
}

রেসপন্স বডিতে নিম্নলিখিত ফিল্ডগুলো থাকে।

copyright
এতে একটি অ্যাট্রিবিউশন স্ট্রিং রয়েছে যা রোডম্যাপ এবং স্যাটেলাইট টাইলস প্রদর্শন করার সময় আপনাকে অবশ্যই আপনার ম্যাপে দেখাতে হবে। আরও তথ্যের জন্য, ম্যাপ টাইলস এপিআই পলিসি দেখুন।
maxZoomRect
এতে বাউন্ডিং আয়তক্ষেত্রগুলির একটি অ্যারে থাকে যা বর্তমান ভিউপোর্টের সাথে ওভারল্যাপ করে। এছাড়াও প্রতিটি আয়তক্ষেত্রের মধ্যে উপলব্ধ সর্বোচ্চ জুম স্তরও এতে থাকে।

টাইল স্থানাঙ্ক ফাংশন

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

var TILE_SIZE = 256;

function fromLatLngToPoint(latLng) {
  var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
  return {
    x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
    y: TILE_SIZE / 2 * (1 +  mercator / Math.PI)
  };
}

function fromLatLngToTileCoord(latLng, zoom) {
  var point = fromLatLngToPoint(latLng);
  var scale = Math.pow(2, zoom);

  return {
    x: Math.floor(point.x * scale / TILE_SIZE),
    y: Math.floor(point.y * scale / TILE_SIZE),
    z: zoom
  };
}