হিটম্যাপ

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

এই পৃষ্ঠায় হিটম্যাপ ইউটিলিটি সম্পর্কে বর্ণনা করা হয়েছে যা iOS-এর জন্য Maps SDK-এর ইউটিলিটি লাইব্রেরিতে উপলভ্য। ম্যাপে ডেটা পয়েন্টের ডিস্ট্রিবিউশন ও ঘনত্ব দেখানোর জন্য হিটম্যাপ উপযোগী।

এই ভিডিওতে মার্কারের বিকল্প হিসেবে হিটম্যাপের ব্যবহার নিয়ে আলোচনা করা হয়েছে, যখন আপনার ডেটার জন্য ম্যাপে অনেক ডেটা পয়েন্টের প্রয়োজন হয়।

হিটম্যাপের সাহায্যে দর্শকরা ম্যাপে ডেটা পয়েন্টের ডিস্ট্রিবিউশন ও আপেক্ষিক ঘনত্ব সহজেই বুঝতে পারেন। প্রতিটি লোকেশনে মার্কার দেখানোর পরিবর্তে, হিটম্যাপ ডেটার ডিস্ট্রিবিউশন দেখানোর জন্য রঙ ব্যবহার করে।

নিচের উদাহরণে, লাল রঙ দিয়ে অস্ট্রেলিয়ার ভিক্টোরিয়াতে পুলিশ স্টেশনের ঘনত্ব বেশি এমন এলাকা দেখানো হয়েছে।

পুলিশ স্টেশনের লোকেশন দেখানো হিটম্যাপ সহ একটি ম্যাপ
ম্যাপে হিটম্যাপ

আপনি এখনও লাইব্রেরি সেট-আপ না করে থাকলে, এই পৃষ্ঠার বাকি অংশ পড়ার আগে সেট-আপ গাইড অনুসরণ করুন।

একটি সাধারণ হিটম্যাপ যোগ করা হচ্ছে

আপনার ম্যাপে হিটম্যাপ যোগ করতে, আপনার আগ্রহের প্রতিটি লোকেশনের কোঅর্ডিনেট সহ একটি ডেটাসেট প্রয়োজন হবে। প্রথমে, একটি GMUHeatmapTileLayer ইনস্ট্যান্স তৈরি করুন, map প্রপার্টিকে GMSMapView-এ সেট করুন। আপনার অ্যাপের viewDidLoad() ফাংশনে এটি করুন, যাতে হিটম্যাপ নিয়ে কাজ করার আগে বেস ম্যাপ লোড করা হয়েছে কিনা তা নিশ্চিত করা যায়। তারপর GMUHeatmapTileLayer ইনস্ট্যান্সে GMUWeightedLatLng অবজেক্টের একটি কালেকশন পাস করুন।

ইউটিলিটি GMUHeatmapTileLayer ক্লাস সরবরাহ করে, যা GMUWeightedLatLng অবজেক্টের সংগ্রহ গ্রহণ করে। এটি ব্যাসার্ধ, গ্রেডিয়েন্ট এবং অস্বচ্ছতা সংক্রান্ত বিকল্পের উপর ভিত্তি করে বিভিন্ন জুম লেভেলের জন্য টাইল ইমেজ তৈরি করে।

