یک نشانگر پیشرفته ایجاد کنید

پلتفرم مورد نظر را انتخاب کنید: اندروید، iOS، جاوا اسکریپت

از زیرکلاس GMSAdvancedMarker برای ایجاد ویژگی‌های نشانگر پایه یا خاص، همانطور که در زیر نشان داده شده است، استفاده کنید. GMSAdvancedMarker به عنوان یک زیرکلاس از GMSMarker ، نشانگرهایی با بیان بیشتر ارائه می‌دهد.

سویفت

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

هدف-سی

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;

حذف نشانگر پیشرفته

مشابه GMSMarker ، می‌توانید با تنظیم ویژگی map مربوط به GMSAdvancedMarker به nil ، یک نشانگر پیشرفته را از نقشه حذف کنید. همچنین می‌توانید با فراخوانی متد clear از GMSMapView ، تمام همپوشانی‌ها (از جمله نشانگرهای پیشرفته) را روی نقشه حذف کنید.

سویفت

let camera = GMSCameraPosition.camera(
  withLatitude: -33.8683,
  longitude: 151.2086,
  zoom: 6
)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
// ...
mapView.clear()
      

هدف-سی

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
// ...
[mapView clear];
      

اگر می‌خواهید پس از افزودن یک نشانگر به نقشه، آن را تغییر دهید، مطمئن شوید که شیء GMSAdvancedMarker را نگه داشته‌اید. می‌توانید بعداً با ایجاد تغییرات در این شیء، نشانگر را تغییر دهید.

سویفت

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

هدف-سی

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

قابلیت‌های نقشه

ویژگی mapCapabilities در GMSMapView بررسی برنامه‌نویسی‌شده برای ویژگی‌های خاص نقشه را اضافه می‌کند. این ویژگی زمانی مفید است که بخواهیم قبل از فراخوانی APIهای خاص، بدانیم آیا قابلیت‌های خاصی از نقشه در دسترس هستند یا خیر. تابع didChangeMapCapabilities از GMSMapViewDelegate نیز با تغییر قابلیت‌ها فراخوانی می‌شود . این پرس‌وجو تعیین می‌کند که آیا نمای نقشه از نشانگرهای پیشرفته پشتیبانی می‌کند یا خیر.

سویفت

// ...

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
  }
}

هدف-سی

// ...

_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;
}