สร้างเครื่องหมายขั้นสูง

เลือกแพลตฟอร์ม: Android iOS JavaScript

ใช้คลาสย่อย GMSAdvancedMarker เพื่อสร้างฟีเจอร์ตัวทำเครื่องหมายพื้นฐานหรือเฉพาะดังที่แสดงด้านล่าง ในฐานะคลาสย่อยของ GMSMarker GMSAdvancedMarker ให้เครื่องหมายที่แสดงนิพจน์มากกว่า

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;

นำเครื่องหมายขั้นสูงออก

คุณสามารถนำเครื่องหมายขั้นสูงออกจากแผนที่ได้โดยการตั้งค่าพร็อพเพอร์ตี้แผนที่ของ GMSAdvancedMarker เป็น 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];
      

หากต้องการเปลี่ยนแปลงเครื่องหมายหลังจากที่เพิ่มลงในแผนที่แล้ว อย่าลืมยึดวัตถุ GMSAdvancedMarker ไว้ คุณสามารถแก้ไขเครื่องหมายได้ในภายหลังด้วยการเปลี่ยนแปลงวัตถุนี้

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;

ความสามารถในการทำแผนที่

พร็อพเพอร์ตี้ mapCapabilities บน GMSMapView เพิ่มการตรวจสอบแบบเป็นโปรแกรมสำหรับฟีเจอร์เฉพาะแผนที่ วิธีนี้มีประโยชน์เมื่อคุณต้องการทราบ ความสามารถบางอย่างของแผนที่พร้อมใช้งานก่อนจะเรียกใช้ API เฉพาะ นอกจากนี้ ฟังก์ชัน didChangeMapCapabilities ของ GMSMapViewDelegate ยังเรียกใช้เมื่อความสามารถมีการเปลี่ยนแปลงด้วย ข้อความค้นหานี้จะกำหนดว่ามุมมองแผนที่รองรับเครื่องหมายขั้นสูงหรือไม่

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