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

5

我正在使用Google Map iOS SDK进行工作。在这里,我在不同的位置坐标上创建了多个标记。

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

如果Google Map iOS SDK中没有TAG或其他标识符选项,请建议我如何实现它。

提前感谢您。

2个回答

9

我的做法是继承GMSMarker,然后像这样添加我需要的任何数据。我猜这是你最好和最容易的选择。

@interface ATGoogleMapsSelectiveMarker : GMSMarker

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

@end

编辑:

我认为这很清楚,但我会继续说明如何获取数据...当您创建标记并将其添加到地图时,您创建ATGoogleMapsSelectiveMarker,并在填充所需内容后将其添加到地图上,然后注册任何您想要作为委托的类,该类实现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;
}

使用自定义的GMSMarker类,我创建了一个带有markerID的标记。但是如何使用markerID获取特定的标记?例如:GMSMarker *marker =(GMSMarker *)[self.mapView viewWithMarkerID:100]; - Balaji G
我认为如何做很清楚,我会更新我的答案。 - user1453351
当我从GMSMarker子类化时,当将mapView分配给标记的地图时,应用程序会崩溃。因为无法获取子类的Bounds。 - Linh Nguyen

4

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.branch = someBranch

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

第一个解决方案不正确,至少Xcode报错并抛出NSUnknownKeyException异常。不过,第二个解决方案运行得很顺利 :) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接