如何在Google Map iOS SDK中获取特定标记id

如何在Google Map iOS SDK中获取特定标记id,ios,objective-c,google-maps,google-maps-sdk-ios,Ios,Objective C,Google Maps,Google Maps Sdk Ios,我正在谷歌地图iOS sdk上工作。在这里,我在单独的位置坐标中创建多个标记 现在,我需要为所有标记添加标识符,例如标记,以便对特定标记执行操作 如果google map iOS sdk中没有标签或其他标识符选项,请建议我如何存档 提前感谢。我所做的就是简单地继承GMSMarker,然后像这样向它添加我需要的任何数据,我想这是您最好、最简单的选择 @interface ATGoogleMapsSelectiveMarker : GMSMarker @property (nonatomic) i

我正在谷歌地图iOS sdk上工作。在这里,我在单独的位置坐标中创建多个标记

现在,我需要为所有标记添加标识符,例如标记,以便对特定标记执行操作

如果google map iOS sdk中没有标签或其他标识符选项,请建议我如何存档


提前感谢。

我所做的就是简单地继承GMSMarker,然后像这样向它添加我需要的任何数据,我想这是您最好、最简单的选择

@interface ATGoogleMapsSelectiveMarker : GMSMarker

@property (nonatomic) int markerID;
@property (nonatomic) int order;
@property (strong, nonatomic) NSObject* referenceObject;
@property (nonatomic) BOOL selected;

@end
编辑:

我认为这很清楚,但我会继续讨论如何获取数据。。。当您创建标记并将其添加到地图时,您可以创建一个GoogleMapsSelectiveMarker,并在填充了所需的所有内容后将其添加到地图中,然后将所需的任何类注册为实现GMSMapViewDelegate的委托,并实现此方法

- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
    // Here you are sure that your marker object is of type ATGoogleMapsSelectiveMarker but it won't harm to double check
   if ([marker isKindOfClass:[ATGoogleMapsSelectiveMarker class]]) {
       ATGoogleMapsSelectiveMarker* parsedMarker = (ATGoogleMapsSelectiveMarker*)marker;
       NSLog(@"%d", parsedMarker.markerId);
   }

    return YES;
}

Swift解决方案:

通过为标记的键设置值,可以向标记添加标识符或任何内容:

marker.setValue("20", forKey: "id")
您可以在以后使用:

marker.value(forKey: "id")

我的方法是为GMSMarker创建一个扩展,并使用userData属性使GMSMarker适合我的需要,对我来说,我想用Branch类的实例添加每个标记(映射一些公司的分支的标记),这就是我的方法:

extension GMSMarker {
    var branch: Branch {
        set(branch) {
            self.userData = branch
        }

        get {
           return self.userData as! Branch
       }
   }
}
因此,当我设置marker属性时,我将其设置为:

marker.branch = someBranch

这难道不是比marker.userData=someBranch更清晰易读吗???

使用定制的GMSMarker类,我用markerID创建了marker。但是如何使用markerID获得特定的标记呢?例如:GMSMarker*marker=(GMSMarker*)[self.mapView view with markerid:100];我想这是很清楚的怎么做,我会更新我的答案当我从GMSMarker子类然后当分配mapView地图的标记,应用程序将崩溃。因为无法得到子类的边界。