मार्कर मैप पर एकल स्थानों को दर्शाते हैं.
डिफ़ॉल्ट रूप से, मार्कर एक स्टैंडर्ड आइकॉन का इस्तेमाल करते हैं, जो 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 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
प्रॉपर्टी को अनदेखा करता है. जब तक iconView
सेट है, तब तक मौजूदा 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
पर सेट किया गया हो, चाहे उसकी असल वैल्यू कुछ भी हो. आप ऐसे ट्रांसफ़ॉर्मेशन लागू कर सकते हैं जो बाउंड से बाहर काम करते हैं, लेकिन ड्रॉ किया गया ऑब्जेक्ट, ऑब्जेक्ट की सीमाओं के अंदर होना चाहिए. सभी ट्रांसफ़ॉर्म/शिफ़्ट पर नज़र रखी जाती है और उन्हें लागू किया जाता है. कम शब्दों में कहें, तो सबव्यू, व्यू में शामिल होने चाहिए.
यह तय करने के लिए कि tracksViewChanges
प्रॉपर्टी को कब सेट करना चाहिए, आपको
मार्कर अपने-आप फिर से बनाने के फ़ायदों के मुकाबले, परफ़ॉर्मेंस की जांच करनी चाहिए. उदाहरण के लिए:
- अगर आपको कई बदलाव करने हैं, तो प्रॉपर्टी को
YES
से बदलकरNO
पर सेट किया जा सकता है. - जब कोई ऐनिमेशन चल रहा हो या कॉन्टेंट एसिंक्रोनस तौर पर लोड हो रहा हो,
तो कार्रवाइयां पूरी होने तक, आपको प्रॉपर्टी को
YES
पर सेट रखना चाहिए.
मार्कर की ओपैसिटी बदलना
मार्कर की अपारदर्शिता को opacity
प्रॉपर्टी से कंट्रोल किया जा सकता है. ओपैसिटी को
0.0 और 1.0 के बीच फ़्लोट के तौर पर बताएं, जहां 0 पूरी तरह से पारदर्शी है
और 1 पूरी तरह से अपारदर्शी है.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
आप 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
देखें.