Gelişmiş işaretçi oluşturma

Platform seçin: Android iOS JavaScript

GMSAdvancedMarker alt sınıfını kullanarak Basic veya aşağıda gösterildiği gibi belirli işaretçi özelliklerini kullanabilirsiniz. Şu grubun alt sınıfı olarak: GMSMarker, GMSAdvancedMarker daha fazlasını içeren işaretçiler sağlar ifade eder.

Swift

let camera = GMSCameraPosition( target: coordinate, zoom: 14)
let mapID = GMSMapID(identifier: "YOUR_MAP_ID")
let mapView = GMSMapView(frame: view.bounds, mapID: mapID, camera: camera)

let marker = GMSAdvancedMarker(position: coordinate)
marker.map = mapView

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:kCoordinate zoom:16];
GMSMapID *mapID = [GMSMapID mapIDWithIdentifier:"YOUR_MAP_ID"];

self.mapView = [GMSMapView mapWithFrame:self.view.bounds mapID:mapID camera:camera];

GMSAdvancedMarker *marker = [GMSAdvancedMarker markerWithPosition:kCoordinate];
Marker.map = self.mapView;

Gelişmiş işaretçiyi kaldırma

GMSMarker'e benzer şekilde, GMSAdvancedMarker öğesinin harita özelliğini ayarlayarak haritayı nil adlı yere. Alternatif olarak, yer paylaşımlı reklamların tamamını (gelişmiş işaretçileri) GMSMapView clear yöntemini çağırarak harita üzerinde görebilirsiniz.

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];
      

Bir işaretçiyi haritaya ekledikten sonra üzerinde değişiklik yapmak isterseniz, GMSAdvancedMarker özelliğini koruduğunuzdan emin olun. nesnesini tanımlayın. Daha sonra bu nesnede değişiklik yaparak işaretçiyi değiştirebilirsiniz.

Swift

let position = CLLocationCoordinate2D(latitude: 10, longitude: 10)
let marker = GMSAdvancedMarker(position: position)
marker.map = mapView
// ...
marker.map = nil

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10);
GMSAdvancedMarker *marker = [GMSAdvancedMarker markerWithPosition:position];
marker.map = mapView;
// ...
marker.map = nil;

Harita özellikleri

GMSMapView üzerindeki mapCapabilities mülkü programatik ekler Haritaya özgü özellikleri kontrol etmek. Bu yaklaşım, bir proje yöneticisinin belirli API'leri çağırmadan önce belirli harita özelliklerinin kullanılabilir. İlgili içeriği oluşturmak için kullanılan didChangeMapCapabilities fonksiyonu GMSMapViewDelegate Özellikler değiştikçe çalıştırılır. Bu sorgu, harita görünümünün gelişmiş işaretçileri destekleyip desteklemediğini belirler.

Swift

// ...

let advancedMarker: GMSAdvancedMarker = {
GMSAdvancedMarker(position: CLLocationCoordinate2D(latitude: 47.6089945, longitude: -122.3410462))
}()

let marker: GMSMarker = {
GMSMarker(position: CLLocationCoordinate2D(latitude: 47.6089945, longitude: -122.3410462))
}()

func addMarker() {
  if mapView.mapCapabilities.contains(.advancedMarkers) {
      advancedMarker.map = mapView
    } else {
      marker.map = mapView
    }
}

extension MapCapabilities: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, didChangeMapCapabilities mapCapabilities: GMSMapCapabilityFlags) {

     let advancedMarkerAvailable = mapCapabilities.contains(.advancedMarkers)

     advancedMarker.map = advancedMarkerAvailable ? mapView : nil
     marker.map = advancedMarkerAvailable ? nil : mapView
  }
}

Objective-C

// ...

_advancedMarker = [GMSAdvancedMarker markerWithPosition:  kSeattleCoordinates];
_fallbackMarker = [GMSMarker markerWithPosition: kSeattleCoordinates];

-   (void)addMarker {

  if (_mapView.mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers) {
    _advancedMarker.map = _mapView;
    } else {
    _fallbackMarker.map = _mapView;
  }
}

#pragma mark - GMSMapViewDelegate

-   (void)mapView:(GMSMapView *)mapView
    didChangeMapCapabilities:(GMSMapCapabilityFlags)mapCapabilities {
  BOOL advancedMarkersAvailable = mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers;
  _advancedMarker.map = advancedMarkersAvailable ? _mapView : nil;
  _fallbackMarker.map = advancedMarkersAvailable ? nil : _mapView;
}