
मार्कर, मैप पर किसी एक जगह को दिखाते हैं.
डिफ़ॉल्ट रूप से, मार्कर एक स्टैंडर्ड आइकॉन का इस्तेमाल करते हैं. यह आइकॉन, Google Maps के सामान्य लुक और फ़ील के जैसा होता है. अगर आपको मार्कर को पसंद के मुताबिक बनाना है, तो डिफ़ॉल्ट मार्कर का रंग बदला जा सकता है. इसके अलावा, मार्कर की इमेज को पसंद के मुताबिक आइकॉन से बदला जा सकता है या मार्कर की अन्य प्रॉपर्टी में बदलाव किया जा सकता है.
मार्कर पर क्लिक करने के इवेंट के जवाब में, जानकारी वाली विंडो खोली जा सकती है. जानकारी वाली विंडो में, मार्कर के ऊपर दिखने वाली डायलॉग विंडो में टेक्स्ट या इमेज दिखती हैं. टेक्स्ट दिखाने के लिए, डिफ़ॉल्ट जानकारी वाली विंडो का इस्तेमाल किया जा सकता है. इसके अलावा, अपने हिसाब से जानकारी वाली विंडो बनाकर, उसके कॉन्टेंट को पूरी तरह कंट्रोल किया जा सकता है.
मार्कर जोड़ना
मार्कर जोड़ने के लिए, GMSMarker
ऑब्जेक्ट बनाएं. इसमें position और title शामिल करें. इसके बाद, इसे map पर सेट करें.
यहां दिए गए उदाहरण में, मौजूदा GMSMapView ऑब्जेक्ट में मार्कर जोड़ने का तरीका बताया गया है. मार्कर को 10,10 कोऑर्डिनेट पर बनाया गया है. इस पर क्लिक करने पर, जानकारी वाली विंडो में "Hello world" स्ट्रिंग दिखती है.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.title = "Hello World" marker.map = mapView
Objective-C
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 तरीके को कॉल करके, मैप पर मौजूद सभी ओवरले (मार्कर भी शामिल हैं) हटाए जा सकते हैं.
Swift
let camera = GMSCameraPosition.camera( withLatitude: -33.8683, longitude: 151.2086, zoom: 6 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) // ... mapView.clear()
Objective-C
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // ... [mapView clear];
अगर आपको मैप में मार्कर जोड़ने के बाद उसमें बदलाव करने हैं, तो पक्का करें कि आपके पास GMSMarker ऑब्जेक्ट हो. इस ऑब्जेक्ट में बदलाव करके, मार्कर में बाद में भी बदलाव किए जा सकते हैं.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.map = mapView // ... marker.map = nil
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.map = mapView; // ... marker.map = nil;
मार्कर का रंग बदलना
डिफ़ॉल्ट मार्कर इमेज के रंग को पसंद के मुताबिक बनाने के लिए, markerImageWithColor: की मदद से डिफ़ॉल्ट आइकॉन का टिंट किया गया वर्शन पाने का अनुरोध करें. इसके बाद, नतीजे के तौर पर मिली इमेज को GMSMarker की आइकॉन प्रॉपर्टी में पास करें.
Swift
marker.icon = GMSMarker.markerImage(with: .black)
Objective-C
marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
मार्कर की इमेज को पसंद के मुताबिक बनाना
अगर आपको डिफ़ॉल्ट मार्कर इमेज बदलनी है, तो मार्कर की icon या iconView प्रॉपर्टी का इस्तेमाल करके, पसंद के मुताबिक आइकॉन सेट किया जा सकता है. अगर iconView सेट है, तो एपीआई
icon प्रॉपर्टी को अनदेखा कर देता है.
मार्कर की icon प्रॉपर्टी का इस्तेमाल करना
यहां दिए गए स्निपेट से, icon प्रॉपर्टी में UIImage के तौर पर दिए गए पसंद के मुताबिक आइकॉन वाला मार्कर बनता है. आइकॉन, इंग्लैंड के लंदन में बीचों-बीच दिखता है. स्निपेट में यह माना गया है कि आपके ऐप्लिकेशन में "house.png" नाम की कोई इमेज है.
Swift
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
Objective-C
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" नाम की कोई इमेज है.
Swift
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 }) } }
Objective-C
@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 को स्वीकार करता है. इसलिए, आपके पास स्टैंडर्ड यूज़र इंटरफ़ेस (यूआई) कंट्रोल का ऐसा क्रम हो सकता है जो आपके मार्कर को तय करता है. हर व्यू में, ऐनिमेशन की स्टैंडर्ड सुविधाएं होती हैं. मार्कर के साइज़, रंग, और अल्फ़ा लेवल में बदलाव किए जा सकते हैं. साथ ही, अपनी पसंद के मुताबिक बदलाव भी किए जा सकते हैं. iconView प्रॉपर्टी, UIView की उन सभी प्रॉपर्टी के ऐनिमेशन के साथ काम करती है जिनमें ऐनिमेशन जोड़ा जा सकता है. हालांकि, यह frame और center के साथ काम नहीं करती.
iconView का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
tracksViewChangesकोYESपर सेट करने पर,UIViewको ज़्यादा संसाधनों की ज़रूरत पड़ सकती है. इससे बैटरी का इस्तेमाल बढ़ सकता है. इसके मुकाबले, सिंगल फ़्रेमUIImageस्टैटिक होती है और इसे फिर से रेंडर करने की ज़रूरत नहीं होती.- अगर स्क्रीन पर कई मार्कर हैं और हर मार्कर का अपना
UIViewहै, तो कुछ डिवाइस पर मैप रेंडर करने में समस्या आ सकती है. ऐसा तब होता है, जब सभी मार्कर एक ही समय पर बदलाव ट्रैक कर रहे हों. iconView, उपयोगकर्ता के इंटरैक्शन का जवाब नहीं देता, क्योंकि यह व्यू का स्नैपशॉट होता है.- व्यू, इस तरह काम करता है जैसे
clipsToBoundsकोYESपर सेट किया गया हो. भले ही, इसकी असल वैल्यू कुछ भी हो. ऐसे ट्रांसफ़ॉर्म लागू किए जा सकते हैं जो सीमाओं के बाहर काम करते हैं. हालांकि, आपके बनाए गए ऑब्जेक्ट को ऑब्जेक्ट की सीमाओं के अंदर होना चाहिए. सभी ट्रांसफ़ॉर्म/शिफ़्ट की निगरानी की जाती है और उन्हें लागू किया जाता है. संक्षेप में: सबव्यू, व्यू के अंदर होने चाहिए. GMSMarkerपर-copyWithZone:का इस्तेमाल करने के लिए, आपको पहलेGMSMarkerको कॉपी करना होगा. इसके बाद, कॉपी परiconViewका नया इंस्टेंस सेट करना होगा.UIView,NSCopyingके साथ काम नहीं करता. इसलिए, यहiconViewको कॉपी नहीं कर सकता.
tracksViewChanges प्रॉपर्टी को कब सेट करना है, यह तय करने के लिए, परफ़ॉर्मेंस से जुड़ी बातों को ध्यान में रखें. साथ ही, मार्कर को अपने-आप फिर से ड्रॉ करने के फ़ायदों को भी ध्यान में रखें. उदाहरण के लिए:
- अगर आपको कई बदलाव करने हैं, तो प्रॉपर्टी को
YESपर सेट करें. इसके बाद, इसे वापसNOपर सेट करें. - जब कोई ऐनिमेशन चल रहा हो या कॉन्टेंट को एसिंक्रोनस तरीके से लोड किया जा रहा हो, तो प्रॉपर्टी को
YESपर सेट रखें. ऐसा तब तक करें, जब तक कार्रवाइयां पूरी न हो जाएं.
मार्कर की ओपैसिटी बदलना
मार्कर की ओपैसिटी को उसकी opacity प्रॉपर्टी से कंट्रोल किया जा सकता है. ओपैसिटी को 0.0 और 1.0 के बीच फ़्लोट के तौर पर तय करें. यहां 0 का मतलब है कि मार्कर पूरी तरह पारदर्शी है और 1 का मतलब है कि मार्कर पूरी तरह अपारदर्शी है.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
`GMSMarkerLayer` का इस्तेमाल करके,
Core Animation
की मदद से मार्कर की ओपैसिटी का ऐनिमेशन बनाया जा सकता है.
मार्कर को फ़्लैट करना
मार्कर के आइकॉन आम तौर पर, मैप की सतह के बजाय डिवाइस की स्क्रीन के हिसाब से ड्रॉ किए जाते हैं. इसलिए, मैप को रोटेट करने, झुकाने या ज़ूम करने पर, मार्कर का ओरिएंटेशन बदलना ज़रूरी नहीं है.
मार्कर के ओरिएंटेशन को धरती के हिसाब से फ़्लैट पर सेट किया जा सकता है. मैप को रोटेट करने पर, फ़्लैट मार्कर रोटेट होते हैं. साथ ही, मैप को झुकाने पर, उनका पर्सपेक्टिव बदल जाता है. सामान्य मार्कर की तरह, मैप को ज़ूम इन या आउट करने पर, फ़्लैट मार्कर का साइज़ वही रहता है.
मार्कर के ओरिएंटेशन को बदलने के लिए, मार्कर की flat प्रॉपर्टी को YES या true पर सेट करें.
Swift
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let londonMarker = GMSMarker(position: positionLondon) londonMarker.isFlat = true londonMarker.map = mapView
Objective-C
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 पर सेट करने से, मार्कर को उसके बेस के बजाय, उसके सेंटर के चारों ओर रोटेट किया जाता है.
Swift
let degrees = 90.0 londonMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) londonMarker.rotation = degrees londonMarker.map = mapView
Objective-C
CLLocationDegrees degrees = 90; londonMarker.groundAnchor = CGPointMake(0.5, 0.5); londonMarker.rotation = degrees; londonMarker.map = mapView;
मार्कर पर होने वाले इवेंट मैनेज करना
मैप पर होने वाले इवेंट सुने जा सकते हैं. जैसे, जब कोई उपयोगकर्ता किसी मार्कर पर टैप करता है. इवेंट सुनने के लिए, आपको
GMSMapViewDelegate प्रोटोकॉल लागू करना होगा. मार्कर के खास इवेंट मैनेज करने का तरीका जानने के लिए, मार्कर के इवेंट और
जेस्चर देखें. इवेंट की गाइड में, GMSMapViewDelegate पर मौजूद तरीकों की सूची भी दी गई है. Street View के इवेंट के लिए, GMSPanoramaViewDelegate देखें.