চিহ্নিতকারীগুলি মানচিত্রে একক অবস্থান নির্দেশ করে।
ডিফল্টরূপে, মার্কারগুলি একটি স্ট্যান্ডার্ড আইকন ব্যবহার করে যার সাধারণ Google Maps চেহারা এবং অনুভূতি থাকে। আপনি যদি আপনার মার্কারটি কাস্টমাইজ করতে চান, তাহলে আপনি ডিফল্ট মার্কারটির রঙ পরিবর্তন করতে পারেন, অথবা মার্কার চিত্রটি একটি কাস্টম আইকন দিয়ে প্রতিস্থাপন করতে পারেন, অথবা মার্কারটির অন্যান্য বৈশিষ্ট্য পরিবর্তন করতে পারেন।
একটি মার্কারে ক্লিক ইভেন্টের প্রতিক্রিয়ায়, আপনি একটি তথ্য উইন্ডো খুলতে পারেন। একটি তথ্য উইন্ডো মার্কারের উপরে একটি ডায়ালগ উইন্ডোতে পাঠ্য বা চিত্র প্রদর্শন করে। আপনি পাঠ্য প্রদর্শনের জন্য একটি ডিফল্ট তথ্য উইন্ডো ব্যবহার করতে পারেন, অথবা এর বিষয়বস্তু সম্পূর্ণরূপে নিয়ন্ত্রণ করতে আপনার নিজস্ব কাস্টম তথ্য উইন্ডো তৈরি করতে পারেন।
একটি মার্কার যোগ করা হচ্ছে
একটি মার্কার যোগ করতে, একটি GMSMarker অবজেক্ট তৈরি করুন যাতে একটি position এবং title অন্তর্ভুক্ত থাকে এবং এর map সেট করুন।
নিম্নলিখিত উদাহরণটি একটি বিদ্যমান GMSMapView অবজেক্টে একটি মার্কার কীভাবে যুক্ত করতে হয় তা দেখায়। মার্কারটি স্থানাঙ্ক 10,10 এ তৈরি করা হয় এবং ক্লিক করলে একটি তথ্য উইন্ডোতে "Hello world" স্ট্রিংটি প্রদর্শন করে।
সুইফট
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.title = "Hello World" marker.map = mapView
অবজেক্টিভ-সি
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.title = @"Hello World"; marker.map = mapView;
আপনি marker.appearAnimation প্রপার্টিটি এতে সেট করে মানচিত্রে নতুন মার্কার যুক্ত করা অ্যানিমেট করতে পারেন:
-
kGMSMarkerAnimationPopযোগ করার সময় মার্কারটিকে তারgroundAnchorথেকে পপ করার জন্য। -
kGMSMarkerAnimationFadeInব্যবহার করা হয় যাতে যুক্ত করার সময় মার্কারটি বিবর্ণ হয়ে যায়।
একটি মার্কার অপসারণ
আপনি GMSMarker এর map প্রপার্টি nil এ সেট করে মানচিত্র থেকে একটি মার্কার সরাতে পারেন। বিকল্পভাবে, আপনি GMSMapView clear পদ্ধতি ব্যবহার করে বর্তমানে মানচিত্রে থাকা সমস্ত ওভারলে (মার্কার সহ) সরাতে পারেন।
সুইফট
let camera = GMSCameraPosition.camera( withLatitude: -33.8683, longitude: 151.2086, zoom: 6 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) // ... mapView.clear()
অবজেক্টিভ-সি
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // ... [mapView clear];
মানচিত্রে কোনও মার্কার যোগ করার পর যদি আপনি তাতে পরিবর্তন করতে চান, তাহলে নিশ্চিত করুন যে আপনি GMSMarker অবজেক্টটি ধরে রেখেছেন। আপনি পরে এই অবজেক্টে পরিবর্তন করে মার্কারটি পরিবর্তন করতে পারেন।
সুইফট
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.map = mapView // ... marker.map = nil
অবজেক্টিভ-সি
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.map = mapView; // ... marker.map = nil;
মার্কারের রঙ পরিবর্তন করা হচ্ছে
আপনি markerImageWithColor: ব্যবহার করে ডিফল্ট আইকনের একটি রঙিন সংস্করণ অনুরোধ করে এবং ফলাফলটি GMSMarker এর আইকন বৈশিষ্ট্যে পাস করে ডিফল্ট মার্কার চিত্রের রঙ কাস্টমাইজ করতে পারেন।
সুইফট
marker.icon = GMSMarker.markerImage(with: .black)
অবজেক্টিভ-সি
marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
মার্কার ইমেজ কাস্টমাইজ করা
যদি আপনি ডিফল্ট মার্কার ইমেজ পরিবর্তন করতে চান, তাহলে আপনি মার্কারের icon অথবা iconView প্রোপার্টি ব্যবহার করে একটি কাস্টম আইকন সেট করতে পারেন। যদি iconView সেট করা থাকে, তাহলে API icon প্রোপার্টি উপেক্ষা করে।
মার্কারের icon বৈশিষ্ট্য ব্যবহার করে
নিচের স্নিপেটটি icon প্রপার্টিতে UIImage হিসেবে প্রদত্ত একটি কাস্টম আইকন সহ একটি মার্কার তৈরি করে। আইকনটি লন্ডন, ইংল্যান্ডে কেন্দ্রীভূত। স্নিপেটটি ধরে নেয় যে আপনার অ্যাপ্লিকেশনটিতে "house.png" নামে একটি ছবি রয়েছে।
সুইফট
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let london = GMSMarker(position: positionLondon) london.title = "London" london.icon = UIImage(named: "house") london.map = mapView
অবজেক্টিভ-সি
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *london = [GMSMarker markerWithPosition:positionLondon]; london.title = @"London"; london.icon = [UIImage imageNamed:@"house"]; london.map = mapView;
যদি আপনি একই চিত্র দিয়ে একাধিক মার্কার তৈরি করেন, তাহলে প্রতিটি মার্কারে একই UIImage ব্যবহার করুন। এটি অনেক মার্কার প্রদর্শনের সময় আপনার অ্যাপ্লিকেশনের কর্মক্ষমতা উন্নত করতে সাহায্য করে।
এই ছবিতে একাধিক ফ্রেম থাকতে পারে। অতিরিক্তভাবে, alignmentRectInsets বৈশিষ্ট্যটি সম্মানিত হয়, যা কার্যকর যদি কোনও মার্কারের ছায়া বা অন্য অব্যবহারযোগ্য অঞ্চল থাকে।
মার্কারের iconView প্রোপার্টি ব্যবহার করে
নিচের স্নিপেটটি মার্কারের iconView প্রপার্টি সেট করে একটি কাস্টম আইকন সহ একটি মার্কার তৈরি করে এবং মার্কারের রঙের পরিবর্তনকে অ্যানিমেট করে। স্নিপেটটি ধরে নেয় যে আপনার অ্যাপ্লিকেশনটিতে "house.png" নামে একটি ছবি রয়েছে।
সুইফট
import CoreLocation import GoogleMaps class MarkerViewController: UIViewController, GMSMapViewDelegate { var mapView: GMSMapView! var london: GMSMarker? var londonView: UIImageView? override func viewDidLoad() { super.viewDidLoad() let camera = GMSCameraPosition.camera( withLatitude: 51.5, longitude: -0.127, zoom: 14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) view = mapView mapView.delegate = self let house = UIImage(named: "House")!.withRenderingMode(.alwaysTemplate) let markerView = UIImageView(image: house) markerView.tintColor = .red londonView = markerView let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let marker = GMSMarker(position: position) marker.title = "London" marker.iconView = markerView marker.tracksViewChanges = true marker.map = mapView london = marker } func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { UIView.animate(withDuration: 5.0, animations: { () -> Void in self.londonView?.tintColor = .blue }, completion: {(finished) in // Stop tracking view changes to allow CPU to idle. self.london?.tracksViewChanges = false }) } }
অবজেক্টিভ-সি
@import CoreLocation; @import GoogleMaps; @interface MarkerViewController : UIViewController <GMSMapViewDelegate> @property (strong, nonatomic) GMSMapView *mapView; @end @implementation MarkerViewController { GMSMarker *_london; UIImageView *_londonView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5 longitude:-0.127 zoom:14]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; self.view = _mapView; _mapView.delegate = self; UIImage *house = [UIImage imageNamed:@"House"]; house = [house imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; _londonView = [[UIImageView alloc] initWithImage:house]; _londonView.tintColor = [UIColor redColor]; CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); _london = [GMSMarker markerWithPosition:position]; _london.title = @"London"; _london.iconView = _londonView; _london.tracksViewChanges = YES; _london.map = self.mapView; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position { [UIView animateWithDuration:5.0 animations:^{ self->_londonView.tintColor = [UIColor blueColor]; } completion:^(BOOL finished) { // Stop tracking view changes to allow CPU to idle. self->_london.tracksViewChanges = NO; }]; } @end
যেহেতু iconView একটি UIView গ্রহণ করে, তাই আপনার মার্কারগুলিকে সংজ্ঞায়িত করে স্ট্যান্ডার্ড UI নিয়ন্ত্রণের একটি শ্রেণিবিন্যাস থাকতে পারে, প্রতিটি ভিউতে অ্যানিমেশন ক্ষমতার স্ট্যান্ডার্ড সেট থাকবে। আপনি মার্কার আকার, রঙ এবং আলফা স্তরে পরিবর্তন অন্তর্ভুক্ত করতে পারেন, পাশাপাশি ইচ্ছামত রূপান্তর প্রয়োগ করতে পারেন। iconView বৈশিষ্ট্যটি frame এবং center ছাড়া UIView এর সমস্ত অ্যানিমেটেবল বৈশিষ্ট্যের অ্যানিমেশন সমর্থন করে।
iconView ব্যবহার করার সময় নিম্নলিখিত বিবেচ্য বিষয়গুলি মনে রাখবেন:
-
tracksViewChangesYESতে সেট করা থাকলেUIViewরিসোর্সে অতিরিক্ত চাহিদা তৈরি করতে পারে, যার ফলে ব্যাটারির ব্যবহার বৃদ্ধি পেতে পারে। তুলনামূলকভাবে, একটি একক ফ্রেমUIImageস্ট্যাটিক এবং পুনরায় রেন্ডার করার প্রয়োজন হয় না। - যদি স্ক্রিনে অনেক মার্কার থাকে এবং প্রতিটি মার্কারে নিজস্ব
UIViewথাকে এবং সমস্ত মার্কার একই সময়ে পরিবর্তনগুলি ট্র্যাক করে, তাহলে কিছু ডিভাইসের মানচিত্র রেন্ডার করতে সমস্যা হতে পারে। -
iconViewব্যবহারকারীর মিথস্ক্রিয়ায় সাড়া দেয় না, কারণ এটি ভিউয়ের একটি স্ন্যাপশট। - ভিউটি এমন আচরণ করে যেন
clipsToBoundsYESতে সেট করা আছে, তার প্রকৃত মান যাই হোক না কেন। আপনি সীমানার বাইরে কাজ করে এমন ট্রান্সফর্ম প্রয়োগ করতে পারেন, তবে আপনি যে অবজেক্টটি আঁকবেন তা অবশ্যই অবজেক্টের সীমানার মধ্যে থাকতে হবে। সমস্ত ট্রান্সফর্ম/শিফট পর্যবেক্ষণ এবং প্রয়োগ করা হয়। সংক্ষেপে: সাবভিউগুলি অবশ্যই ভিউয়ের মধ্যেই থাকতে হবে। -
GMSMarkerএ-copyWithZone:ব্যবহার করতে, আপনাকে প্রথমেGMSMarkerকপি করতে হবে এবং তারপর কপিতেiconViewএর একটি নতুন ইনস্ট্যান্স সেট করতে হবে।UIViewNSCopyingসমর্থন করে না, তাই এটিiconViewকপি করতে পারে না।
tracksViewChanges প্রপার্টি কখন সেট করবেন তা নির্ধারণ করার জন্য, আপনাকে মার্কারটি স্বয়ংক্রিয়ভাবে পুনরায় আঁকার সুবিধার সাথে পারফরম্যান্সের বিবেচনাগুলি বিবেচনা করা উচিত। উদাহরণস্বরূপ:
- যদি আপনার ধারাবাহিক পরিবর্তন করতে হয়, তাহলে আপনি বৈশিষ্ট্যটি
YESএ পরিবর্তন করতে পারেন এবং তারপরNOএ ফিরে যেতে পারেন। - যখন কোনও অ্যানিমেশন চলছে বা বিষয়বস্তু অ্যাসিঙ্ক্রোনাসভাবে লোড হচ্ছে, তখন অ্যাকশনগুলি সম্পূর্ণ না হওয়া পর্যন্ত আপনার সম্পত্তিটি
YESতে সেট করা উচিত।
মার্কার অস্বচ্ছতা পরিবর্তন করা হচ্ছে
আপনি একটি মার্কারের অস্বচ্ছতা নিয়ন্ত্রণ করতে পারেন এর opacity বৈশিষ্ট্য ব্যবহার করে। আপনার অস্বচ্ছতাকে 0.0 এবং 1.0 এর মধ্যে একটি ফ্লোট হিসাবে নির্দিষ্ট করা উচিত, যেখানে 0 সম্পূর্ণ স্বচ্ছ এবং 1 সম্পূর্ণ অস্বচ্ছ।
সুইফট
marker.opacity = 0.6
অবজেক্টিভ-সি
marker.opacity = 0.6;
আপনি GMSMarkerLayer ব্যবহার করে কোর অ্যানিমেশনের মাধ্যমে মার্কার অস্বচ্ছতা অ্যানিমেট করতে পারেন।
মার্কার সমতল করা
মার্কার আইকনগুলি সাধারণত মানচিত্রের পৃষ্ঠের পরিবর্তে ডিভাইসের স্ক্রিনের বিপরীতে আঁকা হয়, তাই মানচিত্রটি ঘোরানো, কাত করা বা জুম করা মার্কারটির অভিযোজন পরিবর্তন করে না।
আপনি একটি মার্কারের অবস্থান পৃথিবীর বিপরীতে সমতল রাখতে পারেন। মানচিত্রটি ঘোরানোর সময় সমতল মার্কারগুলি ঘোরে এবং মানচিত্রটি কাত হয়ে গেলে দৃষ্টিকোণ পরিবর্তন করে। নিয়মিত মার্কারের মতো, মানচিত্রটি জুম ইন বা আউট করার সময় সমতল মার্কারগুলি তাদের আকার ধরে রাখে।
মার্কারের ওরিয়েন্টেশন পরিবর্তন করতে, মার্কারের flat প্রোপার্টি YES অথবা true তে সেট করুন।
সুইফট
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let londonMarker = GMSMarker(position: positionLondon) londonMarker.isFlat = true londonMarker.map = mapView
অবজেক্টিভ-সি
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *londonMarker = [GMSMarker markerWithPosition:positionLondon]; londonMarker.flat = YES; londonMarker.map = mapView;
একটি মার্কার ঘোরানো
rotation বৈশিষ্ট্য নির্ধারণ করে আপনি একটি মার্কারকে তার অ্যাঙ্কর পয়েন্টের চারপাশে ঘোরাতে পারেন। ঘূর্ণনটিকে CLLocationDegrees টাইপ হিসেবে নির্দিষ্ট করুন, যা ডিফল্ট অবস্থান থেকে ঘড়ির কাঁটার দিকে ডিগ্রীতে পরিমাপ করা হয়। যখন মার্কারটি মানচিত্রে সমতল থাকে, তখন ডিফল্ট অবস্থান হল উত্তর।
নিচের উদাহরণে মার্কারটি 90° ঘোরানো হয়েছে। groundAnchor প্রোপার্টি 0.5,0.5 তে সেট করলে মার্কারটি তার বেসের পরিবর্তে কেন্দ্রের চারপাশে ঘোরানো হবে।
সুইফট
let degrees = 90.0 londonMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) londonMarker.rotation = degrees londonMarker.map = mapView
অবজেক্টিভ-সি
CLLocationDegrees degrees = 90; londonMarker.groundAnchor = CGPointMake(0.5, 0.5); londonMarker.rotation = degrees; londonMarker.map = mapView;
মার্কারে ইভেন্ট পরিচালনা করা
আপনি ম্যাপে ঘটে যাওয়া ইভেন্টগুলি শুনতে পারেন, যেমন যখন কোনও ব্যবহারকারী কোনও মার্কারে ট্যাপ করেন। ইভেন্টগুলি শুনতে, আপনাকে GMSMapViewDelegate প্রোটোকলটি বাস্তবায়ন করতে হবে। নির্দিষ্ট মার্কার ইভেন্টগুলি কীভাবে পরিচালনা করতে হয় তা শিখতে মার্কার ইভেন্ট এবং অঙ্গভঙ্গি দেখুন। ইভেন্টগুলির নির্দেশিকা GMSMapViewDelegate-এর পদ্ধতিগুলির একটি তালিকাও প্রদান করে। রাস্তার দৃশ্য ইভেন্টগুলির জন্য, GMSPanoramaViewDelegate দেখুন।