ধাপগুলি আরও বিশদে দেখা যাক:

  1. GMUHeatmapTileLayer ইনস্ট্যান্স তৈরি করুন, map প্রপার্টি GMSMapView-এ সেট করুন (আপনার অ্যাপের viewDidLoad() ফাংশনে এটি করুন)।
  2. GMUHeatmapTileLayer ইনস্ট্যান্সে GMUWeightedLatLng অবজেক্টের একটি কালেকশন পাস করুন।
  3. ম্যাপ ভিউ পাস করে GMUHeatmapTileLayer.map-এ কল করুন।

    Swift

    class Heatmap: UIViewController {
    
      private var mapView: GMSMapView!
      private var heatmapLayer: GMUHeatmapTileLayer!
    
      override func viewDidLoad() {
        super.viewDidLoad()
        heatmapLayer = GMUHeatmapTileLayer()
        heatmapLayer.map = mapView
      }
    
      // ...
    
      func addHeatmap() {
    
        // Get the data: latitude/longitude positions of police stations.
        guard let path = Bundle.main.url(forResource: "police_stations", withExtension: "json") else {
          return
        }
        guard let data = try? Data(contentsOf: path) else {
          return
        }
        guard let json = try? JSONSerialization.jsonObject(with: data, options: []) else {
          return
        }
        guard let object = json as? [[String: Any]] else {
          print("Could not read the JSON.")
          return
        }
    
        var list = [GMUWeightedLatLng]()
        for item in object {
          let lat = item["lat"] as! CLLocationDegrees
          let lng = item["lng"] as! CLLocationDegrees
          let coords = GMUWeightedLatLng(
            coordinate: CLLocationCoordinate2DMake(lat, lng),
            intensity: 1.0
          )
          list.append(coords)
        }
    
        // Add the latlngs to the heatmap layer.
        heatmapLayer.weightedData = list
      }
    }
          

    Objective-C

    @implementation Heatmap {
      GMSMapView *_mapView;
      GMUHeatmapTileLayer *_heatmapLayer;
    }
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      _heatmapLayer = [[GMUHeatmapTileLayer alloc] init];
      _heatmapLayer.map = _mapView;
    }
    
    // ...
    
    - (void) addHeatmap {
    
      // Get the data: latitude/longitude positions of police stations.
      NSURL *path = [NSBundle.mainBundle URLForResource:@"police_stations" withExtension:@"json"];
      NSData *data = [NSData dataWithContentsOfURL:path];
      NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    
      NSMutableArray<GMUWeightedLatLng *> *list = [[NSMutableArray alloc] init];
      [json enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSDictionary *item = (NSDictionary *)obj;
        CLLocationDegrees lat = [(NSNumber *) [item valueForKey:@"lat"] doubleValue];
        CLLocationDegrees lng = [(NSNumber *) [item valueForKey:@"lng"] doubleValue];
        GMUWeightedLatLng *coords = [[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(lat, lng)
                                                                        intensity:1.0];
        [list addObject:coords];
      }];
    
    
      // Add the latlngs to the heatmap layer.
      _heatmapLayer.weightedData = list;
    }
    @end
          

এই উদাহরণের জন্য, ডেটা JSON ফাইল, police_stations.json-এ স্টোর করা হয়। ফাইল থেকে এক্সট্র্যাক্ট করা অংশ এখানে দেওয়া হল:

[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]

হিটম্যাপ কাস্টমাইজ করা হচ্ছে

হিটম্যাপে কাস্টমাইজ করা যায় এমন একাধিক প্রপার্টি আছে। আপনি প্রাথমিকভাবে GMUHeatmapTileLayer ইনস্ট্যান্স তৈরি করার সময় অথবা বিকল্পের জন্য নতুন ভ্যালু সেট করে যেকোনও সময় বিকল্প সেট করতে পারবেন।

