টালি স্তর

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস জাভাস্ক্রিপ্ট

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

ভূমিকা

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

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

টাইল স্থানাঙ্ক

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

গুগলের মারকেটর প্রজেকশনের বাস্তবায়নে, (0,0) স্থানাঙ্কের টাইলটি সর্বদা মানচিত্রের উত্তর-পশ্চিম কোণে থাকে, যেখানে x মান পশ্চিম থেকে পূর্বে এবং y মান উত্তর থেকে দক্ষিণে বৃদ্ধি পায়। টাইলগুলোকে সেই মূলবিন্দু থেকে x,y স্থানাঙ্ক ব্যবহার করে সূচিত করা হয়। উদাহরণস্বরূপ, জুম লেভেল ২-এ, যখন পৃথিবীকে ১৬টি টাইলে বিভক্ত করা হয়, তখন প্রতিটি টাইলকে একটি অনন্য x,y জোড়া দ্বারা উল্লেখ করা যেতে পারে:

বিশ্বের মানচিত্রটি টাইলসের চারটি সারি এবং চারটি কলামে বিভক্ত।

প্রতিটি ম্যাপ টাইল হলো একটি ২৫৬x২৫৬ পয়েন্টের বর্গক্ষেত্র। জুম লেভেল ০-তে, পুরো বিশ্বকে একটিমাত্র টাইলে রেন্ডার করা হয়। প্রতিটি জুম লেভেল বিবর্ধনকে দ্বিগুণ করে বাড়ায়। সুতরাং, উদাহরণস্বরূপ, জুম লেভেল ১-এ ম্যাপটি টাইলের একটি ২x২ গ্রিড হিসাবে, জুম লেভেল ২-এ একটি ৪x৪ গ্রিড হিসাবে, এবং জুম লেভেল ৩-এ একটি ৮x৮ গ্রিড হিসাবে রেন্ডার করা হয়। একটি টাইল লেয়ারের জন্য ইমেজ তৈরি করতে, আপনি যে প্রতিটি জুম লেভেল সমর্থন করতে চান, সেই অনুযায়ী প্রতিটি টাইলের জন্য একটি করে ২৫৬x২৫৬ পয়েন্টের ইমেজ তৈরি করুন।

একটি টাইল স্তর যোগ করুন

  1. একটি GMSURLTileLayer অবজেক্ট, অথবা GMSTileLayer বা GMSSyncTileLayer এর একটি কাস্টম সাবক্লাস ইনস্ট্যানশিয়েট করুন।
  2. অন্যান্য টাইল লেয়ারের সাপেক্ষে এর অবস্থান সমন্বয় করতে ঐচ্ছিকভাবে zIndex প্রপার্টিটি পরিবর্তন করুন।
  3. GMSTileLayer অবজেক্টটির map প্রপার্টি সেট করে সেটিকে ম্যাপে অ্যাসাইন করুন।

iOS-এর জন্য Maps SDK তিনটি ক্লাস প্রদান করে যা একটি টাইল লেয়ার বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে। প্রতিটি ক্লাসের সাথে, আপনাকে {x,y,zoom} স্থানাঙ্কের একটি প্রদত্ত সেটের জন্য সঠিক ম্যাপ টাইলটি কীভাবে আনতে হবে তা সংজ্ঞায়িত করতে হবে। উপলব্ধ বিকল্পগুলি হলো:

  • GMSSyncTileLayer সাবক্লাস, যা tileForX:y:zoom এর ইমপ্লিমেন্টেশন প্রদান করে এবং UIImage ইনস্ট্যান্স রিটার্ন করে।
  • GMSTileLayer একটি সাবক্লাস, requestTileForX:y:zoom অ্যাসিঙ্ক্রোনাস মেথডটির ইমপ্লিমেন্টেশন প্রদান করে এবং যা পরবর্তীতে একটি টাইল ইমেজ সহ কলব্যাক করে।
  • URL থেকে স্বয়ংক্রিয়ভাবে টাইলস আনার জন্য, GMSTileURLConstructor ব্লকটি প্রদান করে বিদ্যমান ক্লাস GMSURLTileLayer ব্যবহার করুন। GMSURLTileLayer একটি কনক্রিট ক্লাস, যা সাবক্লাস করা যায় না।

GMSSyncTileLayer বা GMSTileLayer সাবক্লাস করার ক্ষেত্রে, একটি nil টাইল ফলাফল প্রদান করলে তা Maps SDK for iOS-কে জানিয়ে দেয় যে ডেটা অনুপলব্ধ, কিন্তু ভবিষ্যতে তা উপলব্ধ হতে পারে। বিকল্পভাবে, এই অবস্থানে কোনো টাইল নেই তা বোঝাতে kGMSTileLayerNoTile রিটার্ন করুন।

