GMSMarker icon from center (iOS) GMSMarker icon from center (iOS) ios ios

GMSMarker icon from center (iOS)


You can change the start position of your marker icon with the property groundAnchor.

Google Maps SDK for iOS documentation:

The ground anchor specifies the point in the icon image that is anchored to the marker's position on the Earth's surface. This point is specified within the continuous space [0.0, 1.0] x [0.0, 1.0], where (0,0) is the top-left corner of the image, and (1,1) is the bottom-right corner.

Example:

The below example rotates the marker 90°. Setting the groundAnchor property to 0.5,0.5 causes the marker to be rotated around its center, instead of its base.

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);CLLocationDegrees degrees = 90;GMSMarker *london = [GMSMarker markerWithPosition:position];london.groundAnchor = CGPointMake(0.5, 0.5);london.rotation = degrees;london.map = mapView_;


I figured out how to do it after reading Google Maps Documentation very closely. I believe this is how it was intended to be done.

UIImage *markerIcon = [UIImage imageNamed:@"markericon.png"];markerIcon = [markerIcon imageWithAlignmentRectInsets:UIEdgeInsetsMake(0, 0, (markerIcon.size.height/2), 0)];self.marker.icon = markerIcon;


In Swift 5

    let marker: GMSMarker = GMSMarker() // Allocating Marker    marker.title = "Your location" // Setting title    marker.snippet = "Sub title" // Setting sub title    marker.icon = UIImage(named: "radio") // Marker icon    marker.appearAnimation = .pop // Appearing animation. default    marker.position = CLLocationCoordinate2D.init(latitude: 26.8289443, longitude: 75.8056178)        marker.groundAnchor = CGPoint(x: 0.5, y: 0.5)  // this is the answer of this question                DispatchQueue.main.async { // Setting marker on mapview in main thread.        marker.map = self.googleMapView // Setting marker on Mapview    }