এইসব বিকল্প উপলভ্য:

  1. ব্যাসার্ধ: হিটম্যাপে প্রয়োগ করা গাউসিয়ান ব্লারের সাইজ, পিক্সেলে প্রকাশ করা হয়। ডিফল্ট হল ২০টি। ১০ থেকে ৫০-এর মধ্যে হতে হবে। ব্যাসার্ধ সেট করতে GMUHeatmapTileLayer.radius ব্যবহার করুন।

  2. গ্রেডিয়েন্ট: হিটম্যাপের কালার ম্যাপ তৈরি করতে বিভিন্ন কালার ব্যবহার করা হয়, যা সর্বনিম্ন থেকে সর্বোচ্চ তীব্রতা পর্যন্ত বিস্তৃত। GMUGradient তৈরি করা হয় রঙ সহ একটি ইন্টিজার অ্যারে এবং প্রতিটি রঙের শুরুর পয়েন্ট নির্দেশ করে এমন একটি ফ্লোট অ্যারে ব্যবহার করে, যা সর্বাধিক ইনটেনসিটির শতাংশ হিসেবে দেওয়া হয় এবং ০ থেকে ১ পর্যন্ত ভগ্নাংশ হিসেবে প্রকাশ করা হয়। এক রঙের গ্রেডিয়েন্টের জন্য আপনাকে শুধু একটি রঙ নির্দিষ্ট করতে হবে অথবা মাল্টি-কালার গ্রেডিয়েন্টের জন্য কমপক্ষে দুটি রঙ নির্দিষ্ট করতে হবে। এইসব রঙের মধ্যে ইন্টারপোলেশন ব্যবহার করে কালার ম্যাপ তৈরি করা হয়। ডিফল্ট গ্রেডিয়েন্টে দুটি রঙ আছে। colorMapSize প্যারামিটার গ্রেডিয়েন্টের ধাপের সংখ্যা নির্ধারণ করে। সংখ্যা যত বড় হবে, গ্রেডিয়েন্ট তত মসৃণ হবে, আর সংখ্যা যত ছোট হবে, কন্ট্যুর গ্রাফের মতো ট্রানজিশন তত শার্প হবে। গ্রেডিয়েন্ট সেট করতে GMUHeatmapTileLayer.gradient ব্যবহার করুন।

  3. অপাসিটি: এটি হল সম্পূর্ণ হিটম্যাপ লেয়ারের অপাসিটি এবং এর রেঞ্জ ০ থেকে ১ পর্যন্ত। ডিফল্ট হল ০.৭। GMUHeatmapTileLayer.opacity ব্যবহার করে অস্বচ্ছতার ভ্যালু সেট করুন।

যেমন, একটি Gradient তৈরি করুন:

Swift

let gradientColors: [UIColor] = [.green, .red]
let gradientStartPoints: [NSNumber] = [0.2, 1.0]
heatmapLayer.gradient = GMUGradient(
  colors: gradientColors,
  startPoints: gradientStartPoints,
  colorMapSize: 256
)
      

Objective-C

NSArray<UIColor *> *gradientColors = @[UIColor.greenColor, UIColor.redColor];
NSArray<NSNumber *> *gradientStartPoints = @[@0.2, @1.0];
_heatmapLayer.gradient = [[GMUGradient alloc] initWithColors:gradientColors
                                                 startPoints:gradientStartPoints
                                                colorMapSize:256];
      

আগে থেকে থাকা হিটম্যাপের অস্বচ্ছতা পরিবর্তন করতে:

Swift

heatmapLayer.opacity = 0.7
      

Objective-C

_heatmapLayer.opacity = 0.7;
      

আগে থেকে থাকা বিকল্প আপডেট করুন

আগে থেকেই সেট করা আছে এমন কোনও বিকল্প আপডেট করতে, এইসব ধাপ অনুসরণ করুন:

  1. বিকল্পটি আপডেট করে পছন্দসই মান সেট করুন।
  2. GMUHeatmapTileLayer.clearTileCache()-এ কল করুন।

ডেটাসেট পরিবর্তন করা

হিটম্যাপ যে ডেটাসেটের উপর ভিত্তি করে তৈরি করা হয়েছে তা পরিবর্তন করতে:

  1. আপনার ডেটা সংগ্রহ আপডেট করুন। GMUHeatmapTileLayer.weightedData ব্যবহার করুন, GMUWeightedLatLng-এর অ্যারে পাস করা হচ্ছে।
  2. GMUHeatmapTileLayer.clearTileCache()-এ কল করুন।

হিটম্যাপ সরানো

হিটম্যাপ সরাতে, nil পাস করে GMUHeatmapTileLayer.map কল করুন।

Swift

heatmapLayer.map = nil
      

Objective-C

_heatmapLayer.map = nil;
      

ডেমো অ্যাপ দেখুন

হিটম্যাপ প্রয়োগের আরেকটি উদাহরণের জন্য, ইউটিলিটি লাইব্রেরির সাথে শিপ করা ডেমো অ্যাপে HeatmapViewController দেখুন। সেট-আপ গাইড থেকে আপনি জানতে পারবেন কীভাবে ডেমো অ্যাপ রান করতে হয়।