मार्कर, मैप पर एक जगह को दिखाते हैं.
डिफ़ॉल्ट रूप से, मार्कर एक मानक आइकॉन का इस्तेमाल करते हैं, जिसका 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
प्रॉपर्टी को अनदेखा करता है.
मार्कर की 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
का इस्तेमाल करके [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
प्रोटोकॉल लागू करना होगा. खास मार्कर इवेंट को मैनेज करने का तरीका जानने के लिए, मार्कर इवेंट और हाथ के जेस्चर (हाव-भाव) देखें. इवेंट की गाइड में, GMSMapView लेन-देन के तरीकों की
सूची भी दी गई है. Street View से जुड़े इवेंट के लिए, GMSPanoramaViewDelegate
देखें.