ইভেন্ট

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

iOS-এর জন্য Maps SDK ব্যবহার করে, আপনি ম্যাপে ঘটা ইভেন্ট শুনতে পারবেন, যেমন ক্যামেরা পরিবর্তন ইভেন্ট বা মার্কার ট্যাপ ইভেন্ট।

ভূমিকা

ইভেন্ট শুনতে, আপনাকে অবশ্যই GMSMapViewDelegate প্রোটোকল প্রয়োগ করতে হবে। সাধারণত, আপনি ম্যাপ দেখানো ভিউ কন্ট্রোলারে এই প্রোটোকল প্রয়োগ করেন। নিচে একটি উদাহরণ দেওয়া হল:

Swift

import GoogleMaps

class Events: UIViewController, GMSMapViewDelegate {
  // ...
}
      

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

GMSMapView তৈরি হয়ে গেলে, আপনি আপনার ভিউ কন্ট্রোলারে এর ডেলিগেট সেট করতে পারবেন। GMSMapViewDelegate শুধুমাত্র ঐচ্ছিক পদ্ধতি প্রদান করে। কোনও নির্দিষ্ট ইভেন্ট শুনতে, আপনাকে অবশ্যই প্রাসঙ্গিক পদ্ধতি প্রয়োগ করতে হবে।

Swift

override func loadView() {
  super.loadView()
  let camera = GMSCameraPosition.camera(
    withLatitude: 1.285,
    longitude: 103.848,
    zoom: 12
  )
  let options = GMSMapViewOptions()
  options.camera = camera
  let mapView = GMSMapView(options: options)
  mapView.delegate = self
  self.view = mapView
}

// MARK: GMSMapViewDelegate

func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
  print("You tapped at \(coordinate.latitude), \(coordinate.longitude)")
}
      

Objective-C

- (void)loadView {
  [super loadView];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285
                                                          longitude:103.848
                                                               zoom:12];
  GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
  options.camera = camera;
  GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
  mapView.delegate = self;
  self.view = mapView;
}

#pragma mark - GMSMapViewDelegate

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
  NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude);
}
      

ক্যামেরার পজিশন

GMSMapViewDelegate ব্যবহার করে, আপনি ম্যাপ রেন্ডার করার জন্য ব্যবহৃত ক্যামেরা পজিশনে পরিবর্তন শুনতে পারবেন। তিনটি আলাদা ইভেন্ট আছে।

  • mapView:willMove: থেকে বোঝা যায় যে ক্যামেরার পজিশন পরিবর্তন হতে চলেছে। gesture আর্গুমেন্ট YES-এ সেট করা থাকলে, এটি ব্যবহারকারীর GMSMapView-এ প্যান বা টিল্টের মতো স্বাভাবিক জেসচার পারফর্ম করার কারণে হয়। অন্যথায়, NO ইঙ্গিত করে যে এটি প্রোগ্রাম্যাটিক পরিবর্তনের অংশ - যেমন, animateToCameraPosition:-এর মতো পদ্ধতির মাধ্যমে অথবা ম্যাপের লেয়ার সরাসরি আপডেট করা। এছাড়াও, ব্যবহারকারী 'আমার লোকেশন' বা কম্পাস বোতামে ট্যাপ করলে এটি NO হতে পারে, যা ক্যামেরা পরিবর্তন করে এমন অ্যানিমেশন তৈরি করে।

    mapView:idleAtCameraPosition: চালু হওয়ার আগে এই পদ্ধতিটি বেশ কয়েকবার কল করা হতে পারে, যদিও সাধারণত এটি তখনই ঘটে যখন অ্যানিমেশন এবং জেসচার একই সময়ে ঘটে - উদাহরণস্বরূপ, একটি জেসচার যেকোনও বর্তমান অ্যানিমেশন বাতিল করবে এবং mapView:willMove: দ্বিতীয়বার কল করবে।

  • mapView:willMove:-এ কল করার পরে, কোনও জেসচার বা অ্যানিমেশন চলাকালীন mapView:didChangeCameraPosition:-কে বারবার কল করা হয়। এটি ক্যামেরার মধ্যবর্তী পজিশন পেরিয়ে গেছে।

  • অবশেষে, GMSMapView-এ ক্যামেরার পজিশন আইডল হয়ে গেলে mapView:idleAtCameraPosition: ইনভোক করা হয় এবং প্রাসঙ্গিক ক্যামেরার পজিশন নির্দিষ্ট করে। এই মুহূর্তে, সব অ্যানিমেশন ও জেসচার বন্ধ হয়ে গেছে।

    অ্যাপ্লিকেশনগুলি এই ইভেন্টটি ব্যবহার করে মার্কার বা অন্যান্য রিফ্রেশ ট্রিগার করতে পারে GMSMapView-এ কন্টেন্ট দেখানো হচ্ছে, উদাহরণস্বরূপ, প্রতিটি ক্যামেরা পরিবর্তনের সময় কন্টেন্ট রিলোড করা।

যেমন, কোনও অ্যাপ্লিকেশন সরানোর সময় GMSMapView মুছে দিতে পারে এবং তারপর ক্যামেরা যে অবস্থানে এসে থামে সেটিকে রিভার্স জিওকোড করতে পারে।

Swift

let geocoder = GMSGeocoder()

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
  mapView.clear()
}

func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) {
    geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in
      guard error == nil else {
        return
      }

      if let result = response?.firstResult() {
        let marker = GMSMarker()
        marker.position = cameraPosition.target
        marker.title = result.lines?[0]
        marker.snippet = result.lines?[1]
        marker.map = mapView
      }
    }
  }
      

Objective-C

static GMSGeocoder *geocoder;

- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
  [mapView clear];
}

- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition {
  id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {
    if (error != nil) {
      return;
    }
    GMSReverseGeocodeResult *result = response.firstResult;
    GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target];
    marker.title = result.lines[0];
    marker.snippet = result.lines[1];
    marker.map = mapView;
  };
  [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler];
}
      

ব্যবসা ও অন্যান্য উল্লেখযোগ্য স্থানের ইভেন্ট

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

আপনি POI-তে ক্লিক ইভেন্টের উত্তর দিতে পারবেন। ব্যবসা ও অন্যান্য আকর্ষণীয় স্থান সম্পর্কিত নির্দেশিকা দেখুন।

অন্যান্য ইভেন্ট

GMSMapViewDelegate-এ পদ্ধতির সম্পূর্ণ তালিকা সম্পর্কে জানতে, রেফারেন্স গাইড দেখুন।