हीटमैप

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

इस पेज पर, iOS के लिए Maps SDK टूल की यूटिलिटी लाइब्रेरी में उपलब्ध हीटमैप यूटिलिटी के बारे में बताया गया है. हीटमैप, मैप पर डेटा पॉइंट के डिस्ट्रिब्यूशन और घनत्व को दिखाने के लिए काम के होते हैं.

इस वीडियो में, मार्कर के विकल्प के तौर पर हीटमैप का इस्तेमाल करने के बारे में बताया गया है. ऐसा तब किया जाता है, जब आपके डेटा के लिए मैप पर ज़्यादा डेटा पॉइंट की ज़रूरत होती है.

हीटमैप की मदद से, दर्शक आसानी से मैप पर डेटा पॉइंट के डिस्ट्रिब्यूशन और रिलेटिव तीव्रता को समझ सकते हैं. हीटमैप में हर जगह मार्कर लगाने के बजाय, डेटा के डिस्ट्रिब्यूशन को दिखाने के लिए कलर का इस्तेमाल किया जाता है.

नीचे दिए गए उदाहरण में, लाल रंग से ऑस्ट्रेलिया के विक्टोरिया में पुलिस स्टेशनों की संख्या ज़्यादा होने वाले इलाकों को दिखाया गया है.

पुलिस स्टेशनों की जगह दिखाने वाला हीटमैप वाला मैप
मैप पर हीटमैप

अगर आपने अब तक लाइब्रेरी सेट अप नहीं की है, तो इस पेज पर मौजूद बाकी जानकारी पढ़ने से पहले, सेटअप करने के लिए दी गई गाइड पढ़ें.

आसानी से इस्तेमाल किया जा सकने वाला हीटमैप जोड़ना

अपने मैप में हीटमैप जोड़ने के लिए, आपको एक डेटासेट की ज़रूरत होगी. इसमें, आपके काम की हर जगह के निर्देशांक शामिल होने चाहिए. सबसे पहले, map प्रॉपर्टी को GMSMapView पर सेट करके, एक GMUHeatmapTileLayer इंस्टेंस बनाएं. अपने ऐप्लिकेशन के viewDidLoad() फ़ंक्शन में ऐसा करें, ताकि हीटमैप के साथ काम करने से पहले, बेस मैप लोड हो जाए. इसके बाद, GMUHeatmapTileLayer इंस्टेंस में GMUWeightedLatLng ऑब्जेक्ट का कलेक्शन पास करें.

यह सुविधा GMUHeatmapTileLayer क्लास उपलब्ध कराती है, जो GMUWeightedLatLng ऑब्जेक्ट का कलेक्शन स्वीकार करती है. यह रेडियस, ग्रेडिएंट, और ऑपैसिटी के दिए गए विकल्पों के आधार पर, अलग-अलग ज़ूम लेवल के लिए टाइल इमेज बनाता है.

इस प्रोसेस के बारे में ज़्यादा जानकारी:

  1. GMUHeatmapTileLayer प्रॉपर्टी को map पर सेट करके, GMUHeatmapTileLayer इंस्टेंस बनाएं (ऐसा अपने ऐप्लिकेशन के viewDidLoad() फ़ंक्शन में करें).GMSMapView
  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
          

इस उदाहरण में, डेटा को police_stations.json नाम की 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. रेडियस: हीटमैप पर लागू किए गए गॉसियन ब्लर का साइज़, पिक्सल में दिखाया जाता है. डिफ़ॉल्ट रूप से, यह 20 होती है. यह संख्या 10 से 50 के बीच होनी चाहिए. दायरा सेट करने के लिए, GMUHeatmapTileLayer.radius का इस्तेमाल करें.

  2. ग्रेडिएंट: कलर की एक रेंज, जिसका इस्तेमाल हीटमैप अपना कलर मैप जनरेट करने के लिए करता है. यह रेंज, सबसे कम से लेकर सबसे ज़्यादा इंटेंसिटी तक की होती है. GMUGradient को बनाने के लिए, रंगों वाले पूर्णांक कलेक्शन और हर रंग के शुरुआती पॉइंट को दिखाने वाले फ़्लोट कलेक्शन का इस्तेमाल किया जाता है. यह शुरुआती पॉइंट, ज़्यादा से ज़्यादा इंटेंसिटी के प्रतिशत के तौर पर दिया जाता है और इसे 0 से 1 के बीच के फ़्रैक्शन के तौर पर दिखाया जाता है. आपको एक रंग वाले ग्रेडिएंट के लिए सिर्फ़ एक रंग या कई रंग वाले ग्रेडिएंट के लिए कम से कम दो रंग तय करने होंगे. कलर मैप, उन रंगों के बीच इंटरपोलेशन का इस्तेमाल करके जनरेट किया जाता है. डिफ़ॉल्ट ग्रेडिएंट में दो रंग होते हैं. colorMapSize पैरामीटर से ग्रेडिएंट में चरण की संख्या तय होती है. ज़्यादा वैल्यू से स्मूद ग्रेडिएंट बनेगा, जबकि कम वैल्यू से कॉन्टूर ग्राफ़ की तरह ज़्यादा शार्प ट्रांज़िशन बनेगा. ग्रेडिएंट सेट करने के लिए, GMUHeatmapTileLayer.gradient का इस्तेमाल करें.

  3. ओपैसिटी: यह पूरी हीटमैप लेयर की ओपैसिटी होती है. इसकी वैल्यू 0 से 1 के बीच होती है. डिफ़ॉल्ट रूप से, यह 0.7 पर सेट होती है. ऑपैसिटी वैल्यू सेट करने के लिए, 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() पर कॉल करें.

हीटमैप हटाना

हीटमैप हटाने के लिए, GMUHeatmapTileLayer.map को कॉल करें और nil को पास करें.

Swift

heatmapLayer.map = nil
      

Objective-C

_heatmapLayer.map = nil;
      

डेमो ऐप्लिकेशन देखना

हीटमैप लागू करने का एक और उदाहरण देखने के लिए, यूटिलिटी लाइब्रेरी के साथ शिप होने वाले डेमो ऐप्लिकेशन में HeatmapViewController देखें. सेटअप गाइड में, आपको डेमो ऐप्लिकेशन को चलाने का तरीका बताया गया है.