GMSURLTileLayer এর ক্ষেত্রে, GMSTileURLConstructor থেকে nil রিটার্ন করলে তা নির্দেশ করবে যে এই অবস্থানে কোনো টাইল নেই।

URL থেকে টাইলস আনতে GMSURLTileLayer ব্যবহার করুন

GMSURLTileLayer জন্য সাবক্লাসিংয়ের প্রয়োজন হয় না, তবে আপনাকে GMSTileURLConstructor ব্লকটি ইমপ্লিমেন্ট করতে হবে। নিচের কোডটিতে দেখানো হয়েছে কীভাবে একটি বহুতল ভবনের ফ্লোর প্ল্যান প্রদর্শন করতে GMSURLTileLayer ব্যবহার করতে হয়।

সুইফট

let floor = 1

// Implement GMSTileURLConstructor
// Returns a Tile based on the x,y,zoom coordinates, and the requested floor
let urls: GMSTileURLConstructor = { (x, y, zoom) in
  let url = "https://www.example.com/floorplans/L\(floor)_\(zoom)_\(x)_\(y).png"
  return URL(string: url)
}

// Create the GMSTileLayer
let layer = GMSURLTileLayer(urlConstructor: urls)

// Display on the map at a specific zIndex
layer.zIndex = 100
layer.map = mapView
      

উদ্দেশ্য-সি

NSInteger floor = 1;

// Create the GMSTileLayer
GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:^NSURL * _Nullable(NSUInteger x, NSUInteger y, NSUInteger zoom) {
  NSString *url = [NSString stringWithFormat:@"https://www.example.com/floorplans/L%ld_%lu_%lu_%lu.png",
                   (long)floor, (unsigned long)zoom, (unsigned long)x, (unsigned long)y];
  return [NSURL URLWithString:url];
}];

// Display on the map at a specific zIndex
layer.zIndex = 100;
layer.map = mapView;
      

টাইলসকে UIImage হিসেবে পরিবেশন করার জন্য GMSSyncTileLayer-কে সাবক্লাস করুন।

GMSSyncTileLayer এবং GMSTileLayer হলো সাবক্লাস করার জন্য ডিজাইন করা অ্যাবস্ট্রাক্ট ক্লাস। আপনি এই ক্লাসগুলো ব্যবহার করে UIImage হিসেবে টাইলস পরিবেশন করতে পারেন। নিচের উদাহরণটিতে দেখানো হয়েছে কিভাবে GMSSyncTileLayer সাবক্লাস করে ম্যাপের কিছু টাইলের উপর একটি কাস্টম ইমেজ রেন্ডার করতে হয়।

সুইফট

class TestTileLayer: GMSSyncTileLayer {
  override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? {
    // On every odd tile, render an image.
    if (x % 2 == 1) {
      return UIImage(named: "australia")
    } else {
      return kGMSTileLayerNoTile
    }
  }
}

      

উদ্দেশ্য-সি

@interface TestTileLayer : GMSSyncTileLayer
@end

@implementation TestTileLayer

- (UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom {
  // On every odd tile, render an image.
  if (x % 2 == 1) {
    return [UIImage imageNamed:@"australia"];
  } else {
    return kGMSTileLayerNoTile;
  }
}

@end
      

আপনার ম্যাপে লেয়ারটি যোগ করতে, অবজেক্টটি ইনস্ট্যানশিয়েট করুন এবং এর ম্যাপ প্রপার্টি সেট করুন।

সুইফট

let layer = TestTileLayer()
layer.map = mapView
      

উদ্দেশ্য-সি

GMSTileLayer *layer = [[TestTileLayer alloc] init];
layer.map = mapView;
      

রেটিনা ডিভাইসের জন্য উচ্চ ডিপিআই টাইলস

tileSize 512-তে সেট করে আপনি GMSSyncTileLayer বা GMSURLTileLayer উভয়ের সাথেই উচ্চ DPI-এর ছবি ব্যবহার করতে পারেন। tileSize প্রপার্টিটি নির্দেশ করে যে, ফেরত আসা টাইল ছবিগুলো কত পিক্সেল আকারে প্রদর্শিত হতে পছন্দ করবে; এর ডিফল্ট মান হলো 256 — যা একটি নন-রেটিনা ডিভাইসে গুগল ম্যাপস টাইলের মাপ।

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

বাসি টাইলস পরিষ্কার করুন

যদি লেয়ারের টাইলগুলো 'স্টেল' (stale) হয়ে যায়, তাহলে লেয়ারটিকে জোরপূর্বক রিফ্রেশ করার জন্য clearTileCache মেথডটি কল করা উচিত। এর ফলে এই লেয়ারের সমস্ত টাইল পুনরায় লোড হবে।

সুইফট

layer.clearTileCache()
      

উদ্দেশ্য-সি

[layer clearTileCache];