मार्कर

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

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

डिफ़ॉल्ट रूप से, मार्कर एक मानक आइकन का उपयोग करते हैं, जिसमें Google नक्शे का रूप और महसूस करते हैं. अगर आप अपने मार्कर को पसंद के मुताबिक बनाना चाहते हैं, तो आप या मार्कर चित्र को किसी कस्टम आइकन से बदलें या अन्य मार्कर की प्रॉपर्टी.

मार्कर पर किसी क्लिक इवेंट की प्रतिक्रिया में, आप एक जानकारी खोल सकते हैं विंडो खोलें. जानकारी विंडो, डायलॉग विंडो में टेक्स्ट या इमेज दिखाती है पर क्लिक करें. टेक्स्ट दिखाने या टेक्स्ट बनाने के लिए, डिफ़ॉल्ट जानकारी वाली विंडो का इस्तेमाल किया जा सकता है अपनी कस्टम जानकारी विंडो के कॉन्टेंट को पूरी तरह से कंट्रोल करने के लिए.

मार्कर जोड़ना

मार्कर जोड़ने के लिए, ऐसा 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.

मार्कर को हटाया जा रहा है

आप map प्रॉपर्टी nil के लिए GMSMarker. इसके अलावा, सभी ओवरले हटाए जा सकते हैं 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 सेट होने पर, UIView संसाधनों की मांग कर सकता है इससे YES तक बैटरी खर्च हो सकती है. इसके मुकाबले, सिंगल फ़्रेम 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;
      

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