Используйте подкласс GMSAdvancedMarker для создания базовых или специальных маркерных функций, как показано ниже. Будучи подклассом GMSMarker , GMSAdvancedMarker предоставляет маркеры с более высокой степенью выраженности.
Аналогично GMSMarker , вы можете удалить расширенный маркер с карты, установив свойство map объекта GMSAdvancedMarker в nil . Кроме того, вы можете удалить все наложения (включая расширенные маркеры) с карты, вызвав метод clearGMSMapView .
Если вы хотите изменить маркер после его добавления на карту, убедитесь, что у вас сохранился объект GMSAdvancedMarker . Вы сможете изменить маркер позже, внеся изменения в этот объект.
Свойство mapCapabilities объекта GMSMapView добавляет программную проверку наличия специфичных для карты функций. Это полезно, когда требуется узнать, доступны ли определённые функции карты перед вызовом определённых API. Функция didChangeMapCapabilities объекта GMSMapViewDelegate также вызывается при изменении функций. Этот запрос определяет, поддерживает ли представление карты расширенные маркеры.
// ..._advancedMarker=[GMSAdvancedMarkermarkerWithPosition:kSeattleCoordinates];_fallbackMarker=[GMSMarkermarkerWithPosition:kSeattleCoordinates];-(void)addMarker{if(_mapView.mapCapabilities&GMSMapCapabilityFlagsAdvancedMarkers){_advancedMarker.map=_mapView;}else{_fallbackMarker.map=_mapView;}}#pragma mark - GMSMapViewDelegate-(void)mapView:(GMSMapView*)mapViewdidChangeMapCapabilities:(GMSMapCapabilityFlags)mapCapabilities{BOOLadvancedMarkersAvailable=mapCapabilities&GMSMapCapabilityFlagsAdvancedMarkers;_advancedMarker.map=advancedMarkersAvailable?_mapView:nil;_fallbackMarker.map=advancedMarkersAvailable?nil:_mapView;}
[null,null,["Последнее обновление: 2025-08-29 UTC."],[[["\u003cp\u003eThe \u003ccode\u003eGMSAdvancedMarker\u003c/code\u003e subclass in the Maps SDK for iOS allows you to create markers with enhanced features and customization options, inheriting functionalities from \u003ccode\u003eGMSMarker\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eYou can remove an advanced marker by setting its \u003ccode\u003emap\u003c/code\u003e property to \u003ccode\u003enil\u003c/code\u003e or use the \u003ccode\u003eclear\u003c/code\u003e method of \u003ccode\u003eGMSMapView\u003c/code\u003e to remove all overlays, including advanced markers.\u003c/p\u003e\n"],["\u003cp\u003eTo modify an existing marker, retain the \u003ccode\u003eGMSAdvancedMarker\u003c/code\u003e object and make changes to its properties.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003emapCapabilities\u003c/code\u003e property of \u003ccode\u003eGMSMapView\u003c/code\u003e enables checking for map features programmatically, such as support for advanced markers, before using related APIs, ensuring compatibility.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003edidChangeMapCapabilities\u003c/code\u003e function of the \u003ccode\u003eGMSMapViewDelegate\u003c/code\u003e is triggered when map capabilities change, offering a way to dynamically adapt marker usage based on available features.\u003c/p\u003e\n"]]],[],null,["# Create an advanced marker\n\nSelect platform: [Android](/maps/documentation/android-sdk/advanced-markers/add-marker \"View this page for the Android platform docs.\") [iOS](/maps/documentation/ios-sdk/advanced-markers/add-marker \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/advanced-markers/add-marker \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nUse the [`GMSAdvancedMarker`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSAdvancedMarker) subclass to create basic or\nspecific marker features, as shown below. As a subclass of\n[`GMSMarker`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSMarker), `GMSAdvancedMarker` provides markers with more\nexpression. \n\n### Swift\n\n```swift\nlet camera = GMSCameraPosition( target: coordinate, zoom: 14)\nlet mapID = GMSMapID(identifier: \"YOUR_MAP_ID\")\nlet mapView = GMSMapView(frame: view.bounds, mapID: mapID, camera: camera)\n\nlet marker = GMSAdvancedMarker(position: coordinate)\nmarker.map = mapView\n```\n\n### Objective-C\n\n```objective-c\nGMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:kCoordinate zoom:16];\nGMSMapID *mapID = [GMSMapID mapIDWithIdentifier:\"YOUR_MAP_ID\"];\n\nself.mapView = [GMSMapView mapWithFrame:self.view.bounds mapID:mapID camera:camera];\n\nGMSAdvancedMarker *marker = [GMSAdvancedMarker markerWithPosition:kCoordinate];\nMarker.map = self.mapView;\n```\n| Note: For testing, you can skip the step of creating and configuring a [map ID](/maps/documentation/get-map-id), by using mapId: `DEMO_MAP_ID` in your app code. `DEMO_MAP_ID` is intended for testing purposes only. Don't use `DEMO_MAP_ID` in a production environment.\n\nRemove an advanced marker\n-------------------------\n\nSimilar to [`GMSMarker`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSMarker), you can remove an advanced marker from the\nmap by setting the map property of the [`GMSAdvancedMarker`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSAdvancedMarker)\nto `nil`. Alternatively, you can remove all of the overlays (including advanced\nmarkers) on the map by calling the [`GMSMapView`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSMapView) `clear` method.\n\n\n### Swift\n\n```swift\nlet camera = GMSCameraPosition.camera(\n withLatitude: -33.8683,\n longitude: 151.2086,\n zoom: 6\n)\nlet mapView = GMSMapView.map(withFrame: .zero, camera: camera)\n// ...\nmapView.clear()\n \n```\n\n### Objective-C\n\n```objective-c\nGMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683\n longitude:151.2086\n zoom:6];\nmapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];\n// ...\n[mapView clear];\n \n```\n\n\u003cbr /\u003e\n\nIf you want to make modifications to a marker after you've added it to the map,\nensure that you keep hold of the [`GMSAdvancedMarker`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSAdvancedMarker)\nobject. You can modify the marker later by making changes to this object. \n\n### Swift\n\n```swift\nlet position = CLLocationCoordinate2D(latitude: 10, longitude: 10)\nlet marker = GMSAdvancedMarker(position: position)\nmarker.map = mapView\n// ...\nmarker.map = nil\n```\n\n### Objective-C\n\n```objective-c\nCLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10);\nGMSAdvancedMarker *marker = [GMSAdvancedMarker markerWithPosition:position];\nmarker.map = mapView;\n// ...\nmarker.map = nil;\n```\n\nMap capabilities\n----------------\n\nThe `mapCapabilities` property on [`GMSMapView`](/maps/documentation/ios-sdk/reference/objc/Classes/GMSMapView) adds programmatic\nchecking for map-specific features. This is useful when wanting to know if\ncertain map capabilities are available before calling specific APIs. The\n`didChangeMapCapabilities` function of\n[`GMSMapViewDelegate`](/maps/documentation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate) is also\n[invoked](/maps/documentation/ios-sdk/marker-gestures) as capabilities change.\nThis query determines if the map view supports advanced markers. \n\n### Swift\n\n```swift\n// ...\n\nlet advancedMarker: GMSAdvancedMarker = {\nGMSAdvancedMarker(position: CLLocationCoordinate2D(latitude: 47.6089945, longitude: -122.3410462))\n}()\n\nlet marker: GMSMarker = {\nGMSMarker(position: CLLocationCoordinate2D(latitude: 47.6089945, longitude: -122.3410462))\n}()\n\nfunc addMarker() {\n if mapView.mapCapabilities.contains(.advancedMarkers) {\n advancedMarker.map = mapView\n } else {\n marker.map = mapView\n }\n}\n\nextension MapCapabilities: GMSMapViewDelegate {\n func mapView(_ mapView: GMSMapView, didChangeMapCapabilities mapCapabilities: GMSMapCapabilityFlags) {\n\n let advancedMarkerAvailable = mapCapabilities.contains(.advancedMarkers)\n\n advancedMarker.map = advancedMarkerAvailable ? mapView : nil\n marker.map = advancedMarkerAvailable ? nil : mapView\n }\n}\n```\n\n### Objective-C\n\n```objective-c\n// ...\n\n_advancedMarker = [GMSAdvancedMarker markerWithPosition: kSeattleCoordinates];\n_fallbackMarker = [GMSMarker markerWithPosition: kSeattleCoordinates];\n\n- (void)addMarker {\n\n if (_mapView.mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers) {\n _advancedMarker.map = _mapView;\n } else {\n _fallbackMarker.map = _mapView;\n }\n}\n\n#pragma mark - GMSMapViewDelegate\n\n- (void)mapView:(GMSMapView *)mapView\n didChangeMapCapabilities:(GMSMapCapabilityFlags)mapCapabilities {\n BOOL advancedMarkersAvailable = mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers;\n _advancedMarker.map = advancedMarkersAvailable ? _mapView : nil;\n _fallbackMarker.map = advancedMarkersAvailable ? nil : _mapView;\n}\n```"]]