मार्कर

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

मार्कर, मैप पर एक जगह को दिखाते हैं.

डिफ़ॉल्ट रूप से, मार्कर एक मानक आइकॉन का इस्तेमाल करते हैं, जिसका 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 देखें.