33

我刚从苹果地图切换到谷歌地图。我似乎无法找到答案的一个问题是,如何让 GMSMarker 的图标从中心开始,而不是从图像底部开始。

我的意思的一个例子是当前位置点图标以它要表达的坐标为中心开始。但是 GMSMarkers 图标从图标底部开始。

4

3 回答 3

63

您可以使用属性更改标记图标的开始位置groundAnchor

适用于 iOS 的 Google Maps SDK 文档

地面锚点指定图标图像中锚定到地球表面上标记位置的点。该点在连续空间 [0.0, 1.0] x [0.0, 1.0] 内指定,其中 (0,0) 是图像的左上角,(1,1) 是右下角。

示例

下面的示例将标记旋转 90°。将 groundAnchor 属性设置为 0.5,0.5 会导致标记围绕其中心而不是其底部旋转。

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_;
于 2015-03-10T09:29:17.963 回答
7

在仔细阅读了谷歌地图文档之后,我想出了如何做到这一点。我相信这就是它的意图。

UIImage *markerIcon = [UIImage imageNamed:@"markericon.png"];
markerIcon = [markerIcon imageWithAlignmentRectInsets:UIEdgeInsetsMake(0, 0, (markerIcon.size.height/2), 0)];
self.marker.icon = markerIcon;
于 2015-03-10T04:55:01.987 回答
4

在斯威夫特 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
    }
于 2020-06-27T17:14:45.343 回答