मार्कर

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
प्लैटफ़ॉर्म चुनें: 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 प्रॉपर्टी को अनदेखा करता है. जब तक 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 देखें.