টাইল লেয়ার

প্ল্যাটফর্ম বেছে নিন: Android iOS JavaScript

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

ভূমিকা

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

ম্যাপে সাধারণত বড় ভৌগোলিক এলাকা কভার করে এমন বিস্তারিত ছবি যোগ করতে চাইলে, টাইল লেয়ার উপযোগী হয়। অন্যদিকে, ম্যাপের কোনও একটি পয়েন্টে একটি ছবি ফিক্স করতে চাইলে, গ্রাউন্ড ওভারলে উপযোগী।

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

Maps API প্রতিটি জুম লেভেলে ছবিকে বর্গাকার ম্যাপ টাইলসের সেটে ভাগ করে, যা একটি অর্ডার করা গ্রিডে সাজানো থাকে। কোনও ম্যাপ নতুন লোকেশনে বা নতুন জুম লেভেলে স্ক্রল করা হলে, Maps API নির্ধারণ করে যে কোন টাইলগুলি প্রয়োজন এবং সেগুলি পাওয়ার জন্য টাইলগুলির একটি সেটে অনুবাদ করে।

মার্কেটর প্রজেকশনের Google ইমপ্লিমেন্টেশনে, (০,০) কোঅর্ডিনেট সহ টাইলটি সবসময় ম্যাপের উত্তর-পশ্চিম কোণে থাকে, যেখানে 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 ইমপ্লিমেন্টেশন প্রদান করে যা পরে টাইল ইমেজ সহ কলব্যাক করে।
  • GMSTileURLConstructor ব্লক প্রদান করে, URL থেকে অটোমেটিক টাইল ফেচ করতে, আগে থেকে থাকা ক্লাস, GMSURLTileLayer ব্যবহার করুন। GMSURLTileLayer হল একটি কংক্রিট ক্লাস যার সাবক্লাস করা যাবে না।

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

GMSURLTileLayer-এর জন্য, GMSTileURLConstructor থেকে nil রিটার্ন করলে বোঝা যাবে যে এই লোকেশনে কোনও টাইল নেই।

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

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

Swift

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
      

Objective-C

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-এর সাবক্লাস তৈরি করে ম্যাপের কিছু টাইলসের উপর কীভাবে কাস্টম ছবি রেন্ডার করতে হয়।

Swift

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
    }
  }
}

      

Objective-C

@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
      

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

Swift

let layer = TestTileLayer()
layer.map = mapView
      

Objective-C

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

Retina ডিভাইসের জন্য হাই DPI টাইল

আপনি GMSSyncTileLayer অথবা GMSURLTileLayer-এর সাথে হাই DPI ছবি ব্যবহার করতে পারবেন, এর জন্য tileSize-কে ৫১২-এ সেট করতে হবে। tileSize প্রপার্টি থেকে জানা যায় যে রিটার্ন করা টাইল ইমেজ কত পিক্সেল হিসেবে দেখানো হবে; এটি ডিফল্ট হিসেবে ২৫৬ পিক্সেল থাকে — নন-রেটিনা ডিভাইসে Google Maps টাইলের ডাইমেনশন।

আপনি যদি হাই DPI ডিভাইসে সাধারণ DPI টাইল দেখান, তাহলে tileSize-কে ৫১২-এ সেট করে ছবির সাইজ বাড়াতে পারবেন। মনে রাখবেন, ছবির সাইজ বড় করলে ছবির কোয়ালিটি খারাপ হতে পারে, বিশেষ করে সূক্ষ্ম লাইন বা টেক্সটের ক্ষেত্রে। সেরা ফলাফলের জন্য, ডিসপ্লের সাথে tileSize এবং ছবির ডিপিআই ম্যাচ করুন। Retina ডিভাইসে দেখানো ম্যাপ সবচেয়ে ভালো দেখাবে যখন ৫১২-এর tileSize সহ হাই DPI ছবি দেখানো হবে; যদিও Retina নয় এমন ডিভাইসে দেখানো ম্যাপ সাধারণ ছবি এবং ২৫৬-এর ডিফল্ট tileSize সহ ভালো দেখাবে।

পুরনো টাইল মুছুন

লেয়ারের মাধ্যমে প্রদান করা টাইল 'পুরনো' হয়ে গেলে, রিফ্রেশ করার জন্য লেয়ারে clearTileCache পদ্ধতি কল করতে হবে। এর ফলে এই লেয়ারের সব টাইল আবার লোড হবে।

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];