
मार्कर, मैप पर किसी एक जगह को दिखाते हैं.
डिफ़ॉल्ट रूप से, मार्कर एक स्टैंडर्ड आइकॉन का इस्तेमाल करते हैं. यह आइकॉन, Google Maps के सामान्य लुक और स्टाइल से मिलता-जुलता होता है. अगर आपको मार्कर को पसंद के मुताबिक बनाना है, तो डिफ़ॉल्ट मार्कर का रंग बदला जा सकता है. इसके अलावा, मार्कर की इमेज को पसंद के आइकॉन से बदला जा सकता है या मार्कर की अन्य प्रॉपर्टी बदली जा सकती हैं.
मार्कर पर क्लिक इवेंट के जवाब में, जानकारी वाली विंडो खोली जा सकती है. जानकारी विंडो, मार्कर के ऊपर मौजूद डायलॉग विंडो में टेक्स्ट या इमेज दिखाती है. टेक्स्ट दिखाने के लिए, डिफ़ॉल्ट जानकारी विंडो का इस्तेमाल किया जा सकता है. इसके अलावा, अपनी पसंद के मुताबिक जानकारी विंडो बनाई जा सकती है, ताकि उसके कॉन्टेंट को पूरी तरह से कंट्रोल किया जा सके.
मार्कर जोड़ना
मार्कर जोड़ने के लिए, एक GMSMarker ऑब्जेक्ट बनाएं, जिसमें position और title शामिल हों. साथ ही, इसका map सेट करें.
यहां दिए गए उदाहरण में, किसी मौजूदा GMSMapView ऑब्जेक्ट में मार्कर जोड़ने का तरीका बताया गया है. मार्कर को 10,10 निर्देशांक पर बनाया गया है. इस पर क्लिक करने पर, जानकारी विंडो में "नमस्ते दुनिया" स्ट्रिंग दिखती है.
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 options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) // ... mapView.clear()
Objective-C
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; mapView = [[GMSMapView alloc] initWithOptions:options]; // ... [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 options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) 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]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; _mapView = [[GMSMapView alloc] initWithOptions:options]; 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 का इस्तेमाल करते समय इन बातों का ध्यान रखें:
UIViewकोtracksViewChangesपर सेट करने से,YESके लिए ज़्यादा संसाधनों की ज़रूरत पड़ सकती है. इससे बैटरी खर्च बढ़ सकता है. वहीं, सिंगल फ़्रेम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 देखें.