
मार्कर, मैप पर किसी एक जगह को दिखाते हैं.
डिफ़ॉल्ट रूप से, मार्कर एक स्टैंडर्ड आइकॉन का इस्तेमाल करते हैं. यह आइकॉन, 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 प्रॉपर्टी, frame और center को छोड़कर, UIView की सभी ऐनिमेट की जा सकने वाली प्रॉपर्टी के ऐनिमेशन के साथ काम करती है.
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;
Core Animation का इस्तेमाल करके, मार्कर की अपारदर्शिता को ऐनिमेट किया जा सकता है GMSMarkerLayer.
मार्कर को फ़्लैट करना
मार्कर के आइकॉन आम तौर पर, मैप की सतह के बजाय डिवाइस की स्क्रीन के हिसाब से ड्रॉ किए जाते हैं. इसलिए, मैप को रोटेट करने, झुकाने या ज़ूम करने पर, मार्कर का ओरिएंटेशन बदलना ज़रूरी नहीं है.
मार्कर के ओरिएंटेशन को धरती के हिसाब से फ़्लैट पर सेट किया जा सकता है. मैप को रोटेट करने पर, फ़्लैट मार्कर रोटेट होते हैं. साथ ही, मैप को झुकाने पर, उनका पर्सपेक्टिव बदल जाता है. सामान्य मार्कर की तरह, मैप को ज़ूम इन या आउट करने पर, फ़्लैट मार्कर का साइज़ वही रहता है.
मार्कर के ओरिएंटेशन को बदलने के लिए, मार्कर की 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 देखें.